adminForge

free | no tracking | no logging | no advertising

Das ist unser Motto. Mit adminForge bieten wir kostenlose Dienste an. Unser Ziel ist es, eine freie und datensparsame Alternative zu bekannten Diensten bereitzustellen. Seit 2014 betreiben wir adminForge gemeinsam mit Spaß an der Technik und an Open-Source.

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.

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 /srv/htdocs/web_123/html gehören aber dem „unsicheren“ Benutzer www-data. Der obige Fehler erscheint also weil die Ordner /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