# Jailed # SFTP mit Docker (atmoz/sftp) Dieses Repository stellt einen einfachen SFTP‑Dienst mit dem Docker‑Image **atmoz/sftp** bereit. Der Container chrootet Benutzer in ihr Home und erlaubt Schreibzugriff direkt im Home‑Verzeichnis. Authentifizierung erfolgt per SSH‑Key. --- ## Inhalt des Repositories - **docker-compose.yml** — startet den SFTP‑Container - **users.conf** — Benutzerdefinitionen für atmoz/sftp - **./data/test/** — gemountetes Home des Benutzers `test` (auf dem Host) --- ## Beispielkonfiguration **docker-compose.yml** ```yaml version: "3.8" services: sftp: image: atmoz/sftp:latest container_name: sftp ports: - "22345:22" volumes: - ./data/test:/home/test:rw - ./users.conf:/etc/sftp/users.conf:ro restart: unless-stopped ``` **users.conf** ``` # format: user:password[:e][:uid[:gid[:dir1[,dir2]...]]] test:!:e:1000:100:. ``` **Kurz erklärt** - **test** ist der Benutzername. - **!** als Passwort bedeutet kein Passwort gesetzt. - **e** erzwingt Key‑Only Authentifizierung. - **1000:100** sind **UID:GID** des Benutzers auf dem Host; passe diese Werte an. - **.** bedeutet Home ist `/home/test` (kein zusätzliches Upload‑Verzeichnis). --- ## Installation und Start 1. **Verzeichnisstruktur anlegen** ```bash mkdir -p ./data/test/.ssh ``` 2. **Public Key des Clients in authorized_keys kopieren** ```bash cp /pfad/zum/id_ed25519.pub ./data/test/.ssh/authorized_keys ``` 3. **Rechte und Besitz setzen (Linux oder WSL empfohlen)** ```bash sudo chown -R 1000:100 ./data/test sudo chmod 700 ./data/test/.ssh sudo chmod 600 ./data/test/.ssh/authorized_keys ``` 4. **Container starten** ```bash docker compose up -d ``` 5. **Verbindungstest vom Client** ```bash sftp -i id_ed25519 -P 22345 test@ ``` Der Benutzer kann nun Dateien direkt in seinem Home `/home/test` (gemountet `./data/test`) erstellen und bearbeiten. --- ## Hinweise zu Rechten und Windows - **Wichtig**: Das Container‑`/home` darf nicht komplett vom Host überschrieben werden. Deshalb mounten wir nur `/home/test`. - Auf **Linux/WSL** funktionieren `chown` und `chmod` wie oben gezeigt. - Auf **Windows ohne WSL** wirken `chown`/`chmod` nicht auf NTFS; in diesem Fall empfiehlt sich **Docker mit WSL2** als Backend oder die Nutzung eines Docker‑Volumes statt eines Host‑Bind‑Mounts. Ohne WSL kann Key‑Only Auth problematisch sein. --- ## Troubleshooting - **bad ownership or modes for chroot directory** → Prüfe, dass `/home` im Container nicht vom Host überschrieben wird und dass `./data/test` die richtige **UID:GID** besitzt. - **Port bereits belegt** → Ändere die Portzuordnung in `docker-compose.yml` oder prüfe mit `netstat`/`ss`, welcher Prozess den Port nutzt. - **Key wird abgelehnt** → Rechte von `.ssh` und `authorized_keys` prüfen; UID/GID in `users.conf` mit `ls -n ./data/test` vergleichen. - **Logs prüfen** ```bash docker logs sftp ``` --- ## Sicherheit und Best Practices - Verwende **ed25519** Schlüssel für Clients. - Öffne den SFTP‑Port nur für notwendige IPs oder nutze Firewall‑Regeln. - Entferne unnötige Passwort‑Authentifizierung in Produktion. - Überwache Container‑Logs und setze ggf. Fail2Ban oder Netzwerk‑ACLs ein.