¿Por qué puedo iniciar un shell de raíz con sudo incluso con un '! 'en su entrada sombra?

9
$cat /etc/passwd |grep -i root
root:x:0:0:root:/root:/bin/bash

$sudo cat /etc/shadow |grep -i root
root:!:17179:0:99999:7:::

En el segundo campo del archivo sombra, !significa que el usuario raíz no puede iniciar sesión, pero ¿por qué puedo iniciar sesión en el usuario raíz sudo su?

¿Por qué no puedo iniciar sesión en el usuario root por su rooto su -?

Sinoosh
fuente
1
"En el segundo campo del archivo shadow,! Significa que el usuario root no puede iniciar sesión" No, no lo hace. ¿De dónde has oído eso?
Carreras de ligereza en órbita
@LightnessRacesinOrbit, ¿qué significa?
George Udosen
@George: muru citó el manual en su respuesta y lo explicó en detalle. ¡Deberías leer la documentación!
ligereza corre en órbita

Respuestas:

15

Un campo de contraseña encriptada !en la shadowentrada significa que ninguna contraseña puede autenticarse contra ella. De man shadow:

If the password field contains some string that is not a valid
result of crypt(3), for instance ! or *, the user will not be able
to use a unix password to log in (but the user may log in the
system by other means).

Como dice el manual, esto no significa que no pueda iniciar sesión como root. Simplemente significa que no puede iniciar sesión como root utilizando una contraseña para la cuenta root. (Puede iniciar sesión como root a través de SSH utilizando claves SSH, por ejemplo, si lo configuró anteriormente, incluso si la cuenta está bloqueada).

sudonormalmente se autentica con su contraseña, no con la raíz. Esto se puede cambiar configurando uno de targetpw, rootpwo runaspwen sudoers. Si configura una de estas opciones e intenta usar una contraseña cuando la contraseña está bloqueada, eso fallará .

muru
fuente
Genial, significa que puedo cambiar a cualquier usuario por sudo con mi contraseña, ya sea usuario activo o usuario bloqueado, ¿verdad?
Sinoosh
1
@Sinoosh asumiendo que no hay otras restricciones, sí
muru
4

Ahora veamos los comandos en consecuencia:

  1. sudo su:

    • sudoejecuta el comando su(usuario sustituto) con privilegios de root, por lo que incluso si /etc/shadowdice o tiene root:!:17179:0:99999:7:::, seguirá ejecutando comandos con privilegios de root.
  2. su -o su root:

    • En realidad, esto cambia al usuario raíz que desde el /etc/shadowarchivo no puede iniciar sesión, por lo que usar estos comandos no funcionará. Si desea que funcionen, entonces la cuenta raíz debe desbloquearse dándole una contraseña.

Resumen:

su -0r su rootcambia a root de usuario , no existe, por lo que no puede suceder, pero sudo suejecuta el comando switch con rootprivilegios, por lo que en este caso desaparecerá si está en el sudogrupo. En este caso, no estás iniciando sesión como root, solo actúas como root para que funcione .

Fuente: ¿Cuál es la diferencia entre 'su -' y 'su root'?

George Udosen
fuente
Gracias, ¿significa sudo suque no ve los campos de paso en el archivo de sombra?
Sinoosh
1
@Sinoosh sudo sues la forma incorrecta de correr sudo sho sudo bash.
Bakuriu