Dieser Artikel zeigt Ihnen, wie Sie gesicherte SSH File Transfer Protocol (SFTP)-Benutzer erstellen, die in ihren Home-Verzeichnissen eingeschränkt oder eingesperrt sind.
WARNUNG :Versuchen Sie nicht, den Root-Benutzer einzusperren. Sperren Sie nur zusätzliche Benutzer, damit Sie den Root-Benutzer nicht daran hindern, Operationen korrekt auszuführen.
Bevor Sie beginnen, lesen Sie die folgenden Best Practices:
-
Das Home-Verzeichnis des SFTP-Benutzers muss
root:root
gehören . Andere Verzeichnisse können (und sollten) dem Benutzer gehören (und beschreibbar sein). -
Es ist wichtig sicherzustellen, dass der Chroot-Benutzer Schreibzugriff auf das angegebene DocumentRoot hat.
-
Es ist wichtig, sich anzumelden und zu testen, ob der SFTP-Benutzer ordnungsgemäß funktioniert.
-
Es ist wichtig sicherzustellen, dass der hinzugefügte SFTP-Benutzer zur SFTP-Gruppe hinzugefügt wird.
-
Diese Anweisungen beziehen sich auf das Hinzufügen einer einzelnen Domain (SFTP-Benutzer), aber Sie könnten sie möglicherweise verwenden, um mehrere Domains zu verwalten.
Wichtig Hinweis:Die Schritte in diesem Artikel funktionieren nicht mit RHEL® 7 oder CentOS® 7. Wie bei jeder ordnungsgemäßen Chroot-Operation bietet diese Konfiguration keinen Schreibzugriff auf das Chroot-Verzeichnis. Nur Unterverzeichnisse des Chroot-Gefängnisses sind beschreibbar. Dies liegt an der Art und Weise, wie Root-Berechtigungen auf den übergeordneten Verzeichnissen interpretiert werden, in denen der SFTP-Benutzer enthalten ist.
Führen Sie die folgenden Schritte aus, um gesicherte SFTP-Benutzer zu erstellen, die in ihren Home-Verzeichnissen eingesperrt sind:
-
Fügen Sie die SFTP-Gruppe hinzu, die Sie für den SFTP-Zugriff verwenden möchten, indem Sie den folgenden Befehl ausführen:
groupadd sftponly
-
Fügen Sie den SFTP-Benutzer hinzu, indem Sie den folgenden Befehl ausführen und dabei
myuser
ersetzen mit dem Benutzernamen:useradd -d /var/www/vhosts/domain.com -s /bin/false -G sftponly myuser
-
Erstellen Sie ein Passwort für den Benutzer, indem Sie den folgenden Befehl ausführen und dabei
myuser
ersetzen mit dem Benutzernamen:passwd myuser
-
Öffnen Sie die
sshd_config
Datei, die die SSH- und SFTP-Konfiguration enthält, indem Sie den folgenden Befehl ausführen:nano /etc/ssh/sshd_config
-
Kommentieren Sie die folgende Zeile aus, indem Sie am Anfang ein Hash-Symbol (#) hinzufügen, wie im folgenden Beispiel gezeigt:
#Subsystem sftp /usr/lib/openssh/sftp-server
-
Fügen Sie die folgende Zeile direkt unter der gerade auskommentierten Zeile hinzu:
Subsystem sftp internal-sftp
-
Fügen Sie den folgenden Code am Ende der Datei hinzu:
Match Group sftponly ChrootDirectory %h X11Forwarding no AllowTCPForwarding no ForceCommand internal-sftp
-
Führen Sie
sshd
aus Befehl, um die Änderungen zu testen, und starten Sie dann den Dienst neu.Wichtig :Wenn dieser Schritt falsch ausgeführt wird, kann Ihre SSHD-Konfiguration beschädigt werden.
sshd -t service sshd restart
Stellen Sie sicher, dass die Dateiberechtigungen im Dateisystem korrekt sind
Als Nächstes müssen Sie überprüfen, ob die Dateiberechtigungen im Dateisystem korrekt sind, damit das SFTP-Jail ordnungsgemäß funktioniert.
-
Stellen Sie sicher, dass
SFTPROOT
Verzeichnis (das Home-Verzeichnis, das Sie beim Hinzufügen des SSH-Benutzers festgelegt haben) das Rechtuser:root group:root
hat Berechtigungen, indem Sie den folgenden Befehl ausführen:chown root:root /var/www/vhosts/mywebsite.com/
-
Um zu überprüfen, ob die SFTP-Anmeldung funktioniert, stellen Sie eine Verbindung zu SFTP her, indem Sie den folgenden Befehl ausführen und dabei
myuser
ersetzen mit dem von Ihnen ausgewählten Benutzer, wie im folgenden Beispiel gezeigt:sftp myuser@localhost myuser@localhost's password: Connected to localhost.
-
Testen Sie die Verzeichnisliste, indem Sie den folgenden Befehl ausführen:
sftp> ls -al
Die Ausgabe sollte dem folgenden Beispiel ähneln:
drwxr-xr-x 3 0 0 4096 Sep 28 08:09 . drwxr-xr-x 3 0 0 4096 Sep 28 08:09 .. drwxr-xr-x 2 5001 33 4096 Sep 28 08:52 html -rw-r--r-- 1 0 0 0 Sep 28 08:09 test.php
Hinweis :Verwenden Sie das
cd
Befehl, um zum HTML-Verzeichnis zu wechseln (das sich unter/var/www/vhosts/mywebsite.com/html
befindet weil die Website „documentroot“ eine Ebene unter demroot
des SSH-SFTP-Benutzers liegt Verzeichnis. Sie sollten dieses Setup wegen Ihrerwww-data
verwenden Benutzer (die Benutzer des Webservers) haben rootuser:group
Berechtigungen für seine Dateien. -
Testen Sie die Fähigkeit zum Hochladen von Dateien, indem Sie die folgenden Befehle ausführen:
sftp> cd html sftp> put test.php Uploading test.php to /html/test.php test.php 100% 12K 20.0KB/s 00:00
-
Testen Sie die Möglichkeit, Dateien herunterzuladen, indem Sie den folgenden Befehl ausführen:
sftp> get test.php Fetching /test.php to test.php
-
Zeigen Sie das aktuelle Arbeitsverzeichnis an, indem Sie den folgenden Befehl ausführen:
sftp> pwd Remote working directory: /html
SFTP sieht nur die Dateien in
/var/www/vhosts/mywebsite.com/
Verzeichnis und betrachtet dieses Verzeichnis als das Root-Verzeichnis ('/') der höchsten Ebene. -
Verwenden Sie die folgenden Schritte, um eine Verbindung zu SFTP herzustellen und Ihren SFTP-Client einzurichten:
- Installieren Sie Cyberduck®.
- Öffnen Sie die Cyberduck-Anwendung.
- Klicken Sie oben im Fenster auf das Symbol für Verbindung öffnen .
- Wählen Sie im Dropdown-Menü SFTP (SSH File Transfer Protocol) aus .
- Auf dem Server Geben Sie im Feld IP-Adresse (Internet Protocol) des Servers ein.
- Geben Sie den Benutzernamen und das Passwort ein, die Sie für die Verbindung mit SFTP verwenden.
- Klicken Sie auf Verbinden .
Wichtig :Testen Sie Ihre Website immer, nachdem Sie die Dateiberechtigungen geändert haben.