Qual è la differenza tra / sbin / nologin e / bin / false


170

Tecnicamente, a meno che non pamsia impostato per controllare la shell senza pam_shellsnessuna di queste, si può effettivamente impedire il login, se non si è sulla shell. Sul mio sistema hanno anche dimensioni diverse, quindi sospetto che effettivamente facciano qualcosa. Quindi qual è la differenza? perché esistono entrambi? Perché dovrei usarne uno sopra l'altro?

-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


Il percorso /bin/falsedovrebbe esistere ovunque ma non /sbin/nologin: '/ sbin / nologin': nessun file o directory. Qualche idea sul perché sia /usr/sbin/nologininvece /sbin/nologinsu Debian e Ubuntu?
battezzare il

4
Sono curioso di sapere perché / bin / false richiede 21k di codice per restituire un codice di ritorno "1"! (e / sbin / nologin richiede solo 4.7k)
Mark Stewart,


1
@nxnev Sì, non pensavo al sovraccarico di ELF. E dai miei vecchi tempi IBM c'era un programma IEFBR14 che era una semplice istruzione di assemblaggio del codice operativo: BR 14 - Branch al registro 14, che avrebbe terminato il programma con il codice di ritorno impostato su qualsiasi cosa fosse nel registro 14!
Mark Stewart,

Risposte:


198

Quando /sbin/nologinè impostato come shell, se l'utente con quella shell accede, riceverà un messaggio educato che dice "Questo account non è attualmente disponibile." Questo messaggio può essere modificato con il file /etc/nologin.txt.

/bin/falseè solo un binario che esce immediatamente, restituendo false, quando viene chiamato, quindi quando qualcuno che ha falsela shell accede, viene immediatamente disconnesso quando falseesce. L'impostazione della shell su /bin/trueha lo stesso effetto di non consentire a qualcuno l'accesso, ma falseè probabilmente usata come una convenzione truepoiché è molto meglio comunicare il concetto che la persona non ha una shell.

