¿Cuál es la diferencia entre / sbin / nologin y / bin / false


170

Técnicamente, a menos que pamesté configurado para verificar su shell con pam_shellsninguno de estos puede evitar su inicio de sesión, si no está en el shell. En mi sistema son incluso de diferentes tamaños, por lo que sospecho que realmente hacen algo. Entonces, ¿cuál es la diferencia? ¿Por qué ambos existen? ¿Por qué usaría 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


La ruta /bin/falsedebe existir en todas partes, pero no en /sbin/nologin'/ sbin / nologin': no ​​existe dicho archivo o directorio. ¿Alguna idea de por qué es en /usr/sbin/nologinlugar de /sbin/nologinen Debian y Ubuntu?
baptx

44
Tengo curiosidad por qué / bin / false toma 21k de código para devolver un código de retorno "1". (y / sbin / nologin solo toma 4.7k)
Mark Stewart


1
@nxnev Sí, no pensé en los gastos generales de ELF. ¡Y desde mis viejos días en IBM había un programa IEFBR14 que era una simple instrucción de ensamblaje de 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 estaba en el registro 14!
Mark Stewart

Respuestas:


198

Cuando /sbin/nologinse configura como shell, si el usuario con ese shell inicia sesión, recibirá un mensaje cortés que dice 'Esta cuenta no está disponible actualmente'. Este mensaje se puede cambiar con el archivo /etc/nologin.txt.

/bin/falsees solo un binario que sale inmediatamente, devolviendo falso, cuando se llama, por lo que cuando alguien que tiene falsecomo shell inicia sesión, se desconecta inmediatamente cuando falsesale. Configurar el shell /bin/truetiene el mismo efecto de no permitir que alguien inicie sesión, pero falseprobablemente se usa como una convención trueya que es mucho mejor para transmitir el concepto de que la persona no tiene un shell.

Mirando nologinla página del manual de man, dice que fue creado en 4.4 BSD (principios de los 90), por lo que llegó mucho después de falsesu creación. El uso de falsecomo shell probablemente sea solo una convención llevada a cabo desde los primeros días de UNIX.

nologines la opción más fácil de usar, con un mensaje personalizable dado al usuario que intenta iniciar sesión, por lo que teóricamente querrá usarlo; pero ambos nologiny falsetendrá el mismo resultado final de alguien que no tiene una cubierta y no ser capaz de ssh en.


10
/usr/sbin/nologinpara distribuciones basadas en Debian.
Diemo

3
Al menos, la implementación de BSD también registra los intentos de inicio de sesión para syslog como se ve en opensource.apple.com/source/system_cmds/system_cmds-735/… , mientras que / bin / false no registraría nada
Sergiy Kolodyazhnyy

28

Algunos servidores FTP le permitirán el acceso FTP solo si tiene un shell válido. /sbin/nologines considerado como un shell válido, mientras /bin/falseque no lo es.

(Creo que "válido" significa que su estado de salida es 0, pero /etc/shellstambién puede entrar en él, probablemente depende del sistema, el software FTP y su configuración).


1
sí, eso es probablemente 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.
xenoterracide

44
Acabo de comprobar Ubuntu 8.04 y 14.04. El comando nologin sale con el estado 1 similar a falso, y ninguno de verdadero, falso o nologin se incluye en / etc / shells. Si lo fueran, un usuario podría usar chsh para seleccionar dicho shell y bloquear su cuenta.
penguin359

12

/bin/falsees un comando del sistema que se usa cada vez que necesita pasar un comando a un programa que no debe hacer nada más que salir con un error. Es el compañero de /bin/true. Ambas son utilidades POSIX muy antiguas y estándar, y ninguna produce ningún resultado por definición. true a veces se usa para un script de shell que debería repetirse indefinidamente, como:

while true; do
    ...
    # Waste time
    if [ $wasted_time -gt 100000 ]; then
        exit 0
    fi
    ...
done

/usr/sbin/nologinestá específicamente diseñado para reemplazar un shell y produce resultados quejándose de que no puede iniciar sesión. Antes de que existiera, era común usarlo /bin/falsepara usuarios ficticios, pero podría ser confuso ya que el usuario no sabe por qué fueron expulsados.


44
Vale la pena señalar eso /bin/truey /bin/falseno siempre es lo que obtendrá en un script de shell. En zsh truey falseestán integrados, donde bashutiliza las /bin/*versiones
xenoterracide

4

En mi máquina, nologinmuestra siempre el mismo mensaje, en inglés, ignorando los argumentos. /bin/falseresponde --versiony --helpen el idioma indicado por $LC_CTYPE. Aparte de estas diferencias cosméticas, tienen el mismo efecto.

En cuanto a la usabilidad, nologines mejor si se usa en la cuenta de una persona real que habla inglés. En cuanto a la seguridad, no hay diferencia.


44
Parece que tal vez falsees más para las cuentas del sistema que no tienen un usuario real, y nologines para cuentas deshabilitadas.
xenoterracide

1
¿Cuál es tu sistema operativo? La nologinversión de Centos no toma argumentos, pero puede leer mensajes de /etc/nologin.txt.
Alexander Gonchiy

3

/ bin / false solo el 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 sale inmediatamente


2

En linux, /sbin/nologinproviene del proyecto util-linux , mientras que /bin/falsees parte de GNU Coreutils . Cumplen diferentes roles, y nologin tiene la opción de imprimir un mensaje para las personas que lo tienen como su shell que están iniciando sesión. Los comandos de Linux provienen de BSD, donde parecen tener una larga historia de ser diferentes. FreeBSD falsesimplemente devuelve 1 , mientras nologinverifica que se esté ejecutando en un TTY y envía un mensaje a syslog durante los intentos de inicio de sesión. Las versiones de Linux son un poco más complicadas ( falsesupongo que hacen todo tipo de cosas divertidas con la internacionalización para la salida de --help, supongo) pero esencialmente funcionan de la misma manera.


1

Podrían ser el mismo programa, pero tienen diferentes significados. El nombre del programa lo dice todo.

  • / bin / false está destinado a devolver un valor falso. Se ejecuta como programa.
  • / bin / nologin está destinado a indicar al usuario que no se permite iniciar sesión en una cuenta. (Se utiliza un shell de inicio de sesión).

-4

Ambos realizan más o menos el mismo trabajo, pero /bin/falseson útiles para usuarios sin privilegios. Por otro lado, /sbin/nologines para usuarios privilegiados.


44
Oh, ¿cómo llegaste a esa conclusión?
fpmurphy

Probablemente lo ha investigado /etc/passwd. Acabo de echar un vistazo a /etc/passwdun tramo Debian recién instalado. En este cuadro, casi todas las cuentas del sistema (ID de usuario <1000) tienen /usr/sbin/nologincomo shell, con algunas excepciones. Tenga en cuenta que no estoy de acuerdo con la respuesta de @ pythondetective. Solo estoy especulando sobre lo que podría haberlo llevado a esta conclusión. Sin embargo, mi comentario llega un poco tarde.
Binarus

¡No! el shell de inicio de sesión predeterminado no es lo mismo que los privilegios.
MUY Bélgica

no es un gran "detective"
Emobe
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.