He oído a menudo se recomienda que una cuenta de usuario debe desactivarse mediante el establecimiento de su caparazón para /bin/false
. Pero, en mis sistemas Linux existentes, veo que una gran cantidad de cuentas existentes (todas ellas cuentas de servicio) tienen un shell /sbin/nologin
.
Veo en la página del manual que /sbin/nologin
imprime un mensaje al usuario que dice que la cuenta está deshabilitada y luego se cierra. Presumiblemente /bin/false
no imprimiría nada.
También veo que /sbin/nologin
aparece en la lista /etc/shells
, mientras /bin/false
que no.
La página del manual dice que FTP deshabilitará el acceso para los usuarios con un shell que no figura en la lista /etc/shells
e implica que otros programas pueden hacer lo mismo. ¿Eso significa que alguien podría enviar un FTP con una cuenta que tiene /sbin/nologin
como shell?
¿Cual es la diferencia aquí? ¿Cuál de estos debo usar para deshabilitar una cuenta de usuario y en qué circunstancias? ¿Qué otros efectos tiene un listado /etc/shells
?
Respuestas:
/bin/false
es un programa de utilidad, complementario/bin/true
, que es útil en un sentido abstracto para garantizar que Unix tenga funciones completas. Sin embargo, se han encontrado propósitos emergentes para estos programas; considere la declaración BASH/some/program || /bin/true
, que siempre evaluará boolean a true ($? = 0
) sin importar el retorno de/some/program
.Un uso emergente de
/bin/false
, como identificó, es como un shell nulo para los usuarios que no pueden iniciar sesión. El sistema en este caso se comportará exactamente como si el shell no se ejecutara.POSIX (aunque puedo estar equivocado y puede ser el SUS) restringe estos dos comandos para hacer exactamente nada más que devolver el valor booleano apropiado.
/sbin/nologin
es una utilidad BSD que tiene un comportamiento similar a/bin/false
(devuelve boolean false), pero también imprime la salida, como/bin/false
está prohibido. Se supone que esto ayuda al usuario a comprender lo que sucedió, aunque en la práctica muchos emuladores de terminal simplemente se cerrarán cuando finalice el shell, haciendo que el mensaje sea casi ilegible en algunos casos.Hay poca propósito de enumerar
/sbin/nologin
en/etc/shells
. El efecto estándar de/etc/shells
es enumerar los programas permitidos para su usochsh
cuando los usuarios están cambiando su propio shell (y no hay ninguna razón creíble para cambiar su propio shell/sbin/nologin
). El superusuario puede cambiar el caparazón de cualquier persona a cualquier cosa. Sin embargo, es posible que desee enumerar ambos/sbin/nologin
y/bin/false
en/etc/rsh
, lo que prohibirá a los usuarios con estos shells cambiar su shell utilizandochsh
en el desafortunado caso de que obtengan un shell.Los demonios FTP pueden impedir el acceso a usuarios con un shell que no esté en / etc / shells, o pueden usar cualquier otra lógica que deseen. En cualquier caso, debe evitarse ejecutar FTP porque
sftp
(que proporciona una funcionalidad similar) es similar pero seguro. Algunos sitios usan/sbin/nologin
para deshabilitar el acceso de shell mientras permiten el acceso sftp al ponerlo/etc/shells
. Esto puede abrir una puerta trasera si el usuario puede crear cronjobs.En cualquier caso,
scp
no funcionará con un shell no válido.scponly
se puede usar como shell en esta instancia.Además, la elección de shell afecta el funcionamiento de
su -
(AKAsu -l
). Particularmente, la salida de/sbin/nologin
se imprimirá en stdout si es el shell; este no puede ser el caso con/bin/false
. En cualquier caso, los comandos ejecutados consu -cl
fallarán.Finalmente, la respuesta:
Para deshabilitar una cuenta, no dependa de ninguno de estos, pero configure el shell
/sbin/nologin
para fines informativos (a menos que/sbin/nologin
esté en/etc/shells
, en qué punto debe usar/bin/false
, que no debería estar). En su lugar, establecer el campo de contraseña en/etc/passwd
a!
, que está garantizada porcrypt
ser válida para ninguna contraseña. Considere configurar el hash de/etc/shadow
la misma manera para evitar errores.passwd -l
Hará esto por ti.Una tercera forma de deshabilitar una cuenta es establecer el campo de fecha de vencimiento de la cuenta en una fecha antigua (p. Ej.
usermod --expiredate 1
). Esto evitará inicios de sesión en caso de que su configuración permita a los usuarios autenticarse en su cuenta de Unix sin una contraseña y el servicio que están utilizando no requiere shell.fuente
titantools
paquete:noshell
. Este pseudo-shell proporciona capacidades de auditoría, iniciando sesión en los intentos de syslog para usar cuentasnoshell
como su shell, mientras que aún no permite el acceso./bin/false
como un intérprete de ingreso para las personas que no deben conectarse.Después de investigar un poco sobre esto, el método que use dependerá de lo que tenga que bloquear. Si un usuario inicia sesión con este conjunto en el shell, recibirá un mensaje en el sentido de
This account is currently unavailable.
Tenga en cuenta que puede cambiar esto creando el archivo/etc/nologin.txt
al menos en derivados RHEL.Como sabes
/bin/false
no es una concha. La forma en que funciona es que devuelve falso, que cierra la sesión inmediatamente después de las salidas binarias. Tenga en cuenta que/bin/true
lograría el mismo efecto.Respecto a su pregunta FTP: Sí, estás en lo correcto en que el tener la cáscara se establece en
/sbin/nologin
que permitirá a los usuarios acceder a FTP, mientras que/bin/false
o/bin/true
va a impedir por completo que el usuario inicie sesión en cualquier servicio.Por lo tanto,
/bin/false
o/bin/true
es mejor evitar que un usuario inicie sesión en cualquier servicio, mientras/sbin/nologin
que aún permitirá que los usuarios inicien sesión en servicios que no sean SSH o la consola local, al mismo tiempo que le informa al usuario que la cuenta está inactiva y se utiliza mejor cuando solo SSH / local La consola debe estar bloqueada.fuente
¿Alguien intentó probar que / bin / false no permitiría el acceso a FTP?
Acabo de cambiar el shell de mi usuario a / bin / false, y pude FTP muy bien.
Utilizo / dev / null para bloquear completamente al usuario (bueno, excepto el correo electrónico, todavía pueden POP3).
fuente
/etc/shells
? ¿Cómo está configurado su servidor FTP?