Técnicamente, a menos que pam
está configurado para comprobar su shell con pam_shells
ninguno de estos puede impedir su inicio de sesión, si no está en el shell. En mi sistema incluso son de diferentes tamaños, así que sospecho que realmente hacen algo. Entonces, ¿cuál es la diferencia? ¿Por qué existen ambos? ¿Por qué debería usar uno sobre el otro?
-rwxr-xr-x 1 root root 21K Feb 4 17:01 /bin/false -rwxr-xr-x 1 root root 4.7K Mar 2 14:59 /sbin/nologin
Comentarios
- Vea también ¿/ usr / sbin / nologin como shell de inicio de sesión tiene un propósito de seguridad?
- Tengo ‘ tengo curiosidad ¿Por qué / bin / false necesita 21k de código para devolver un código de retorno » 1 «! (y / sbin / nologin solo toma 4.7k)
- útil para leer. ¿Cuál es la diferencia entre / sbin / nologin y / bin / false?
- @MarkStewart Un poco tarde, pero es posible que desee leer ¿Por qué el verdadero y el falso son tan grandes? y Un tutorial vertiginoso sobre la creación de ejecutables ELF realmente delicados para Linux .
- @nxnev Sí, ‘ t pensó en la sobrecarga de ELF. Y desde mis viejos tiempos en IBM había un programa IEFBR14 que era una simple instrucción de ensamblaje de un código de operación: BR 14 – ¡Rama para registrar 14, que terminaría el programa con el código de retorno establecido en lo que estuviera en el registro 14!
Responder
Cuando /sbin/nologin
se establece como shell, si el usuario con ese shell inicia sesión, «recibirán un mensaje cortés que dice» Esta cuenta no está disponible actualmente «. Este mensaje se puede cambiar con el archivo /etc/nologin.txt
.
/bin/false
es solo un binario que sale inmediatamente, devolviendo falso, cuando «se llama, es decir, cuando alguien que tiene false
como registros de shell en, se desconectan inmediatamente cuando false
sale. Configurar el shell en /bin/true
tiene el mismo efecto de no permitir que alguien inicie sesión pero false
probablemente se use como una convención sobre true
ya que es mucho mejor t transmitiendo el concepto de que la persona no tiene un caparazón.
Mirando la página de manual de nologin
, dice que fue creado en 4.4 BSD (principios de 1990 ) por lo que llegó mucho después de que se creara false
. El uso de false
como shell es probablemente solo una convención llevada a cabo desde los primeros días de UNIX.
nologin
es la opción más fácil de usar, con un mensaje personalizable que se le da al usuario que intenta iniciar sesión, por lo que teóricamente querrás usarlo; pero tanto nologin
como false
tendrán el mismo resultado final de que alguien no tenga un shell y no pueda ingresar mediante SSH.
Comentarios
-
/usr/sbin/nologin
para distribuciones basadas en Debian. - Al menos la implementación de BSD también registra el inicio de sesión intenta registrar el sistema como se ve en opensource.apple.com/source/system_cmds/system_cmds-735/… , mientras que / bin / false no ‘ registra nada
- ESTO – Es una respuesta asombrosa, con una gran historia presentada aquí. ¡Bien hecho, Mark!
- La
/etc/nologin.txt
función de mensaje personalizado no está disponible en Ubuntu.
Responder
Algunos servidores FTP le permitirán acceso FTP solo si tiene un shell válido. /sbin/nologin
se considera un shell válido, mientras que /bin/false
no lo es.
(Creo que «válido» significa que El estado de salida es 0, pero /etc/shells
también puede aparecer, probablemente depende del sistema, el software FTP y su configuración.)
Comentarios
- sí, esa ‘ probablemente sea parte del programa ftp usando pam, y pam usando pam_shells que, como dijiste, verifica
/etc/shells
. Solo una suposición … podría estar equivocado. - Acabo de comprobar Ubuntu 8.04 y 14.04. El comando nologin sale con un estado 1 similar a falso, y no se incluye ninguno de verdadero, falso o nologin en / etc / shells. Si lo fueran, un usuario podría usar chsh para seleccionar tal shell y bloquearse a sí mismo fuera de su cuenta.
Responder
/bin/false
es un comando del sistema que se usa cada vez que necesita pasar un comando a un programa que no debería hacer más que salir con un error. Es el complemento de /bin/true
. Ambas son utilidades POSIX estándar y muy antiguas y, por definición, ninguna de ellas produce ningún resultado.true a veces se usa para un script de shell que debe repetirse indefinidamente, como:
while true; do ... # Waste time if [ $wasted_time -gt 100000 ]; then exit 0 fi ... done
/usr/sbin/nologin
está específicamente diseñado para reemplaza un shell y produce una salida quejándose de que no puede iniciar sesión. Antes de que existiera, era común usar /bin/false
para usuarios ficticios, pero podría ser confuso ya que el usuario no saber por qué se han iniciado.
Comentarios
- vale la pena señalar que
/bin/true
y/bin/false
no siempre son lo que obtendrá en un script de shell. Enzsh
true
yfalse
son integradas, dondebash
usa las/bin/*
versiones
Responder
En mi máquina, nologin
muestra siempre el mismo mensaje, en inglés, ignorando los argumentos . /bin/false
responde a --version
y --help
en el idioma indicado por $LC_CTYPE
. Aparte de estas diferencias cosméticas, tienen el mismo efecto.
En cuanto a la usabilidad, nologin
es mejor si se usa en la cuenta de una persona real que habla inglés. En cuanto a seguridad, no hay diferencia.
Comentarios
- parece que quizás
false
es más para cuentas del sistema que no tienen un usuario real, ynologin
es para cuentas deshabilitadas. - ¿Cuál es su sistema operativo? Centos
nologin
no acepta argumentos, pero puede leer el mensaje de/etc/nologin.txt
.
Respuesta
En Linux, /sbin/nologin
proviene del proyecto util-linux , mientras que /bin/false
es parte de GNU Coreutils . Tienen diferentes roles y nologin tiene la opción de imprimir un mensaje para las personas que tienen como su shell que están iniciando sesión. Los comandos de Linux provienen de BS D, donde parecen tener una larga historia de ser diferentes. El false
de FreeBSD simplemente devuelve 1 , mientras que nologin
busca asegúrese de que «s se esté ejecutando en un TTY y envíe un mensaje a syslog durante los intentos de inicio de sesión. Las versiones de Linux son un poco más complicadas (false
haciendo todo tipo de cosas divertidas con la internacionalización para la salida de –help, supongo) pero esencialmente funciona de la misma manera.
Respuesta
/ bin / false el único trabajo es salir con un código de salida distinto de cero.
Pruébelo en la línea de comando:
$:> /bin/false $:> echo $? 1 $:>
Algunas instituciones usan / bin / false en el campo de shell del archivo de contraseña. Si el usuario intenta iniciar sesión, el shell es / bin / false, por lo que se sale de inmediato
Answer
Pueden ser el mismo programa, pero tienen significados diferentes. El nombre del programa lo dice todo.
- / bin / false está destinado a devolver un valor falso. se ejecuta como programa.
- / bin / nologin tiene la intención de indicar al usuario que no se permite iniciar sesión para una cuenta. (Se usa un shell de inicio de sesión).
Respuesta
Ambos hacen más o menos el mismo trabajo pero /bin/false
es útil para usuarios sin privilegios. Por otro lado, /sbin/nologin
es para usuarios privilegiados.
Comentarios
- Oh, ¿cómo ¿Llegaste a esa conclusión?
- Probablemente haya investigado
/etc/passwd
. Acabo de echar un vistazo a/etc/passwd
de una extensión Debian recién instalada. En este cuadro, casi todas las cuentas del sistema (ID de usuario < 1000) tienen/usr/sbin/nologin
como shell, con algunas excepciones. Tenga en cuenta que no estoy de acuerdo con la respuesta de @pythondetective ‘. Solo estoy especulando qué podría haberlo llevado a esta conclusión. Sin embargo, mi comentario llega un poco tarde. - ¡No! El shell de inicio de sesión predeterminado no es lo mismo que los privilegios.