
Ich möchte SFTP auf meinem Server so konfigurieren, dass der Root-Benutzer darauf zugreifen kann.
Ich habe meine Konfiguration wie /etc/ssh/sshd_config
folgt geändert:
PermitRootLogin yes
AuthorizedKeysFile .ssh/authorized_keys
PermitEmptyPasswords yes
ChallengeResponseAuthentication no
Compression no
ClientAliveInterval 15
ClientAliveCountMax 4
#Other options are commented
[...]
Subsystem sftp /usr/libexec/sftp-server
Match user root
ChrootDirectory /
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Es funktioniert und ich kann mich per SFTP mit meinem Server verbinden, aber jetzt kann ich mich nicht mehr per SSH verbinden. Ich habe diese Nachricht erhalten:
This service allows sftp connections only.
Das gleiche passiert mitMatch group root
Wie kann ich SFTP so konfigurieren, dass Root-Zugriff zugelassen wird, SSH aber weiterhin verfügbar bleibt?
Aktualisieren:
Kommentar: ForceCommand-Option „internal-sftp“: SSH funktioniert immer noch, aber ich kann keine Verbindung per SFTP herstellen. sshd_config:Subsystem sftp /usr/libexec/sftp-server
Match user root
ChrootDirectory /
X11Forwarding no
AllowTcpForwarding no
#ForceCommand internal-sftp
Fehler:
user@notebook:~$ sftp root@my_device
Warning: the ECDSA host key for 'my_device' differs from the key for the IP address 'xx.xx.xx.xx'
Offending key for IP in /home/myUser/.ssh/known_hosts:78
Matching host key in /home/myUer/.ssh/known_hosts:93
Are you sure you want to continue connecting (yes/no)? yes
Connection closed.
Connection closed
Auf der Serverseite:
root@my_device:~# cat /var/log/auth.log | grep ssh
2024-01-17T19:25:21.659884+00:00 my_device sshd[30592]: Accepted none for root from xx.xx.xx.xx port 38024 ssh2
2024-01-17T19:25:21.881328+00:00 my_device sshd[30592]: Received disconnect from xx.xx.xx.xx port 38024:11: disconnected by user
2024-01-17T19:25:21.881997+00:00 my_device sshd[30592]: Disconnected from user root xx.xx.xx.xx port 38024
Hinweis: Wenn ich es auch entferne, Subsystem sftp /usr/libexec/sftp-server
erhalte ich beim Verbindungsversuch per SFTP einen anderen Fehler:
subsystem request failed on channel 0
Antwort1
Die ForceCommand
Direktive gestattet nur Root die Verwendung von SFTP. Versuchen Sie, diese Zeile auszukommentieren.
Antwort2
Die OpenSSH-Manpagesshd_config(5)beschreibt dies:
Erzwingt die Ausführung des durch angegebenen Befehls
ForceCommand
und ignoriert dabei alle vom Client bereitgestellten und~/.ssh/rc
vorhandenen Befehle. Der Befehl wird mithilfe der-c
Option über die Anmelde-Shell des Benutzers aufgerufen. Dies gilt für die Ausführung von Shells, Befehlen oder Subsystemen. Es ist besonders nützlich innerhalb einesMatch
Blocks. Der ursprünglich vom Client bereitgestellte Befehl ist in derSSH_ORIGINAL_COMMAND
Umgebungsvariable verfügbar. Die Angabe eines Befehls voninternal-sftp
erzwingt die Verwendung eines In-Process-SFTP-Servers, der bei Verwendung mit keine Supportdateien erfordertChrootDirectory
. Der Standardwert istnone
.
Wie hier gesagt, ist ForceCommand internal-sftp
nur SFTP zulässig.
Außerdem,PermitRootLogin yes
ist gefährlich, da es die Passwortauthentifizierung für Root ermöglicht undChrootDirectory /
ist nicht wirklich eine EinschränkungChroot-Gefängnisüberhaupt. Es wird empfohlen,
- Verwenden Sie die Authentifizierung mit öffentlichem Schlüssel
root
oder deaktivieren Sieroot
die Anmeldung vollständig sudo
anstelle der direktenroot
Anmeldung verwenden- Verwenden Sie die Authentifizierung mit öffentlichem Schlüssel für alle Benutzer mit
sudo
Berechtigungen - Kennwort verwenden für
sudo
(zusammen mit dem vorherigen ist es effektiv ein MFA für die erhöhten Berechtigungen).
Ich erinnere immer wieder daran, da Server Fault für Fragen im Zusammenhang mit Geschäftsumgebungen zuständig ist und Ihre aktuelle Konfiguration in diesem Zusammenhang keine angemessenen Vorgehensweisen aufweist.
Antwort3
Sie können versuchen, dieses Ansible-Playbook auszuführen, das Ihre SSH-Konfiguration überprüft und eine sichere SSH-Konfiguration erstellt. https://github.com/dev-sec/ansible-collection-hardening/tree/master/roles/ssh_hardening
Nach dem Ausführen dieses Befehls müssen Sie nur noch rootlogin in der sshd_config zulassen und dann sollten sowohl ssh als auch sftp funktionieren
Antwort4
Das Problem hier war, dass /usr/libexec/sftp-server
es auf der Serverseite nicht existiert. Ich habe es mit einem neuen Yocto-Build in das Image eingefügt und konnte dann mit der Standardkonfiguration per SSH und SFTP eine Verbindung mit Root herstellen:
# override default of no subsystems
Subsystem sftp /usr/libexec/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server