Guardando nologinla pagina man, dice che è stato creato nel 4.4 BSD (primi anni '90), quindi è arrivato molto tempo dopo che è falsestato creato. L'uso di falsecome shell è probabilmente solo una convenzione riportata dai primi giorni di UNIX.

nologinè l'opzione più user-friendly, con un messaggio personalizzabile dato all'utente che tenta di accedere, quindi teoricamente vorresti usarlo; ma entrambi nologine falseavranno lo stesso risultato finale di qualcuno che non ha una shell e non è in grado di entrare.


10
/usr/sbin/nologinper le distribuzioni basate su Debian.
Diemo,

3
Almeno l'implementazione di BSD registra anche i tentativi di accesso per accedere al syslog come mostrato in opensource.apple.com/source/system_cmds/system_cmds-735/… , mentre / bin / false non registra nulla
Sergiy Kolodyazhnyy

28

Alcuni server FTP ti consentiranno l'accesso FTP solo se hai una shell valida. /sbin/nologinè considerato come una shell valida, mentre /bin/falsenon lo è.

(Penso che "valido" significhi che il suo stato di uscita è 0, ma /etc/shellspotrebbe anche entrare, probabilmente dipende dal sistema, dal software FTP e dalla tua configurazione.)


1
sì, probabilmente fa parte del programma ftp usando pam e pam usando pam_shells che, come hai detto, controlla /etc/shells. Solo una supposizione ... potrei sbagliarmi.
xenoterracide,

4
Ho appena controllato sia Ubuntu 8.04 che 14.04. Il comando nologin esce con lo stato 1 simile a false, e nessuno di true, false o nologin è incluso in / etc / shells. Se lo fossero, un utente potrebbe usare chsh per selezionare una tale shell e bloccarsi dal proprio account.
penguin359,

12

/bin/falseè un comando di sistema che viene utilizzato ogni volta che è necessario passare un comando a un programma che non dovrebbe fare altro che uscire con un errore. È il compagno di /bin/true. Entrambi sono utility POSIX molto vecchie e standard e non producono alcun output per definizione. true viene talvolta utilizzato per uno script di shell che dovrebbe eseguire un ciclo indefinito, come:

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

/usr/sbin/nologinè specificamente progettato per sostituire una shell e produce output lamentando che non è possibile accedere. Prima che esistesse, era comunemente usato /bin/falseper utenti fittizi, ma poteva essere fonte di confusione poiché l'utente non sapeva perché sono stati lanciati.


4
la pena notare che /bin/truee /bin/falsenon sono sempre quello che si ottiene in uno script di shell. In zsh truee falsesono integrati, dove bashutilizza le /bin/*versioni
xenoterracide

4

Sulla mia macchina, nologinvisualizza sempre lo stesso messaggio, in inglese, ignorando gli argomenti. /bin/falserisponde --versione --helpnella lingua indicata da $LC_CTYPE. Oltre a queste differenze cosmetiche, hanno lo stesso effetto.

Per quanto riguarda l'usabilità, nologinè meglio se viene utilizzato per conto di una persona reale che parla inglese. Per quanto riguarda la sicurezza, non c'è differenza.


4
sembra che forse lo falsesia di più per gli account di sistema che non hanno un vero utente, ed nologinè per gli account disabilitati.
xenoterracide,

1
Qual è il tuo sistema operativo? La nologinversione di Centos non accetta argomenti, ma può leggere il messaggio da /etc/nologin.txt.
Alexander Gonchiy,

3

Il processo / bin / false è solo quello di uscire con un codice di uscita diverso da zero.

Provalo dalla riga di comando:

$:> /bin/false
$:> echo $?
1
$:>

Alcune istituzioni usano / bin / false nel campo shell del file delle password. Se l'utente tenta di accedere, la shell è / bin / false, quindi vengono immediatamente chiusi


2

Su Linux, /sbin/nologinproviene dal progetto util-linux , mentre /bin/falsefa parte di GNU Coreutils . Servono ruoli diversi e nologin ha la possibilità di stampare un messaggio per le persone che lo hanno come shell che stanno effettuando il login. I comandi di Linux provengono da BSD, dove sembrano avere una lunga storia di differenze. FreeBSD falserestituisce semplicemente 1 , mentre i nologincontrolli per assicurarsi che stia funzionando su un TTY e invia un messaggio a syslog durante i tentativi di accesso. Le versioni di Linux sono un po 'più complicate ( falsefacendo ogni sorta di cose divertenti con l'internazionalizzazione per l'output di --help, presumo) ma essenzialmente funzionano allo stesso modo.


1

Potrebbero essere lo stesso programma, ma hanno significati diversi. Il nome del programma dice tutto.

  • / bin / false ha lo scopo di restituire un valore falso. Viene eseguito come programma.
  • / bin / nologin intende indicare all'utente che non è consentito l'accesso per un account. (Viene utilizzata una shell di accesso.)

-4

Entrambi svolgono più o meno lo stesso lavoro ma /bin/falsesono utili per utenti non privilegiati. D'altra parte, /sbin/nologinè per utenti privilegiati.


4
Oh, come sei arrivato a questa conclusione?
fpmurphy il

Probabilmente ha esaminato /etc/passwd. Ho appena dato un'occhiata a /etc/passwdun tratto Debian appena installato. In questa casella, quasi tutti gli account di sistema (ID utente <1000) hanno /usr/sbin/nologincome shell, con alcune eccezioni. Si prega di notare che non sono d'accordo con la risposta di @ pythondetective. Sto solo ipotizzando cosa potrebbe averlo portato a questa conclusione. Il mio commento è un po 'in ritardo, però.
Binarus,

no! la shell di accesso predefinita non corrisponde ai privilegi.
MUY Belgio,

non un grande "detective"
Emobe
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.