/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/nologinin /etc/shells. L'effetto standard di /etc/shellsè quello di elencare i programmi consentiti per l'uso chshquando 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/nologine /bin/falsein /etc/rsh, il che proibirà agli utenti con queste shell di cambiare la loro shell usando chshnel 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/nologinper 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, scpnon funzionerà con una shell non valida. scponlypuò 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/nologinverrà 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 -clfalliranno.
Infine, la risposta:
Per disabilitare un account, non dipendere da nessuno di questi, ma impostare la shell su /sbin/nologina scopo informativo (a meno che non /sbin/nologinsia presente /etc/shells, a quel punto è necessario utilizzare /bin/false, cosa che non dovrebbe essere). Invece, imposta il campo password /etc/passwdsu !, che è garantito cryptper essere valido per nessuna password. Valuta di impostare l'hash /etc/shadowallo stesso modo per evitare bug. passwd -llo 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.