Crea una nueva cuenta llamada test
:
$ sudo useradd test
test
no tiene una contraseña en este momento. Entonces
$ su test
no funciona Si lo intenta, se le pedirá test
la contraseña de No tiene uno. Eso no es lo mismo que su contraseña esté vacía, por lo que si ingresa una contraseña vacía presionando Intro, obtendrá el mensaje "su:Fallo de autenticación".
Lo mismo es cierto si cambia a un tty e intenta iniciar sesión como test
:No se acepta una contraseña vacía.
Ahora asigne test
una contraseña vacía:
$ sudo passwd -d test
Ahora puede iniciar sesión como test
en un tty proporcionando la cadena vacía como contraseña. Sin embargo, si intenta
$ su test
nuevamente, aún recibe el mensaje "su:Error de autenticación", la sesión no cambia al usuario test
.
¿Por qué es esto?
Respuesta aceptada:
Desde la salida de ldd /bin/su
, el su
el binario se compila con pam
bibliotecas (libpam*
), por lo que pam
gestionará la autenticación, la gestión de cuentas, el inicio de sesión, etc. .
A continuación se muestra cómo su
de un sistema Ubuntu típico es administrado por pam
, debería encontrar un enfoque similar si está utilizando otra distribución.
El pam
reglas para su
se definen en el archivo /etc/pam.d/su
. Este archivo también incluye el common-auth
, common-passwd
, common-session
archivos del mismo directorio que las plantillas comunes para cubrir las tareas que su nombre sugiere (y se usan en otros pam
servicios habilitados).
En mi sistema, en la parte inferior de /etc/pam.d/su
tengo:
@include common-auth
@include common-account
@include common-session
Las líneas anteriores no se ocupan de la verificación de contraseña nula, es principalmente el trabajo de pam_unix
módulo.
Ahora /etc/pam.d/common-auth
tiene:
auth [success=1 default=ignore] pam_unix.so nullok_secure
De man pam_unix
:
nulok
La acción predeterminada de este módulo es no permitir que el usuario acceda a un servicio si su contraseña oficial está en blanco. El argumento nullok anula este valor predeterminado y permite que cualquier usuario con una
contraseña en blanco acceda al servicio.
nullok_secure
La acción predeterminada de este módulo es no permitir que el usuario acceda a un servicio si su contraseña oficial está en blanco. El argumento nullok_secure anula este valor predeterminado y permite que cualquier usuario
con una contraseña en blanco acceda al servicio siempre que el valor de PAM_TTY se establezca en uno de los valores que se encuentran en /etc/securetty.
como puede ver si el nullok_secure
está establecida, a menos que la variable de entorno PAM_TTY
se configura de la manera mencionada, el usuario con contraseña nula no podrá iniciar sesión usando su
.
Entonces, para permitir que cualquier usuario con contraseña nula haga su
, necesitas tener el nullok
argumento del pam_unix
módulo:
auth [success=1 default=ignore] pam_unix.so nullok
esto es inseguro como common-auth
el archivo es utilizado por muchos otros servicios, incluso solo para su
esto no debe hacerse. (Por el bien de la prueba, puede configurarlo una vez y luego volver al original. Aunque si quiere hacer la prueba, es mejor incorporar todas las lógicas en /etc/pam.d/su
y modifique cualquier cambio después en lugar de jugar con cualquier common-*
archivo)