Ich brauche wirklich Hilfe, ich habe versucht, einen Benutzer mit einzusperren ubuntu
.
Zu beachten:
james
ist der Benutzersshusers
ist die Gruppe/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 ChrootDirectory
Direktive erwartet, dass das Chroot-Verzeichnis Eigentum von ist root
und 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_config
Die Option wäre jedoch :
Match Group sshusers
ChrootDirectory %h
ForceCommand internal-sftp
( %h
wird durch das Home-Verzeichnis des zu authentifizierenden Benutzers ersetzt, was /home/%u
in den meisten Fällen entspricht.) Um außerdem die Sichtbarkeit von Ordnern in einzuschränken /home/james
und die Schreibberechtigung dort einzuschränken, verwenden Sie die rekursiven Optionen für chown
und chmod
im ersten Befehl für /home/james
und entfernen Sie read
die 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/upload
Jetzt 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/upload
und /home/james/upload
durch ersetzt wird /home/james/upload/some_directory
. Keine besonderen Vorteile.
Ändern Sie das Home-Verzeichnis von james
in/upload
Das übliche Verhalten von ChrootDirectory ist: "Nach dem Chroot ändert sshd(8) das Arbeitsverzeichnis in das Home-Verzeichnis des Benutzers." Also ändern wir james
das Home-Verzeichnis von :
usermod -d /upload user
Setzen Sie dann ChrootDirectory
auf /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.