diff --git a/README.md b/README.md index e3369aa..31b43a2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,106 @@ # Jailed -Ein docker container der zugang zu einem definierten ordner per ssh oder sftp erlaubt. \ No newline at end of file +# 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. + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..694766f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,10 @@ +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 \ No newline at end of file diff --git a/users.conf b/users.conf new file mode 100644 index 0000000..7be0083 --- /dev/null +++ b/users.conf @@ -0,0 +1,3 @@ +# format: user:password[:e][:uid[:gid[:dir1[,dir2]...]]] +alice:!:e:1000:100:upload +test:Passw0rd:1000:100:upload