¿Cómo deshabilito completamente una cuenta?

48

¿Cómo deshabilito completamente una cuenta? passwd -lno permitirá que nadie inicie sesión en una cuenta con una contraseña, pero aún puede iniciar sesión a través de claves privadas / públicas. ¿Cómo deshabilitaría la cuenta por completo? Como una solución rápida cambié el nombre del archivo a authorized_keys_lockme. ¿Hay otra manera?

Braiam
fuente
3
¿Estás planeando volver a habilitarlo eventualmente? ¿Bloqueos del sistema? Si no, simplemente eliminaría la cuenta.
Ken

Respuestas:

59

La forma correcta según usermod(8)es:

usermod --lock --expiredate 1970-01-02 <username>

(En realidad, el argumento --expiredatepuede ser cualquier fecha anterior a la fecha actual en el formato YYYY-MM-DD).


Explicación:

  • --lockbloquea la contraseña del usuario. Sin embargo, todavía es posible iniciar sesión por otros métodos (por ejemplo, clave pública).

  • --expiredate YYYY-MM-DDdeshabilita la cuenta en la fecha especificada. Según man shadow 51970-01-01 es un valor ambiguo y no se utilizará.

He probado esto en mi máquina. No es posible iniciar sesión con contraseña ni clave pública después de ejecutar este comando.


Para volver a habilitar la cuenta en una fecha posterior, puede ejecutar:

usermod --unlock --expiredate '' <username>
Christoph Wurm
fuente
77
No utilice 1970-01-01, ya que establecerá / etc / campo de caducidad de sombra en 0. sombra (5) El valor 0 no debe usarse ya que se interpreta como una cuenta sin caducidad o como una caducidad en 1 de enero de 1970. Utilice: usermod --lock --expiredate 1970-02-02 <username>
Marcus Maxwell
44
Sería genial si también pudiera proporcionar el método para revertir esta operación. Parece que usermod --unlock --expiredate '' usernamelo hará.
Bob
3
Además de lo que escribió @MarcusMaxwell: La página del manual usermoddice:Note: if you wish to lock the account (not only access with a password), you should also set the EXPIRE_DATE to 1.
Zero3
1
¿Por qué --expiredate 1no es suficiente por sí solo?
Thomas Jensen
Pero sudo su usernameparece funcionar con otra cuenta.
xuhdev
10

Bloquee la contraseña y cambie el shell a /bin/nologin.

sudo usermod --lock --shell /bin/nologin username

(O más concisamente sudo usermod -L -s /bin/nologin username.)

mattdm
fuente
¿Cómo 'cambio el shell a / bin / nologin'?
55
@mattdm Esta no es una solución completa, ya que un usuario aún puede especificar un comando para ejecutar. Por ejemplo, ssh username@hostname /bin/bashle dará al usuario un mensaje bash, independientemente del shell predeterminado.
phunehehe
44
@phunehehe: ¿lo has probado? Obtendrá, en el registro, "Usuario [nombre de usuario] no permitido porque shell / bin / nologin no existe".
mattdm
2
Hasta donde sé, el comportamiento de shell no válido no está realmente documentado. Por otro lado, la página del manual dice que si la contraseña tiene un encabezado !! en Linux, la cuenta será tratada como bloqueada, y eso en realidad no funciona. Entonces, ya sabes, la documentación y la realidad son solo coincidencias aproximadas de todos modos. :)
mattdm
2
sudo chsh -s /bin/nologinSería mejor que editar /etc/passwda mano. Además, en algunos sistemas, lo es /sbin/nologin.
Mikel
3

Aquí hay otra manera simple. Puede configurar la cuenta de usuario caducada. Esto evitará los inicios de sesión basados ​​en contraseña y en clave ssh para la cuenta, pero no toca la contraseña.

Para bloquear la cuenta:

# chage -E 0 username

La cuenta de usuario 'nombre de usuario' se bloqueará en el sistema. Para volver a habilitar la cuenta de usuario, haga lo siguiente.

Para desbloquear la cuenta:

# chage -E -1 username

El 'nombre de usuario' de la cuenta de usuario se volverá a habilitar en su sistema con la misma contraseña que antes. El binario 'chage' es parte del paquete shadow-utils en Red Hat Linux, o el paquete passwd en Debian Linux.

miklosq
fuente
3

No tengo suficiente representante para comentar la respuesta de Legate, pero quería compartir que esta respuesta nos ayudó con otro caso de uso:

1.) la cuenta en cuestión es una cuenta de servicio local que ejecuta una aplicación, no una cuenta de usuario final.

2.) los usuarios finales ssh en sí mismos, y sudo /bin/su <user>para convertirse en usuarios y administrar la aplicación debido a un requisito de seguimiento de auditoría que la cuenta de servicio no puede tener la capacidad de inicio de sesión directo.

3.) la cuenta de servicio debe tener un shell válido ( /bin/bashno /sbin/nologin), porque una Enterprise Scheduling Platform (el agente se ejecuta como root localmente) debe poder su - <user>y no tiene la su -s /bin/bash <user>capacidad que tiene un shell completo, y es necesario para ejecutar trabajos de forma remota para operaciones por lotes más grandes que abarcan múltiples servidores y bases de datos.


Entonces ...

passwd -l <user>
No satisface las restricciones porque la autenticación de clave pública omite PAM y aún permite el inicio de sesión directo.

usermod -s /sbin/nologin <user>
No satisface las restricciones porque rompe el planificador empresarial

usermod --lock --expiredate 1970-01-01 <user>
Este es nuestro ganador. El inicio de sesión remoto está deshabilitado, pero la raíz aún puede su <user>, al igual que otros usuarios a través de sudomodo que el planificador funciona correctamente y los usuarios finales autorizados pueden convertirse en la cuenta de servicio objetivo según sea necesario.

¡Gracias por la solución!

usuario1880028
fuente
1

Para eliminarlo por completo use userdel.

Tenga en cuenta que si elimina una cuenta, existe el riesgo de que su ID de usuario se siga utilizando en algún lugar del sistema de archivos y que un nuevo usuario herede la propiedad de esos archivos si se ingresó con el mismo ID de usuario.

Desea cambiar el propietario de los archivos que son propiedad del usuario eliminado.

Si desea volver a agregar al usuario más tarde, guarde sus líneas desde /etc/passwd(y en Solaris /etc/shadow) en archivos temporales como /etc/passwd_deleted.

De esa manera, cuando lo agregue de nuevo, puede usar la misma identificación de usuario y la misma contraseña (que está encriptada en uno de los archivos anteriores)

Descargo de responsabilidad: aprendí UNIX por mi cuenta, así que no me sorprendería si hay una mejor manera de deshabilitar temporalmente al usuario. De hecho, ni siquiera sé de qué claves privadas / públicas estás hablando. También estoy seguro de que hay un findcomando que se puede usar para buscar los archivos con ese ID de usuario propietario

Bryan Field
fuente
1
google autorizado_keys o intente leer esto eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html básicamente en lugar de usar una contraseña, ingrese su clave de publuc en ese archivo y cuando se conecte con ssh, se iniciará sesión automáticamente si el público coincide con su clave privada actual