/bin/false
è un programma di utilità associato a /bin/true
, utile in senso astratto per garantire che unix sia completo. Tuttavia, sono stati trovati scopi emergenti per questi programmi; considera l'istruzione BASH /some/program || /bin/true
, che sarà sempre booleana-valutata su true ( $? = 0
) indipendentemente dal ritorno di /some/program
.
Un uso emergente di /bin/false
, come identificato, è come una shell nulla per gli utenti non autorizzati ad accedere. In questo caso il sistema si comporterà esattamente come se la shell non potesse essere eseguita.
POSIX (anche se potrei sbagliarmi e potrebbe essere il SUS) costringe entrambi questi comandi a fare esattamente nient'altro che restituire il valore booleano appropriato.
/sbin/nologin
è un'utilità BSD che ha un comportamento simile a /bin/false
(restituisce un valore booleano falso), ma stampa anche l'output, come /bin/false
è vietato. Questo dovrebbe aiutare l'utente a capire cosa è successo, anche se in pratica molti emulatori di terminali si chiuderanno semplicemente quando la shell termina, rendendo il messaggio quasi illeggibile comunque in alcuni casi.
C'è poco scopo alla quotazione /sbin/nologin
in /etc/shells
. L'effetto standard di /etc/shells
è quello di elencare i programmi consentiti per l'uso chsh
quando gli utenti cambiano la propria shell (e non vi sono motivi credibili per cambiare la propria shell /sbin/nologin
). Il superutente può cambiare la shell di chiunque in qualsiasi cosa. Tuttavia, potresti voler elencare entrambi /sbin/nologin
e /bin/false
in /etc/rsh
, il che proibirà agli utenti con queste shell di cambiare la loro shell usando chsh
nel malaugurato caso in cui ottengano una shell.
I daemon FTP possono impedire l'accesso agli utenti con una shell non in / etc / shells, oppure possono usare qualsiasi altra logica che desiderano. L'esecuzione di FTP deve essere evitata in ogni caso perché sftp
(che fornisce funzionalità simili) è simile ma sicura. Alcuni siti utilizzano /sbin/nologin
per disabilitare l'accesso alla shell consentendo l'accesso sftp inserendolo /etc/shells
. Questo può aprire una backdoor se l'utente è autorizzato a creare cronjobs.
In entrambi i casi, scp
non funzionerà con una shell non valida. scponly
può essere usato come shell in questa istanza.
Inoltre, la scelta della shell influisce sul funzionamento di su -
(AKA su -l
). In particolare, l'output di /sbin/nologin
verrà stampato su stdout se si tratta della shell; questo non può essere il caso di /bin/false
. In entrambi i casi i comandi eseguiti con su -cl
falliranno.
Infine, la risposta:
Per disabilitare un account, non dipendere da nessuno di questi, ma impostare la shell su /sbin/nologin
a scopo informativo (a meno che non /sbin/nologin
sia presente /etc/shells
, a quel punto è necessario utilizzare /bin/false
, cosa che non dovrebbe essere). Invece, imposta il campo password /etc/passwd
su !
, che è garantito crypt
per essere valido per nessuna password. Valuta di impostare l'hash /etc/shadow
allo stesso modo per evitare bug. passwd -l
lo farà per te.
Un terzo modo per disabilitare un account è impostare il campo della data di scadenza dell'account su una data antica (ad es. usermod --expiredate 1
). Ciò impedirà l'accesso nel caso in cui la configurazione consenta agli utenti di autenticarsi sul proprio account unix senza password e il servizio che stanno utilizzando non richiede shell.