SFTP-Benutzerstammverzeichnis

SFTP-Benutzerstammverzeichnis

Ich habe das folgende Skript zusammengestellt, das einwandfrei funktioniert. Es erstellt einen SFTP-Benutzer und wenn sich der Benutzer anmeldet, befindet er sich in . /var/base/test1In dieses Verzeichnis kann er nicht schreiben. Er muss es dann eingeben /var/base/test1/test1und kann dann schreiben.

Es ist jedoch etwas nervig und idealerweise möchte ich, dass der Benutzer in das /var/base/test1/test1Verzeichnis gelangt, wenn er sich über FTP anmeldet. Gibt es eine Möglichkeit, dies zu ermöglichen? Wenn ich das ChrootDirectory (in sshd_config) in ändere /var/base/test1/test1, kann sich der FTP-Benutzer nicht mehr anmelden.

mkdir -p /var/base/test1/test1
chown root:root /var/base/test1
chown root:root /var/base
chmod 755 /var/base/test1
adduser --disabled-password --gecos test1
echo “test1:apassword” | chpasswd
chown test1:test1 /var/base/test1/test1
vim /etc/ssh/sshd_config
systemctl restart sshd

sshd_config:

Match User test1
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/base/test1
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

Antwort1

Kurze Antwort

Dies ist nicht möglich, kann aber durch die Einrichtung von home /test1als Workaround erreicht werden.

Lange Antwort

openssherfordert, dass der ChrootDirectoryund alle Pfadkomponenten, die dorthin führen, root-Eigentümer sind und von niemand anderem geschrieben werden können. Dies ist eine Sicherheitsmaßnahme, um sicherzustellen, dassChrootDirectory nicht böswillig manipuliert und z. B. durch einen symbolischen Link zu einem völlig anderen Ort ersetzt werden kann. Wenn das ChrootDirectoryoder eines seiner übergeordneten Verzeichnisse nicht root-Eigentümer ist oder von der Gruppe oder der ganzen Welt beschreibbar ist, sshdverweigert das die Anmeldung. In diesem Fall sehen Sie in etwa Folgendes /var/log/auth.log:

Jun 10 07:54:01 ubuntu-bionic sshd[2251]: fatal: bad ownership or modes for chroot directory "/var/base/test1"
Jun 10 07:54:01 ubuntu-bionic sshd[2173]: pam_unix(sshd:session): session closed for user test1

Die Fehlermeldung sollte Sie in die richtige Richtung weisen.

Dies steht auch explizit auf dersshd_config - Manpage:

ChrootVerzeichnis
Gibt den Pfadnamen eines Verzeichnisses an, in das nach der Authentifizierung per chroot(2) gewechselt werden soll. Beim Starten der Sitzung prüft sshd(8), ob alle Komponenten des Pfadnamens root-eigene Verzeichnisse sind, die von keinem anderen Benutzer oder keiner anderen Gruppe beschreibbar sind. Nach dem Chroot ändert sshd(8) das Arbeitsverzeichnis in das Home-Verzeichnis des Benutzers.[...]

Aus Sicherheitsgründen ist es sehr wichtig, dass die Verzeichnishierarchie vor Änderungen durch andere Prozesse im System (insbesondere außerhalb des Jails) geschützt wird. Eine Fehlkonfiguration kann zu unsicheren Umgebungen führen, die sshd(8) nicht erkennen kann.

Problemumgehung

Sie können jedoch das Home-Verzeichnis des Benutzers auf /test1( sudo usermod test1 -d /test1) setzen, so dass nach der chrootAnwendung von das Verzeichnis auf geändert wird /var/base/test1/test1. Auf diese Weise muss der Benutzer nicht auf wechseln, test1sondern startet seine sftpSitzung bereits in diesem Verzeichnis.

$ sftp -P 2222 test1@localhost
test1@localhost's password: 
Connected to localhost.
sftp> pwd
Remote working directory: /test1

verwandte Informationen