Ich habe eine Website in meinem VPS. Ich installiere Debian 7 auf diesem VPS. Mein HTTP-Dokument befindet sich in dem Verzeichnis, in dem /var/www/example.com
ich Nginx auf diesem Server installiert habe, und das Verzeichnis /var/www/example.com
gehört dem Benutzer www-data
und der Gruppe www-data
. Ich möchte einen Nicht-Root-Benutzer (nennen wir ihn someone
) hinzufügen, um Dokumente über einen FTP- oder SFTP-Client wie FileZilla in dieses Verzeichnis herunterladen oder hochladen zu können.
ich fandDasUndDasAnleitung, die erklärt, wie es geht chroot
. Ich habe versucht, es zu konfigurieren, aber es hat nicht funktioniert. Hier sind einige Befehle, die ich bisher verwendet habe.
useradd someone
groupadd sftpusers
usermod -G sftpusers someone
vi /etc/ssh/sshd_config
Ich habe diesen Code hinzugefügt
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Und am Ende der Datei habe ich hinzugefügt
Match group sftpusers
ChrootDirectory /var/www/example.com
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
service ssh restart
Aber als ich mich über FileZilla verbunden habe, wurde mir ein Fehler angezeigt. Ich vermute, dass dieser Fehler /var/www/example.com
auf Benutzer www-data
und Gruppe zurückzuführen ist www-data
.
Frage: Wie kann man Nicht-Root-Benutzern ermöglichen, Dokumente über einen FTP- oder SFTP-Client wie FileZilla in ein Verzeichnis herunterzuladen oder hochzuladen? /var/www/example.com
Dieser Nicht-Root-Benutzer sollte nicht auf übergeordnete Verzeichnisse wie FileZilla zugreifen können./var/www/
Antwort1
OH, um Himmels willen, setzen Sie die Berechtigung 777 für NICHTS, worauf „world+dog“ zugreifen kann (z. B. Ihre Website-Verzeichnisse, anonyme FTP-Ordner).
Modernes Linux und BSD haben benutzerspezifische ACLs, die Sie festlegen können und die perfekt funktionieren! Sie können dies auch verwenden, um rwx für bestimmte Benutzer und bestimmte Gruppen hinzuzufügen. Wenn Sie sie einmal verstanden haben, ist das ganz einfach!
TLDR; verwenden Sie den Befehl setfacl wie folgt: #setfacl -m someuser:rwx /public_html SHAZAM! Jetzt hat someuser Lese-/Schreib-/Ausführungsrechte für Ihr Verzeichnis public_html. Ich möchte Sie ermutigen, die Manpage für setfacl oder zumindest ein HOWTO zu lesen, um sich mit der Funktionalität vertraut zu machen. Hier ist eine einfache Einführung in Dateisystem-ACLs: https://www.redhat.com/sysadmin/linux-access-control-lists
Es eignet sich hervorragend für Webserver, bei denen Sie bestimmten Entwicklern mit eigenen Konten Zugriff gewähren müssen, ohne World+Dog rwx zu gewähren.
Antwort2
So stelle ich mein SFTP für einen bestimmten Benutzer ein
1] Benutzer erstellen
adduser {USER}
2] /etc/ssh/sshd_config bearbeiten
PasswordAuthentication yes
Subsystem sftp
internal-sftp -u 0007 -f AUTH -l VERBOSE
Match Group {USER}
ChrootDirectory {FOLDER}
ForceCommand internal-sftp -u 0007
AllowTcpForwarding no
GatewayPorts no
X11Forwarding no
3] Rechte für den Benutzer festlegen
chmod -R 777 {FOLDER}
4] ssh neu starten
service ssh restart
Ersetzen Sie {USER} durch Ihren Benutzer und {FOLDER} durch Ihren Ordner, dann sollte es funktionieren! ;)
Antwort3
Okay, nach einigem Ausprobieren scheint hier die Antwort zu sein.
adduser someone
vi /etc/ssh/sshd_config
Ich verwende die Konfiguration von Froggiz, daher sieht mein Code folgendermaßen aus:PasswordAuthentication yes Subsystem sftp internal-sftp -u 0007 -f AUTH -l VERBOSE Match Group someone ChrootDirectory /var/www ForceCommand internal-sftp -u 0007 AllowTcpForwarding no GatewayPorts no X11Forwarding no
service ssh restart
chmod -R 777 /var/www/example.com
. Dadurch kann jemand Dateien hoch-/herunterladen und dem Webserver/PHP erlauben, Dateien in diesem Verzeichnis zu verarbeiten.