Move 03-ct101-nas.md to wiki
This commit is contained in:
parent
f740b32961
commit
f0efe8351f
1 changed files with 0 additions and 145 deletions
145
03-ct101-nas.md
145
03-ct101-nas.md
|
|
@ -1,145 +0,0 @@
|
||||||
# CT 101 — NAS (Samba/SFTP/Filebrowser) — Rebuild-Runbook
|
|
||||||
|
|
||||||
Voraussetzung: ZFS-Pool `nas` mit Dataset `nas/freigabe` existiert auf dem PVE-Host (siehe `01-pve-host.md`).
|
|
||||||
|
|
||||||
## 1. Container erstellen
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pct create 101 local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst \
|
|
||||||
--hostname nas \
|
|
||||||
--unprivileged 1 \
|
|
||||||
--cores 1 \
|
|
||||||
--memory 512 \
|
|
||||||
--swap 512 \
|
|
||||||
--rootfs local-lvm:4 \
|
|
||||||
--net0 name=eth0,bridge=vmbr0,ip=<LAN_IP_NAS>/24,gw=<LAN_IP_ROUTER> \
|
|
||||||
--features nesting=1 \
|
|
||||||
--timezone Europe/Berlin \
|
|
||||||
--onboot 1 \
|
|
||||||
--nameserver <LAN_IP_ADGUARD>
|
|
||||||
|
|
||||||
pct set 101 -mp0 /nas/freigabe,mp=/srv/freigabe
|
|
||||||
chown -R 100000:100000 /nas/freigabe
|
|
||||||
pct start 101
|
|
||||||
```
|
|
||||||
|
|
||||||
Ownership `100000:100000` = Standard-UID-Offset für unprivileged Container (Container-UID 0 = Host-UID 100000).
|
|
||||||
|
|
||||||
## 2. Samba
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pct exec 101 -- apt-get update
|
|
||||||
pct exec 101 -- apt-get install -y samba openssh-server
|
|
||||||
```
|
|
||||||
|
|
||||||
Debians `samba`-Metapaket zieht standardmäßig `samba-ad-dc` + `winbind` mit (nicht gebraucht, kein AD-DC-Zweck):
|
|
||||||
```bash
|
|
||||||
pct exec 101 -- systemctl disable --now winbind
|
|
||||||
pct exec 101 -- systemctl mask samba-ad-dc
|
|
||||||
```
|
|
||||||
|
|
||||||
`/etc/samba/smb.conf` ergänzen:
|
|
||||||
```ini
|
|
||||||
[freigabe]
|
|
||||||
path = /srv/freigabe
|
|
||||||
browseable = yes
|
|
||||||
read only = no
|
|
||||||
guest ok = no
|
|
||||||
valid users = <PRIMARY_USER>
|
|
||||||
create mask = 0664
|
|
||||||
directory mask = 0775
|
|
||||||
```
|
|
||||||
|
|
||||||
Workgroup und Mindest-Protokoll im `[global]`-Block:
|
|
||||||
```ini
|
|
||||||
workgroup = WORKGROUP
|
|
||||||
server min protocol = SMB2
|
|
||||||
```
|
|
||||||
|
|
||||||
⚠️ **NICHT TUN:** das Standard-`[homes]`-Share per `sed` nur an der Kopfzeile auskommentieren. Der Block hat mehrere Folgezeilen (`browseable`, `create mask`, `valid users = %S` etc.) — werden die nicht mit auskommentiert, hängen sie als „verwaiste" Zeilen im vorherigen Abschnitt (`[global]`) und überschreiben dort Werte, u.a. `valid users = %S`. Folge: IPC$-Zugriff für **alle** Nutzer blockiert (`NT_STATUS_ACCESS_DENIED`), auch für die eigentlich erlaubte Freigabe. Immer den **kompletten** `[homes]`-Block (Kopfzeile + alle Optionszeilen bis zur nächsten Sektion) auskommentieren. Mit `testparm -s` nach jeder Änderung prüfen, dass `[global]` sauber bleibt.
|
|
||||||
|
|
||||||
Benutzer anlegen:
|
|
||||||
```bash
|
|
||||||
pct exec 101 -- useradd -M -s /bin/bash -d /srv/freigabe <PRIMARY_USER>
|
|
||||||
pct exec 101 -- smbpasswd -a <PRIMARY_USER>
|
|
||||||
pct exec 101 -- smbpasswd -e <PRIMARY_USER>
|
|
||||||
pct exec 101 -- chpasswd # gleiches Passwort auch als Unix-Login setzen (für SSH/SFTP)
|
|
||||||
pct exec 101 -- chown -R <PRIMARY_USER>:<PRIMARY_USER> /srv/freigabe
|
|
||||||
pct exec 101 -- systemctl restart smbd nmbd
|
|
||||||
```
|
|
||||||
|
|
||||||
Unix- und Samba-Passwort bewusst identisch gehalten — ein Passwort für SMB, SFTP und Filebrowser.
|
|
||||||
|
|
||||||
## 3. SSH/SFTP-Zugriff
|
|
||||||
|
|
||||||
Mit obigem `useradd -s /bin/bash` ist SSH bereits nutzbar (Shell + Home = `/srv/freigabe`, Passwort per `chpasswd` gesetzt). Kein separater Schritt nötig, wenn Schritt 2 komplett ausgeführt wurde.
|
|
||||||
|
|
||||||
⚠️ **NICHT TUN:** einen passwortlosen SSH-Key für Fernzugriff (z.B. aus Guacamole) auf dieses Share hinterlegen. Zugriff auf sensible Daten (Dokumente, Fotos) sollte immer noch ein Passwort verlangen — bei Kompromittierung der aufrufenden Instanz (z.B. Guacamole/VPS) sonst direkter, ungeschützter Zugriff. Auch verschlüsselte Keys mit Passphrase lösen kein echtes UX-Problem (siehe `06-vps-strato.md`, Abschnitt Guacamole-Verbindungen) — einfach normales Passwort verwenden.
|
|
||||||
|
|
||||||
## 3b. Zweite Freigabe: Backups (read-only)
|
|
||||||
|
|
||||||
Bind-Mount und Samba-Share für `/nas/backups` (siehe `07-backup-restore.md`) — bewusst **read-only**, da die Backups volle Container-Images inkl. aller Secrets enthalten:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pct set 101 -mp1 /nas/backups,mp=/srv/backups,backup=0
|
|
||||||
```
|
|
||||||
|
|
||||||
`/etc/samba/smb.conf` ergänzen:
|
|
||||||
```ini
|
|
||||||
[backups]
|
|
||||||
path = /srv/backups
|
|
||||||
browseable = yes
|
|
||||||
read only = yes
|
|
||||||
guest ok = no
|
|
||||||
valid users = <PRIMARY_USER>
|
|
||||||
```
|
|
||||||
|
|
||||||
Kein separater Nutzer nötig, `<PRIMARY_USER>` deckt beide Shares ab. Erreichbar unter `\\nas.pve\backups`.
|
|
||||||
|
|
||||||
## 4. Filebrowser (grafische Web-Oberfläche)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
VER=$(curl -s https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": "[^"]*"' | cut -d'"' -f4)
|
|
||||||
curl -fsSL -o /tmp/filebrowser.tar.gz "https://github.com/filebrowser/filebrowser/releases/download/$VER/linux-amd64-filebrowser.tar.gz"
|
|
||||||
tar xzf /tmp/filebrowser.tar.gz -C /tmp filebrowser
|
|
||||||
pct push 101 /tmp/filebrowser /usr/local/bin/filebrowser
|
|
||||||
pct exec 101 -- chmod +x /usr/local/bin/filebrowser
|
|
||||||
```
|
|
||||||
|
|
||||||
⚠️ **NICHT TUN:** das offizielle `curl | bash`-Installskript von Filebrowser verwenden — stattdessen Release-Binary direkt von GitHub laden (transparenter, keine Shell-Pipe von einem Skript, das man vorher nicht liest).
|
|
||||||
|
|
||||||
Config + Service:
|
|
||||||
```bash
|
|
||||||
pct exec 101 -- mkdir -p /var/lib/filebrowser
|
|
||||||
pct exec 101 -- chown <PRIMARY_USER>:<PRIMARY_USER> /var/lib/filebrowser
|
|
||||||
pct exec 101 -- su -s /bin/bash <PRIMARY_USER> -c '/usr/local/bin/filebrowser config init -d /var/lib/filebrowser/filebrowser.db'
|
|
||||||
pct exec 101 -- su -s /bin/bash <PRIMARY_USER> -c '/usr/local/bin/filebrowser config set -a 0.0.0.0 -p 8080 -r /srv/freigabe -d /var/lib/filebrowser/filebrowser.db'
|
|
||||||
pct exec 101 -- su -s /bin/bash <PRIMARY_USER> -c "/usr/local/bin/filebrowser users add <PRIMARY_USER> '<PASSWORT>' --perm.admin -d /var/lib/filebrowser/filebrowser.db"
|
|
||||||
|
|
||||||
cat > /etc/systemd/system/filebrowser.service <<'EOF'
|
|
||||||
[Unit]
|
|
||||||
Description=Filebrowser Web UI
|
|
||||||
After=network.target srv-freigabe.mount
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
User=<PRIMARY_USER>
|
|
||||||
Group=<PRIMARY_USER>
|
|
||||||
ExecStart=/usr/local/bin/filebrowser -d /var/lib/filebrowser/filebrowser.db
|
|
||||||
Restart=on-failure
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl enable --now filebrowser
|
|
||||||
```
|
|
||||||
|
|
||||||
Erreichbar unter `http://nas.pve:8080` (LAN + Tailnet). **Bewusst nicht öffentlich exponiert** — für den Internetcafé-Fall gibt's den SFTP-Dateibrowser innerhalb der TOTP-gesicherten Guacamole-Verbindung (siehe `06-vps-strato.md`).
|
|
||||||
|
|
||||||
## Verifikation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
smbclient -L //<LAN_IP_NAS> -U <PRIMARY_USER>%'<PASSWORT>'
|
|
||||||
sftp <PRIMARY_USER>@<LAN_IP_NAS>
|
|
||||||
curl -s -o /dev/null -w "%{http_code}\n" http://<LAN_IP_NAS>:8080/
|
|
||||||
```
|
|
||||||
Loading…
Reference in a new issue