Füge README, docker-compose.yml und users.conf für SFTP-Dienst mit Docker hinzu
This commit is contained in:
105
README.md
105
README.md
@@ -1,3 +1,106 @@
|
||||
# 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 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@<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 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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user