
Problema
En Debian 10 quiero crear un usuario que no pueda iniciar sesión directamente. Sólo se debería poder acceder al usuario mediante el su
binario. En mi configuración de Ubuntu 18.04, hice exactamente esto y funcionó de maravilla, pero en Debian 10 no puedo hacerlo.
Pista
El usuario que pueda iniciar sesión no tendrá permiso para usar sudo
.
Qué he hecho
He configurado un usuario con el shell predeterminado /usr/sbin/nologin
. Pero cuando intento acceder a este usuario su --shell=/bin/bash user
no puedo hacerlo.
Ejemplo mínimo
# useradd --shell /usr/sbin/nologin locked
# passwd locked
Enter new UNIX password: *secret*
Retype new UNIX password: *secret*
passwd: password updated successfully
$ su --shell /bin/bash locked
Password: *secret*
This account is currently not available.
¿Por qué esto ya no funciona en Debian?
Edición 1:
Salida de /etc/shells
:
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/zsh
/usr/bin/zsh
Edición 2:
Una respuesta un poco más detallada sobre lo que quiero lograr:
Estoy intentando crear un usuario (usuario1) que puede iniciar sesión en la computadora ya sea mediante SSH o usando un monitor y un teclado. Esteusuario1El usuario debe tener derechos restringidos. Una de estas restricciones es que no puede utilizar sudo
la aplicación, simplemente no se le permite hacerlo.
Entonces tengo un segundo usuario (usuario2) que podrá utilizar la aplicación sudo para realizar algunas tareas de configuración, como cambiar la configuración de red u otras cosas. Esteusuario2debe estar bloqueado para iniciar sesión de forma predeterminada. Por lo tanto, no se puede iniciar sesión mediante SSH y (más relacionado con mi problema) no se puede iniciar sesión mediante el monitor y el teclado.
-> Cuando alguien quiere realizar alguna tarea, debe iniciar sesión como restringidousuario1, cambie el usuario ausuario2y luego se le permite cambiar alguna configuración o algo así.
Esta es en definitiva la situación que quiero lograr. Hay algunos detalles más detallados sobre lo que los usuarios pueden o no hacer. Pero para describirlo lo más simple posible simplemente lo expliqué con `sudo.
Respuesta1
Si su usuario tenía un shell de inicio de sesión, deberás escribir tu cmd como: su --shell=/bin/bash locked
o sudo -u locked /bin/bash
,siempre que el shell predeterminado especificado para el usuario de destino aparezca en/etc/shell
.
(Tenga en cuenta que hay un signo igual después de la opción larga --shell
).
Sin embargo:
El objetivo de tener un usuario sin shell de inicio de sesión es precisamente que ese usuario no puede iniciar sesión de ninguna manera, ya sea directamente al inicio de la sesión o mediante otra cuenta de usuario. Curiosamente, eso es exactamente lo que intentas lograr.
para poder acceder a ese usuario (siempre que tenga un shell de inicio de sesión, al cambiar a su perfil como se muestra arriba, generalmente necesitará
sudo
privilegios, o al menos podrá usar elsu
cmd...
Respuesta2
Encontré este deivanleonczen Server Fault y la identificación funcionó para mí:
Puede usar el modificador -s a su para ejecutar un shell en particular
su -s /bin/bash -c '/path/to/your/script' testuser