Fix: bad ownership or modes for chroot directory component
Hat man sich einen Chroot SFTP Benutzer eingerichtet und erhält folgende Fehlermeldung, dann hat der Ordner die falschen Rechte.
1 | 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:
1 2 3 4 5 6 | 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.
1 | useradd -m -s /bin/false testuser |
Und ändern ChrootDirectory
wie folgt.
1 2 3 4 5 6 | Subsystem sftp internal-sftp Match User testuser ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no |
Wir erstellen einen neuen Ordner und vergeben die korrekten Rechte.
1 2 3 4 5 | 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.
1 | mount --bind /srv/htdocs/web_123/html/public /home/testuser/public |
Diesen Bind-Mount hinterlegen wir ebenfalls in unserer /etc/fstab
.
1 | /srv/htdocs/web_123/html/public /home/testuser/public none bind 0 0 |