SFTP auf ein bestimmtes Verzeichnis

Gespeichert von Erik Wegner am/um
Body

Der folgende Text beschreibt, wie ein Benutzer SFTP-Zugang zu einem Server bekommt. Auf dem Server soll er in einem bestimmten Verzeichnis berechtigt sein, dass jedoch dem WWW-Benutzer gehört.

  1. Ein neues Benutzerkonto anlegen:
    useradd -m -d /home/sftpuser -s /bin/false sftpuser
  2. Ein Passwort festlegen:
    passwd sftpuser
  3. Eine Gruppe anlegen:
    groupadd -U sftpuser htmlsftp
  4. Erweitere ACL setzen für das geteilte Verzeichnis:
    setfacl -R -d -m u::rwX,g::rX,u:82:rwX,g:82:rwX,g:htmlsftp:rwX /srv/html/sftp_upload
  5. Den Besitzer wechseln, damit chroot erlaubt ist:
    chown root:root /srv/html/sftp_upload
  6. Die Berechtigungen setzen, damit chroot erlaubt ist:
    chmod 755 /srv/html/sftp_upload
  7. Die sshd-Konfiguration erweitern (siehe folgender Abschnitt)
  8. Den SSH-Dämon neu starten
    systemctl restart sshd
  9. Zugriff per SSH testen
/etc/ssh/sshd_config
Match User sftpuser
ChrootDirectory /srv/html/sftp_upload
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no

Die Vergabe der erweiterten ACL erfolgt mit dem Ziel, dass sowohl der lokale PHP-Prozess als auch Mitglieder der Gruppe htmlsftp lesen und schreiben dürfen.

Die Zuordnung der Berechtigung 755 zum chroot-Ordner ist zwingend erforderlich.

In meiner Arch-Installation werden /sbin/false und /usr/bin/nologin als ungültige Shells angesehen. Dadurch wird der Zugriff mit SFTP verhindert. Deshalb muss eine interaktive Shell ausgewählt sein. Die interaktive Anmeldung ist jedoch durch die ForceCommand-Zeile unterbunden.