Cómo configurar Linux para obligar a los nuevos usuarios a cambiar su contraseña en el primer inicio de sesión

11

Estoy tratando de configurar la política de contraseña de los usuarios en RHEL 6.6 y quiero que el sistema solicite a los usuarios recién creados que cambien la contraseña inicial en el primer inicio de sesión.

Tenga en cuenta que intenté establecer la variable EXPIRE en 0 e INACTIVO en -1 en / etc / default / useradd, pero esto conduce a la caducidad de la nueva cuenta de usuario después de la creación. La salida del comando chage después de la creación del usuario con estas variables es:

 # chage -l foo
 Last password change                                : Feb 22, 2015
 Password expires                                    : May 23, 2015
 Password inactive                                   : never
 Account expires                                     : Feb 22, 2015
 Minimum number of days between password change      : 1
 Maximum number of days between password change      : 90
 Number of days of warning before password expires   : 7

Cuando intento iniciar sesión con el usuario foo, aparece el mensaje "Su cuenta ha caducado. Póngase en contacto con el administrador del sistema".

Pero si abro la ventana 'Propiedades de usuario', selecciono la pestaña 'Información de contraseña' y verifico 'Forzar cambio de contraseña en el próximo inicio de sesión', el resultado será lo que espero. Se le pedirá al nuevo usuario que cambie la contraseña. La salida del comando chage en este caso será:

 # chage -l foo2
 Last password change                                : password must be changed
 Password expires                                    : password must be changed
 Password inactive                                   : password must be changed
 Account expires                                     : never
 Minimum number of days between password change      : 1
 Maximum number of days between password change      : 90
 Number of days of warning before password expires   : 7

Cuando inicio sesión con el usuario foo2, el sistema me pide que cambie la contraseña.

Entonces, ¿hay alguna forma de configurar el sistema para establecer parámetros de cuenta de usuario en la creación como en el segundo caso?

Upd

 cat /etc/default/useradd
 # useradd defaults file
 GROUP=100
 HOME=/home
 INACTIVE=-1
 EXPIRE=0
 SHELL=/bin/bash
 SKEL=/etc/skel
 CREATE_MAIL_SPOOL=yes

Incluso si comento INACTIVO o lo configuro en valor positivo, la cuenta ha caducado, pero no es una contraseña.

Además, configuré PAM en la máquina.

Upd 2

Verifiqué esto en la máquina con RHEL 6.2 y sin configuración PAM. El efecto es el mismo.

Mike_Lychkov
fuente
Deberías intentar usarlo chage -d 0 {user-name}.
Hastur
¿Hay alguna manera de hacerlo automáticamente durante el comando useradd, no con comandos o acciones adicionales?
Mike_Lychkov
1
EXPIRE=0en /etc/default/useradddebe hacer el trabajo. Leí que lo intentaste. ¿Puedes agregar las líneas no comentadas de /etc/default/useradd? ¿Está bloqueado incluso si no especifica INACTIVO = -1, sino un valor diferente, o si comenta esa línea? ¿Puede especificar si las cuentas están bloqueadas incluso cuando se crean por línea de comando? Y, por favor, cuando tenga una pregunta diferente, publíquela en una página separada si tendrá una respuesta diferente.
Hastur
1
Usar le adduserpermite poner el chagecomando /usr/local/sbin/adduser.local. También puede establecer el campo de edad en / etc / shadow a 0 directamente. useraddes la "utilidad de bajo nivel" destinada a ser utilizada junto con otros comandos.
mpez0

Respuestas:

1

Como está preguntando acerca de RHEL6, miré el código fuente de useradd (que se entrega como parte del paquete 'shadow'). En useradd.c es una función llamada new_spent donde configura una nueva entrada de contraseña oculta. Allí aborda el problema de "contraseña caducada en la creación" de esta manera:

if (0 == spent->sp_lstchg) {
/* Better disable aging than requiring a password change */
spent->sp_lstchg = -1;

Soooo ... Si establece un cero, lo convierte en un -1.

Los autores del programa se han codificado específicamente para establecer el envejecimiento en 0, por lo que no importará si lo configura en 0 en el parámetro / etc / default / useradd para EXPIRE. (Si fuera yo quien hiciera ese código, habría buscado ver si el usuario estaba configurando la contraseña en el comando y luego permitía la caducidad, pero no era yo ...)

Además, se sugirió anteriormente que podría colocar un script en /usr/local/sbin/adduser.local para hacer un comando 'chage'. Este fue un buen consejo para un sistema Debian / Ubuntu donde useradd es un script perl que de hecho ejecuta ese archivo si lo encuentra, pero en RHEL el comando useradd es un binario en C.

Si yo fuera usted y estuviera decidido a obtener ese comportamiento en el RHEL6 useradd, obtendría el SRPM para el paquete shadow, comentaría las líneas anteriores y haría un rpmbuild en el paquete y rockaway. ¡Victorioso!

P. Heffner
fuente
1

¿Por qué no agregar esto a un script?

passwd -e username

Si todo lo que buscas es el primer inicio de sesión, esto funcionará. ¿La -econtraseña de la cuenta caduca inmediatamente, por lo que el próximo inicio de sesión el usuario se ve obligado a actualizar su contraseña? (ver man passwd)

tniles
fuente
Y si está buscando una solución específica para el cambio, tal vez intente el interruptor "-M / - maxdays" con un valor de '0'. No estoy realmente familiarizado con chage, pero desde la página del manual esto parece razonable.
Tniles
-1

Automático:

Actualiza este archivo:

/etc/default/useradd

Este archivo contiene los detalles, lo que todas las configuraciones se aplicarán a los nuevos usuarios creados en el sistema con el comando useradd.

Simplemente configure el valor de EXPIRE = 0 en este archivo, y después de eso, cada vez que se cree un nuevo usuario, se verá obligado a cambiar la contraseña en el próximo inicio de sesión.

Fuente: GeekRide

Ahora, editar ese archivo en la terminal fue difícil. Así que cambié los permisos del archivo a 777 usando:

chmod 777 /etc/default/useradd

y lo editó en grub.

(Gracias al comando Linux) .

Comprobado en mi Ubuntu 12.04.5 VM.

Manual:

Use la siguiente sintaxis para obligar a un usuario a cambiar su contraseña en el próximo inicio de sesión en Linux:

# chage -d 0 {user-name}

En este ejemplo, obligue a tom a cambiar su contraseña en el siguiente inicio de sesión, ingrese:

# chage -d 0 tom

-d 0: establezca el número de días desde el 1 de enero de 1970 cuando se modificó la contraseña por última vez. La fecha también puede expresarse en el formato AAAA-MM-DD. Al establecerlo en cero, obligará al usuario a cambiar la contraseña en el primer inicio de sesión.

Fuente: nixCraft

Puro copiar y pegar. Literalmente. ;)
Comprobado en mi Ubuntu 12.04.5 VM.

Varad Mahashabde
fuente
El OP quiere que esto se realice automáticamente durante el comando useradd, si lee los comentarios anteriores.
Loco
No comentaré nada más, ¡pero chmod -R 777 /es algo muy estúpido!
PulseJet
@PulseJet sí, lo sé en retrospectiva y esta respuesta fue hace mucho tiempo, así que por favor
déjenlo
@VaradMahashabde, entonces sugeriría eliminar tales cosas de sus respuestas, ya que al menos deberían ser sensatas para la próxima persona que las lea.
PulseJet