Openssh: permite que root acceda tanto a sftp como a ssh

Openssh: permite que root acceda tanto a sftp como a ssh

Quiero configurar sftp en mi servidor para que pueda acceder el usuario root.

Cambié mi configuración de /etc/ssh/sshd_configa:

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

Funciona y puedo conectarme por sftp a mi servidor, pero ahora ya puedo conectarme por ssh. Recibí este mensaje:

This service allows sftp connections only.

Lo mismo sucede conMatch group root

¿Cómo puedo configurar sftp para permitir root pero también mantener ssh?


Actualizar:

Comentar la opción ssh interna de ForceCommand internal-sftp todavía funciona pero no puedo conectarme por sftp. sshd_config:
Subsystem   sftp    /usr/libexec/sftp-server
Match user root
ChrootDirectory /
X11Forwarding no
AllowTcpForwarding no
#ForceCommand internal-sftp

Error:

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

Del lado del servidor:

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

Nota: Si también elimino Subsystem sftp /usr/libexec/sftp-serverya que me salió un error diferente al intentar conectarme por sftp: subsystem request failed on channel 0

Respuesta1

La ForceCommanddirectiva solo permite que root use sftp, intente comentar esa línea.

Respuesta2

La página de manual de OpenSSHsshd_config(5)describe esto:

ForceCommand

Fuerza la ejecución del comando especificado por ForceCommand, ignorando cualquier comando proporcionado por el cliente y ~/.ssh/rcsi está presente. El comando se invoca utilizando el shell de inicio de sesión del usuario con la -copción. Esto se aplica a la ejecución de shell, comando o subsistema. Es más útil dentro de un Matchbloque. El comando proporcionado originalmente por el cliente está disponible en la SSH_ORIGINAL_COMMANDvariable de entorno. Especificar un comando de internal-sftpforzará el uso de un servidor SFTP en proceso que no requiere archivos de soporte cuando se usa con ChrootDirectory. El valor predeterminado es none.

Como se dijo aquí, ForceCommand internal-sftpsolo permite SFTP.

Además,PermitRootLogin yeses peligroso ya que permite la autenticación de contraseña para root, yChrootDirectory /no es realmente un limitantecárcel chrooten absoluto. Se recomienda

  • utilizar la autenticación de clave pública rooto desactivar rootel inicio de sesión por completo
  • utilizar sudoen lugar de rootiniciar sesión directamente
  • utilizar autenticación de clave pública para cualquier usuario que tenga sudoprivilegios
  • use la contraseña para sudo(junto con la anterior, es efectivamente un MFA para los privilegios escalados).

Sigo recordándolos ya que Server Fault es para preguntas relacionadas con entornos empresariales y su configuración actual no demuestra prácticas razonables en este contexto.

Respuesta3

Puede intentar ejecutar este manual de estrategias ansible que verifica su configuración de ssh y crea una configuración de ssh segura. https://github.com/dev-sec/ansible-collection-hardening/tree/master/roles/ssh_hardening

Después de ejecutar esto, solo necesita permitir el inicio de sesión de root en sshd_config y luego tanto ssh como sftp deberían funcionar.

Respuesta4

Bueno, el problema aquí fue que /usr/libexec/sftp-serverno existe en el lado del servidor. Lo agregué en la imagen con una nueva compilación de Yocto y luego pude conectarme por ssh y sftp con root usando la configuración predeterminada:

# 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

información relacionada