Ich versuche also, einen Benutzer zu erstellen, der nur auf einen bestimmten Ordner in meinem public_html
Ordner zugreifen kann. Ich habe den Benutzer erfolgreich erstellt und kann mich anmelden. Ich hatte anfangs einige Probleme beim Anmelden, da der Ordner root gehören musste, bevor der SFTP-Benutzer SFTP ausführen konnte.
Also habe ich diese Anleitung befolgt:https://serverfault.com/questions/584986/bad-ownership-or-modes-for-chroot-directory-component– weist mich an, den Eigentümer des Ordners auf „Root“ zu ändern.
Nachdem ich dies getan habe, kann ich mich erfolgreich anmelden. Nach der Anmeldung kann ich jedoch keine Dateien hinzufügen oder sonst etwas in diesem Ordner tun, da er dem Root-Benutzer gehört.
Ich habe versucht, eine Gruppe zu erstellen und den Root-Benutzer und den SFTP-Benutzer als Mitglieder dieser Gruppe hinzuzufügen, aber das hat auch nicht funktioniert.
Meine Problemumgehung bestand darin, mit dem Root-Benutzer ein weiteres Verzeichnis innerhalb des SFTP-Ordners zu erstellen und anschließend den Eigentümer auf den SFTP-Benutzer zu ändern. Das scheint mir jedoch zu umständlich und fügt der Baumstruktur zusätzlich einen weiteren Ordner hinzu, wovon ich kein großer Fan bin.
Irgendwelche Ideen, wie man einem SFTP-Benutzer Schreibzugriff auf einen Ordner gewähren kann, während Root der Eigentümer bleibt?
Antwort1
Auf einigen Stack-Exchange-Sites wird viel über diese Art von Dingen geredet. Aber falls dies kein Duplikat ist ...
Wenn Sie in meinem CentOS 7 ChrootDirectory verwenden, um einen Benutzer auf ein Verzeichnis zu beschränken, muss dieses Verzeichnis root gehören und darf keinem anderen Benutzer Schreibzugriff gewähren, weder durch Berechtigungen noch durch FACLs. Sie können einen symbolischen Link einrichten, aber der SFTP-Benutzer kann ihm nicht folgen, wenn er auf ein Verzeichnis beschränkt ist. Sie müssen dies also tun.
Erstellen eines Benutzers
useradd ftp_user
Passwort einrichten
passwd ftp_user
Richten Sie die Berechtigungen ein. Sein Home-Verzeichnis wird sein Gefängnis sein.
chown root:root /home/ftp_user
chmod 0755 /home/ftp_user
Beschränken Sie den Benutzer jetzt auf dieses Jail
vi /etc/ssh/sshd_config
Ändere das:
#Subsystem sftp /usr/lib/openssh/sftp-server
Zu
Subsystem sftp internal-sftp
Hinzufügen
Match User ftp_user
ChrootDirectory %h
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
Speichern und vi beenden.
Nicht vergessen:
systemctl restart sshd
Jetzt tricksen wir sie aus. Nehmen wir an, Ihr Kunde hat eine Website, mit der er weiterspielen kann, unter /var/www/corny_website
Stellen Sie sicher, dass er über Berechtigungen für dieses Verzeichnis verfügt
setfacl -m u:ftp_user:rwx /var/www/corny_website
setfacl -d -m u:ftp_user:rwx /var/www/corny_website
Jetzt mounten Sie es, anstatt einen symbolischen Link darauf zu erstellen.
mkdir /home/ftp_user/corny_website
mount --bind /var/www/corny_website /home/ftp_user/
Wenn der Benutzer jetzt SFTP ausführt, wird ihm dieser Pipe-Fehler nicht mehr angezeigt und er kann nur /home/ftp_user sehen. Außerdem kann er nur auf /var/www/corny_website hochladen oder von dort herunterladen, was er als /corny_website sieht.