Füge README, docker-compose.yml und users.conf für SFTP-Dienst mit Docker hinzu

This commit is contained in:
st-server
2026-01-14 12:02:50 +01:00
parent a76263b6b7
commit 2af9c1ae91
3 changed files with 117 additions and 1 deletions

105
README.md
View File

@@ -1,3 +1,106 @@
# Jailed # Jailed
Ein docker container der zugang zu einem definierten ordner per ssh oder sftp erlaubt. # SFTP mit Docker (atmoz/sftp)
Dieses Repository stellt einen einfachen SFTPDienst mit dem DockerImage **atmoz/sftp** bereit. Der Container chrootet Benutzer in ihr Home und erlaubt Schreibzugriff direkt im HomeVerzeichnis. Authentifizierung erfolgt per SSHKey.
---
## Inhalt des Repositories
- **docker-compose.yml** — startet den SFTPContainer
- **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 KeyOnly Authentifizierung.
- **1000:100** sind **UID:GID** des Benutzers auf dem Host; passe diese Werte an.
- **.** bedeutet Home ist `/home/test` (kein zusätzliches UploadVerzeichnis).
---
## 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@<server-ip>
```
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 DockerVolumes statt eines HostBindMounts. Ohne WSL kann KeyOnly 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 SFTPPort nur für notwendige IPs oder nutze FirewallRegeln.
- Entferne unnötige PasswortAuthentifizierung in Produktion.
- Überwache ContainerLogs und setze ggf. Fail2Ban oder NetzwerkACLs ein.

10
docker-compose.yml Normal file
View File

@@ -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

3
users.conf Normal file
View File

@@ -0,0 +1,3 @@
# format: user:password[:e][:uid[:gid[:dir1[,dir2]...]]]
alice:!:e:1000:100:upload
test:Passw0rd:1000:100:upload