Openssh - Erlaubt Root den Zugriff auf SFTP und SSH

Openssh - Erlaubt Root den Zugriff auf SFTP und SSH

Ich möchte SFTP auf meinem Server so konfigurieren, dass der Root-Benutzer darauf zugreifen kann.

Ich habe meine Konfiguration wie /etc/ssh/sshd_configfolgt 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-servererhalte ich beim Verbindungsversuch per SFTP einen anderen Fehler: subsystem request failed on channel 0

Antwort1

Die ForceCommandDirektive gestattet nur Root die Verwendung von SFTP. Versuchen Sie, diese Zeile auszukommentieren.

Antwort2

Die OpenSSH-Manpagesshd_config(5)beschreibt dies:

ForceCommand

Erzwingt die Ausführung des durch angegebenen Befehls ForceCommandund ignoriert dabei alle vom Client bereitgestellten und ~/.ssh/rcvorhandenen Befehle. Der Befehl wird mithilfe der -cOption ü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 eines MatchBlocks. Der ursprünglich vom Client bereitgestellte Befehl ist in der SSH_ORIGINAL_COMMANDUmgebungsvariable verfügbar. Die Angabe eines Befehls von internal-sftperzwingt die Verwendung eines In-Process-SFTP-Servers, der bei Verwendung mit keine Supportdateien erfordert ChrootDirectory. Der Standardwert ist none.

Wie hier gesagt, ist ForceCommand internal-sftpnur SFTP zulässig.

Außerdem,PermitRootLogin yesist 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 rootoder deaktivieren Sie rootdie Anmeldung vollständig
  • sudoanstelle der direkten rootAnmeldung verwenden
  • Verwenden Sie die Authentifizierung mit öffentlichem Schlüssel für alle Benutzer mit sudoBerechtigungen
  • 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-serveres 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

verwandte Informationen