¿PermitRootLogin se basa en UID o nombre de usuario?


17

La página del manual dice que PermitRootLogin

Especifica si root puede iniciar sesión usando ssh(1).

Sin embargo, no está claro si esta verificación se basa en el nombre de usuario ( "root") o el UID ( 0).

¿Qué sucede si se cambia el nombre de la cuenta raíz "admin"? ¿ "admin"Podrá iniciar sesión cuando PermitRootLogin=no?

¿Qué sucede si hay dos cuentas con UID = 0, es decir, "root"y "admin"? ¿Alguno de ellos podrá iniciar sesión?

Respuestas:


16

Parece que la verificación se realiza en UID (probado en OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016):

Desactive PermitRootLogin:

mtak@pdv1:~$ grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin no

Asegúrese de que un usuario llamado adminse cree con UID 0:

mtak@pdv1:~$ sudo grep admin /etc/passwd
admin:x:0:0:Root User:/root:/bin/bash

Asegúrese de que el usuario pueda ser utilizado para iniciar sesión en el sistema:

mtak@pdv1:~$ su - admin
Password: 
root@pdv1:~# 

Compruebe si podemos iniciar sesión en el sistema utilizando SSH:

mtak@rubiks:~$ ssh admin@pdv1
admin@pdv1's password: 
Permission denied, please try again.

Si activamos PermitRootLogin:

mtak@pdv1:~$ grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin yes

E intente iniciar sesión:

mtak@rubiks:~$ ssh admin@pdv1
admin@pdv1's password: 
Linux pdv1 4.4.8-1-pve #1 SMP Tue May 17 16:14:08 CEST 2016 x86_64
Last login: Wed Aug 24 12:05:28 2016 from xxx
root@pdv1:~# 

Es interesante que aunque UID 0 tenga el nombre de usuario admin, todavía aparece como root@pdv1en el shell
Dezza

1
@Dezza Posiblemente depende de las líneas de orden que se enumeran en / etc / passwd (como en: encuentre la primera entrada con UID = 0).
TripeHound

19

Aprecio el enfoque de @mtak en la otra respuesta, pero la respuesta es obvia incluso sin estas pruebas.

Se basa en UID, como puede ver en el código fuente de openssh:

if (authctxt->pw->pw_uid == 0 &&
            !auth_root_allowed(auth_method))
authenticated = 0;

Además, cada método de autenticación muestra algo como

if (pw->pw_uid == 0 && options.permit_root_login != PERMIT_YES)
    ok = 0;

grepSi observa más adelante en el código, puede notar que no hay ninguna strcmp('root', pw->pw_name)alternativa, si será suficiente para usted.


¿Cómo sabes las sshd comprobaciones para UID 0? No está utilizando ningún argumento para respaldar su declaración.
mtak

2
Unix define un superusuario por su UID = 0. Como otro ejemplo puede ser un código fuente de openssh.
Jakuje

El núcleo sí, pero estabas asumiendo que OpenSSH también lo hizo. Por ejemplo, la autenticación básica de Apache no permite el inicio de sesión raíz también, ¿verdad? Gracias por el enlace, he modificado su respuesta para incluir eso.
mtak

1
Si lo hiciera de otra manera, sería un riesgo potencial para la seguridad.
Jakuje

3
@Bakuriu y por qué crearía el pwcontexto a partir de otra cosa. El opensshcódigo es de código abierto y los lectores interesados ​​pueden revisar todo el código. Construcciones similares están en todo el código para cada método de autenticación. Si greplee el código, nunca lo encontrará strcmp('root', pw->pw_name), si lo hará más confiable para usted.
Jakuje
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.