/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 uso chsh
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 utilizando chsh
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 -
(AKA su -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 con su -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 por crypt
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.