Pregunta:
CentOS 6 Linux tiene dos formas de bloquear una contraseña:
-
passwd -l
-
usermod -L
Hoy descubrí que hacen algo diferente.
passwd
escribe dos signos de exclamación en el archivo de sombra.
# passwd -d test1 Removing password for user test1. passwd: Success # passwd -l test1 Locking password for user test1. passwd: Success # passwd -S test1 test1 LK 2014-01-14 0 99999 7 -1 (Password locked.) # grep test1 /etc/shadow test1:!!:16084:0:99999:7:::
Pero usermod
escribe solo uno.
# passwd -d test1 Removing password for user test1. passwd: Success # usermod -L test1 # passwd -S test1 test1 LK 2014-01-14 0 99999 7 -1 (Password locked.) # grep test1 /etc/shadow test1:!:16084:0:99999:7:::
¿Es esto solo una inconsistencia cosmética o hay un significado para los diferentes indicadores de bloqueo?
Suceden cosas divertidas si mezclas los dos comandos:
Bloquear una cuenta con passwd
:
# passwd -l test1
Locking password for user test1.
passwd: Success
Desbloquéalo con usermod
:
# usermod -U test1
Y sorpresa, todavía está bloqueado:
# passwd -S test1
test1 LK 2014-01-14 0 99999 7 -1 (Password locked.)
¿Error o característica?
Respuesta:
No importa. El comportamiento que está viendo es específico de la implementación . Es por eso que usermod
hace una cosa y passwd
hace otra. Son implementaciones diferentes. Vea lo que sucede en Solaris, AIX, HP-UX, True64, Xenix …
El campo de contraseña es una cadena cifrada o con hash. Cuando el usuario proporciona una contraseña, se cifra o se aplica un hash de acuerdo con el algoritmo especificado en el campo de contraseña. La autenticación solo tiene éxito si coinciden los formularios cifrados / hash proporcionados y almacenados.
¡Un solo !
o un doble !!
nunca puede coincidir con ninguna contraseña cifrada. En otras palabras, no hay ninguna entrada que se cifre en el valor del resultado !
o !!
. Cualquier cadena que nunca podría ser el resultado hash "bloqueará" la cuenta. Bien puede ser foo
o el Mr. Spock
.
También tenga en cuenta este comentario bajo el indicador --lock
en passwd(1)
en Linux:
Tenga en cuenta que esto no deshabilita la cuenta. Es posible que el usuario aún pueda iniciar sesión con otro token de autenticación (por ejemplo, una clave SSH). Para deshabilitar la cuenta, los administradores deben usar
usermod --expiredate 1
(esto establece la fecha de vencimiento de la cuenta al 2 de enero de 1970).