Wie erstelle ich einen SFTP-Benutzer auf meiner Lightsail-Instance?

Letzte Aktualisierung: 14.10.2021

Ich möchte einen SFTP-Benutzer auf meiner Amazon-Lightsail-Instance erstellen. Wie kann ich vorgehen?

Auflösung

Hinweis: Mit den folgenden Schritten wird ein SFTP-Benutzer erstellt, der Zugriff auf die Chroot-Umgebung (Chroot-Gefängnis) ohne SSH-Zugriff hat. Der SFTP-Benutzer kann nicht auf die Verzeichnisse außerhalb der Chroot-Umgebung oder des Chroot-Verzeichnisses zugreifen. Das Chroot-Verzeichnis wird also zum Stammverzeichnis für den Benutzer.

1.    Erstellen Sie eine Gruppe für die SFTP-Benutzer. Die Gruppe hilft bei der Verwaltung vieler verschiedener SFTP-Benutzer. In diesem Beispiel lautet der Gruppenname sftp_group. Sie können den Namen in einen Gruppennamen Ihrer Wahl ändern.

sudo groupadd sftp_group

2.    Erstellen Sie einen Benutzer auf der Instance mit einem Home-Verzeichnis. Dieser Benutzer führt nur SFTP-Aufgaben aus und hat keine SSH-Login-Shell. Ersetzen Sie im folgenden Beispiel sftp_user durch einen Benutzernamen Ihrer Wahl.

sudo useradd -g sftp_group -m -d  /home/sftp_user -s /sbin/nologin sftp_user

3.    Der Benutzer kann sich auf verschiedene Arten authentifizieren, wenn er über SFTP eine Verbindung zum Server herstellt. Das folgende Beispiel verwendet ein Passwort und eine schlüsselbasierte SSH-Authentifizierung.

Passwortauthentifizierung

Um eine Passwortauthentifizierung anzufordern, erstellen Sie ein Passwort mit dem folgenden Befehl:

sudo passwd sftp_user

Schlüsselbasierte SSH-Authentifizierung

Wenn Sie die schlüsselbasierte SSH-Authentifizierung verwenden, müssen Sie die SSH-Dateien für den Benutzer erstellen und dann den öffentlichen Schlüssel zu den Dateien hinzufügen. Um das zu tun:

Erstellen Sie im Home-Verzeichnis des Benutzers einen .ssh-Ordner und eine authorized_keys-Datei:

sudo mkdir /home/sftp_user/.ssh
sudo touch /home/sftp_user/.ssh/authorized_keys

Fügen Sie den öffentlichen SSH-Schlüssel, den Sie verwenden möchten, zur Datei /home/sftp_user/.ssh/authorized_keys hinzu. Weitere Informationen finden Sie unter Einrichten von SSH für Ihre Linux/Unix-basierten Lightsail-Instances.

Führen Sie die folgenden Befehle aus, um den Besitz und die Berechtigungen des Home-Verzeichnisses des Benutzers zu ändern:

sudo chown sftp_user:sftp_group /home/sftp_user/.ssh -R
sudo chown root:sftp_group /home/sftp_user/
sudo chmod 755 /home/sftp_user/ 
sudo chmod 700 /home/sftp_user/.ssh/
sudo chmod 600 /home/sftp_user/.ssh/authorized_keys

Das vorangegangene Beispiel verwendet die Berechtigung 755 für das Verzeichnis /home/sftp_user und wechselt den Besitzer auf den Stammbenutzer. Dies liegt daran, dass das Verzeichnis als Chroot-Verzeichnis verwendet wird. Beachten Sie, dass alle Komponenten des Pfadnamens stammeigene Verzeichnisse sein müssen, die von keinem anderen Benutzer oder einer anderen Gruppe beschreibbar sind.

4.    Bearbeiten Sie die Datei /etc/ssh/sshd_config wie folgt:

Ändern Sie die sftp-Zeile des Subsystems, indem Sie die Zeile Subsystem sftp /usr/libexec/openssh/sftp-Server auskommentieren:

# Subsystem sftp /usr/libexec/openssh/sftp-server

Ersetzen Sie die vorhergehende Zeile durch:

Subsystem sftp internal-sftp

Fügen Sie Anweisungen hinzu, um den Zugriff des SFTP-Benutzers zu beschränken. Diese Anweisungen müssen am Ende der Datei hinzugefügt werden:

Match Group sftp_group
ChrootDirectory /home/%u
ForceCommand internal-sftp

Im vorangegangenen Beispiel wird die ChrootDirectory-Anweisung verwendet, um das Stammverzeichnis für die SFTP-Benutzer anzugeben (Chroot-Gefängnis). Passen Sie den Block an, den der zur sftp_group gehörende Benutzer den Pfad /home/ %u als Stammverzeichnis verwendet. Die Zeichen %u stehen für den Benutzer. Sie können das Stammverzeichnis für Ihren Benutzer ändern.

Die Anweisung ForceCommand internal-sftp erzwingt die Verwendung eines prozessinternen SFTP-Servers.

Wenn Sie die Passwortauthentifizierung verwenden, suchen Sie die Anweisung PasswordAuthentication in der Datei /etc/ssh/sshd_config und stellen Sie sicher, dass sie auf ja gesetzt ist.

5.    Erstellen Sie die Chroot-Verzeichnisse, die vom Benutzer verwendet werden sollen. Ersetzen Sie den Verzeichnisnamen sftp_user und laden Sie ihn durch Ihre bevorzugten Namen hoch.

sudo mkdir /home/sftp_user/uploads

Ändern Sie den Besitz der Dateien:

sudo chown sftp_user:sftp_group /home/sftp_user/uploads

6.    Stellen Sie sicher, dass die Verzeichnisberechtigungen wie im folgenden Beispiel gezeigt sind:

ls -ld /home
drwxr-xr-x 3 root root 23 Oct  6 15:17 /home

ls -ld /home/sftp_user
drwxr-xr-x 3 root sftp_group 21 Oct  6 15:17 /home/sftp_user

ls -ld /home/sftp_user/uploads/
drwxr-xr-x 2 sftp_user sftp_group 6 Oct  6 15:17 /home/sftp_user/uploads/

7.    Starten Sie den sshd-Service neu:

sudo systemctl restart sshd

8.    Stellen Sie über sftp eine Verbindung zur Instance her:

Passwortauthentifizierung

# sftp sftp_user@example.com
sftp_user@example.com's password:

Schlüsselbasierte SSH-Authentifizierung

# sftp -i key.pem sftp_user@example.com

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?