Wie sperre ich einen SFTP-Benutzer?

Wie sperre ich einen SFTP-Benutzer?

Ich brauche wirklich Hilfe, ich habe versucht, einen Benutzer mit einzusperren ubuntu.

Zu beachten:

  1. jamesist der Benutzer
  2. sshusersist die Gruppe
  3. /home/james/upload/ist das Verzeichnis, in dem ich den Benutzer sperren möchte

sshd_config:

AllowGroups sshusers 

Match Group sshusers
    ChrootDirectory /home/%u/upload/
    ForceCommand internal-sftp

ICHfolgte eine Antwortauf askubuntu, hier sind meine Befehle

sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload

Problem:

Ich erhalte diesen Fehler

Error:  Network error: Software caused connection abort
Error:  Could not connect to server

Ich habe die Protokolle untersucht und Folgendes gefunden:

fatal: Falscher Besitz oder Modi für die Chroot-Verzeichniskomponente „/home/james/upload/“

Aber wenn ich die folgenden Befehle ausführe

sudo chown root /home/james/upload
sudo chmod go-w /home/james/upload

Es funktioniert perfekt, der Benutzer kann sich verbinden, der Ordner ist gesperrtABER kann keine Dateien löschenim Verzeichnis

Status: Listing directory /
Status: Directory listing successful
Status: Starting upload of C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm
Command:    put "C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm" "test"
Error:  /test: open for write: permission denied
Error:  File transfer failed

Bitte um Rat, ich habe so viel bei Google gesucht, dass alle Links jetzt lila sind (besucht :P)

Ich verwende zum Testen den Filezilla-Client SFTP.

Antwort1

Die ChrootDirectoryDirektive erwartet, dass das Chroot-Verzeichnis Eigentum von ist rootund von niemand anderem beschreibbar ist. Siekann nichtEinen Benutzer in einem Verzeichnis einsperren und ihm die Berechtigung erteilen, in dieses Verzeichnis zu schreiben. Sie können:

Chroot nach Hause, hochladen nachupload/

Der erste Satz von Befehlen, den Sie ausprobiert haben, ist hierfür richtig:

sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload

sshd_configDie Option wäre jedoch :

Match Group sshusers
    ChrootDirectory %h
    ForceCommand internal-sftp

( %hwird durch das Home-Verzeichnis des zu authentifizierenden Benutzers ersetzt, was /home/%uin den meisten Fällen entspricht.) Um außerdem die Sichtbarkeit von Ordnern in einzuschränken /home/jamesund die Schreibberechtigung dort einzuschränken, verwenden Sie die rekursiven Optionen für chownund chmodim ersten Befehl für /home/jamesund entfernen Sie readdie Berechtigungen. Der geänderte Satz würde folgendermaßen aussehen:

sudo chown root /home/james -R 
sudo chmod go-rwx /home/james -R  # Disallow traversing any directory in home 
sudo chmod go+x /home/james       # Allow traversing this directory
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwx /home/james/upload

/home/james/uploadJetzt sollte der Benutzer nur auf oder zugreifen können /upload.

Chroot zum Hochladen, Hochladen nachupload/some_directory

So ziemlich dasselbe wie oben, wobei /home/james/durch /home/james/uploadund /home/james/uploaddurch ersetzt wird /home/james/upload/some_directory. Keine besonderen Vorteile.

Ändern Sie das Home-Verzeichnis von jamesin/upload

Das übliche Verhalten von ChrootDirectory ist: "Nach dem Chroot ändert sshd(8) das Arbeitsverzeichnis in das Home-Verzeichnis des Benutzers." Also ändern wir jamesdas Home-Verzeichnis von :

usermod -d /upload  user

Setzen Sie dann ChrootDirectoryauf /home/%u. Verwenden Sie die gleichen Einschränkungen wie bei der ersten Option.

Antwort2

Der integrierte SFTP-Chroot-Mechanismus in OpenSSH erfordert, dass das Chroot-Verzeichnis root gehört (und nicht von Benutzern beschreibbar ist). Dies kann problematisch sein, wenn es sich bei dem Verzeichnis beispielsweise um eine SMB/CIFS-Freigabe handelt, bei der Sie eine Bind-Mount-Funktion ausführen müssen.

Eine der flexibleren Lösungen wäre die Verwendung von MySecureShell (http://mysecureshell.readthedocs.io/en/latest/)

apt install mysecureshell

Es funktioniert ohne Änderungen an Ihren OpenSSH-Standardeinstellungen. Sie müssen lediglich Ihre SFTP-Benutzeranmeldeshell auf mysecureshell setzen, und es kümmert sich für Sie um die ACL/virtuelle Chroot. Weitere Einzelheiten finden Sie in der Dokumentation.

Wenn Sie beispielsweise MySecureShell installiert haben, können Sie einen SFTP-Benutzer (beschränkt auf sein Home-Verzeichnis) wie folgt hinzufügen:

sudo useradd -m -d /home/sftpuser01 --shell /usr/bin/mysecureshell sftpuser01

Aus dem Obigen ergibt sich, dass der Benutzer „sftpuser01“ in der SFTP-Sitzung virtuell in „/home/sftpuser01“ chrootet wird.

Es bietet außerdem viele flexible Optionen zur Steuerung von ACL, Gruppen usw. durch die Konfiguration von „/etc/ssh/sftp-config“. Weitere Informationen finden Sie unterhttp://mysecureshell.readthedocs.io/en/latest/configuration.htmlfür Details.

verwandte Informationen