Files
Jailed/README.md

3.2 KiB
Raw Blame History

Jailed

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

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
mkdir -p ./data/test/.ssh
  1. Public Key des Clients in authorized_keys kopieren
cp /pfad/zum/id_ed25519.pub ./data/test/.ssh/authorized_keys
  1. Rechte und Besitz setzen (Linux oder WSL empfohlen)
sudo chown -R 1000:100 ./data/test
sudo chmod 700 ./data/test/.ssh
sudo chmod 600 ./data/test/.ssh/authorized_keys
  1. Container starten
docker compose up -d
  1. Verbindungstest vom Client
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
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.