
Quiero configurar sftp en mi servidor para que pueda acceder el usuario root.
Cambié mi configuración de /etc/ssh/sshd_config
a:
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-server
ya que me salió un error diferente al intentar conectarme por sftp:
subsystem request failed on channel 0
Respuesta1
La ForceCommand
directiva solo permite que root use sftp, intente comentar esa línea.
Respuesta2
La página de manual de OpenSSHsshd_config(5)describe esto:
Fuerza la ejecución del comando especificado por
ForceCommand
, ignorando cualquier comando proporcionado por el cliente y~/.ssh/rc
si está presente. El comando se invoca utilizando el shell de inicio de sesión del usuario con la-c
opción. Esto se aplica a la ejecución de shell, comando o subsistema. Es más útil dentro de unMatch
bloque. El comando proporcionado originalmente por el cliente está disponible en laSSH_ORIGINAL_COMMAND
variable de entorno. Especificar un comando deinternal-sftp
forzará el uso de un servidor SFTP en proceso que no requiere archivos de soporte cuando se usa conChrootDirectory
. El valor predeterminado esnone
.
Como se dijo aquí, ForceCommand internal-sftp
solo permite SFTP.
Además,PermitRootLogin yes
es 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
root
o desactivarroot
el inicio de sesión por completo - utilizar
sudo
en lugar deroot
iniciar sesión directamente - utilizar autenticación de clave pública para cualquier usuario que tenga
sudo
privilegios - 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-server
no 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