Hat man sich einen Chroot SFTP Benutzer eingerichtet und erhält folgende Fehlermeldung, dann hat der Ordner die falschen Rechte.
sshd[5237]: fatal: bad ownership or modes for chroot directory component "/srv/htdocs/web_123/"
Dies ist ein ChrootDirectory Eigentümer Problem. OpenSSH lehnt SFTP-Verbindungen in Ordner ab, die als unsicher anerkannt werden. Die Ordner müssen rekursiv root gehören.
Beispiel:
Subsystem sftp internal-sftp
Match User testuser
ChrootDirectory /srv/htdocs/web_123/html/public/
ForceCommand internal-sftp
AllowTcpForwarding no
In diesem Szenario möchten wir einen Linux Benutzer in den Ordner /srv/htdocs/web_123/html/public/ chrooten, die Ordner gehören aber dem „unsicheren“ Benutzer www-data. Der obige Fehler erscheint also weil die Ordner /srv/htdocs/web_123/html/srv/htdocs/web_123/html/ nicht root gehören.
Lösung:
Um Rechteprobleme mit dem Webserver zu vermeiden, legen wir unseren testuser wie gewohnt nach /home/testuser/ an.
useradd -m -s /bin/false testuser
Und ändern ChrootDirectory wie folgt.
Subsystem sftp internal-sftp
Match User testuser
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
Wir erstellen einen neuen Ordner und vergeben die korrekten Rechte.
mkdir /home/testuser/public
chown testuser: /home/testuser/public
chown root:root /home/testuser
chmod 0755 /home/testuser
Jetzt mounten wir den public-Ordner nach /home/testuser/public und der SFTP-Benutzer testuser kann Dateien hochladen.
mount --bind /srv/htdocs/web_123/html/public /home/testuser/public
Diesen Bind-Mount hinterlegen wir ebenfalls in unserer /etc/fstab.
/srv/htdocs/web_123/html/public /home/testuser/public none bind 0 0