
Ich versuche, ein neues SFTP-Konto für meinen Server zu erstellen. Wenn ich diese Anweisungen befolgegenau, dann funktioniert alles einwandfrei:https://www.thegeekstuff.com/2012/03/chroot-sftp-setup/
Ich kann mich über mit dem guestuser
Benutzer verbinden sftp
, mein Home-Verzeichnis durchsuchen und von eine Ebene höher incoming
in gehen /sftp/guestuser
.
ChrootDirectory
Ich kann den Wert sogar so ändern , /etc/ssh/sshd_config
dass er speziell lautet /sftp/guestuser
, anstatt den %u
Parameter zu implementieren. Fest codierte Verzeichnisnamen funktionieren daher einwandfrei.
ChrootDirectory
Wenn ich ab diesem Punkt jedoch nur den Namen meiner sftpusers
Gruppe in das Verzeichnis meiner tatsächlichen Website ändere /var/www/www.example.com
, kann ich mich über den Befehl mit diesem Benutzer nicht mehr verbinden sftp
. Die Shell gibt Folgendes aus:
Verbindung zu www.example.com vom Remote-Host geschlossen. Paket konnte nicht gelesen werden: Verbindung vom Peer zurückgesetzt
Das habe ich auf jeden Fall getan:
- Stellen Sie sicher, dass sich der
incoming
Ordner in meinem/var/www/www.example.com
Verzeichnis befindet - Legen Sie den Besitz von
/var/www/www.example.com
beiden/var/www/www.example.com/incoming
aufguestuser:sftpusers
- Habe versucht, das Home-Verzeichnis des Benutzers wie
/
folgt festzulegen:usermod guestuser -d /
Das /sftp/guestuser
Verzeichnis (das, mit dem es funktioniert hat) ist im Besitz von root:root
, daher sollte die Tatsache, dass die Berechtigungen von /var/www
aktiviert sind, root:root
keine Rolle spielen(?)
Warum kann ich das Home-Verzeichnis meines neuen SFTP-Benutzers nicht ändern?
AKTUALISIEREN
Ich kann das Verzeichnis ändern in:
/sftp
/
/var
/var/www
Das funktioniert alles. Aber sobald ich noch einen Schritt weiter gehe /var/www
, also etwa /var/www/test
, funktioniert es nicht. Ich habe versucht, die Punkte aus dem ursprünglichen Verzeichnisnamen zu entfernen, der war www.example.com
, aber es hat keinen Unterschied gemacht.
Es geht auch nicht um eine Beschränkung der Anzahl der Unterverzeichnisebenen, denn das /sftp/guestuser/incoming
hat auch funktioniert. Beim Testen mit einem neuen Verzeichnis /web/www.example.com
hat es nicht funktioniert.
Antwort1
Okay, ich habe also die Ursache ermittelt. Das Verzeichnis, das ich als ChrootDirectory
für den Benutzer definiere, muss Eigentum von sein root
.
Wenn ich möchte, dass mein Benutzer Dinge hochladen kann (was bei einem Root-Benutzer offensichtlich nicht möglich ist), muss ich dort ein Unterverzeichnis erstellen und dieses Verzeichnis beim -d
Erstellen oder Bearbeiten des Benutzers über den Parameter als sein Home-Verzeichnis festlegen.
Wenn der Besitz zu irgendeinem Zeitpunkt geändert wird, sodass der ChrootDirectory
Benutzer Eigentümer der Datei ist, der per FTP darauf zugreifen möchte, broken pipe
wird die Meldung erneut angezeigt. Wenn Sie den Besitz wieder auf ändern root
, kann der Benutzer erneut eine Verbindung herstellen.