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/test1
In dieses Verzeichnis kann er nicht schreiben. Er muss es dann eingeben /var/base/test1/test1
und kann dann schreiben.
Es ist jedoch etwas nervig und idealerweise möchte ich, dass der Benutzer in das /var/base/test1/test1
Verzeichnis 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 /test1
als Workaround erreicht werden.
Lange Antwort
openssh
erfordert, dass der ChrootDirectory
und 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 ChrootDirectory
oder eines seiner übergeordneten Verzeichnisse nicht root-Eigentümer ist oder von der Gruppe oder der ganzen Welt beschreibbar ist, sshd
verweigert 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 chroot
Anwendung von das Verzeichnis auf geändert wird /var/base/test1/test1
. Auf diese Weise muss der Benutzer nicht auf wechseln, test1
sondern startet seine sftp
Sitzung bereits in diesem Verzeichnis.
$ sftp -P 2222 test1@localhost
test1@localhost's password:
Connected to localhost.
sftp> pwd
Remote working directory: /test1