/bin/false
ist ein Hilfsprogramm /bin/true
, das in einem abstrakten Sinn nützlich ist, um sicherzustellen, dass Unix funktionsvollständig ist. Es wurden jedoch neue Ziele für diese Programme gefunden. Betrachten Sie die BASH-Anweisung /some/program || /bin/true
, die $? = 0
unabhängig von der Rückgabe von boolean- evaluation immer true ( ) ergibt /some/program
.
Ein emergenter Einsatz /bin/false
, wie Sie identifiziert, ist als ein Null - Shell für Benutzer eingeloggt nicht erlaubt. Das System in diesem Fall verhält sich genau so , wie wenn die Shell ausgeführt fehlgeschlagen.
POSIX (obwohl ich mich möglicherweise irre und der SUS möglicherweise) zwingt diese beiden Befehle dazu, genau nichts anderes zu tun, als den entsprechenden booleschen Wert zurückzugeben.
/sbin/nologin
ist ein BSD-Dienstprogramm, das sich ähnlich verhält wie /bin/false
(gibt boolean false zurück), jedoch auch die Ausgabe druckt, was /bin/false
verboten ist. Dies soll dem Benutzer helfen zu verstehen, was passiert ist, obwohl in der Praxis viele Terminalemulatoren einfach geschlossen werden, wenn die Shell beendet wird, wodurch die Nachricht in einigen Fällen ohnehin fast unlesbar wird.
Die Auflistung /sbin/nologin
in hat wenig Sinn /etc/shells
. Der Standardeffekt von /etc/shells
ist, die Programme aufzulisten, die für die Verwendung zulässig sind, chsh
wenn Benutzer ihre eigene Shell ändern (und es gibt keinen glaubwürdigen Grund, Ihre eigene Shell zu ändern /sbin/nologin
). Der Superuser kann die Shell eines beliebigen Benutzers in eine beliebige Shell ändern. Möglicherweise möchten Sie jedoch beides /sbin/nologin
und /bin/false
in auflisten /etc/rsh
, wodurch Benutzer mit diesen Shells chsh
in dem unglücklichen Fall, dass sie eine Shell erhalten, daran gehindert werden, ihre Shell zu ändern .
FTP-Daemons können Benutzern mit einer Shell, die sich nicht in / etc / shells befindet, den Zugriff verweigern, oder sie können eine andere Logik verwenden, die sie möchten. Das Ausführen von FTP ist auf jeden Fall zu vermeiden, da sftp
es ähnlich, aber sicher ist (und ähnliche Funktionen bietet). Auf einigen Websites wird /sbin/nologin
der Shell-Zugriff deaktiviert, während der SFTP-Zugriff durch Eingabe von "In" zugelassen wird /etc/shells
. Dies kann eine Hintertür öffnen, wenn der Benutzer Cronjobs erstellen darf.
In beiden Fällen scp
wird nicht mit einer ungültigen Shell gearbeitet. scponly
kann in diesem Fall als Shell verwendet werden.
Darüber hinaus beeinflusst die Wahl der Shell den Betrieb von su -
(AKA su -l
). Insbesondere wird die Ausgabe von /sbin/nologin
auf stdout gedruckt, wenn es sich um die Shell handelt. das kann bei nicht der Fall sein /bin/false
. In beiden Fällen schlagen Befehle, die mit ausgeführt su -cl
werden, fehl.
Zum Schluss die Antwort:
Um ein Konto zu deaktivieren, müssen Sie keines von beiden verwenden, setzen Sie die Shell jedoch zu /sbin/nologin
Informationszwecken auf (es /sbin/nologin
sei denn, in /etc/shells
, zu welchem Zeitpunkt sollten Sie welche verwenden /bin/false
, sollten nicht sein). Setzen Sie stattdessen das Kennwortfeld /etc/passwd
auf !
, um sicherzustellen crypt
, dass es für keine Kennwörter gültig ist. Stellen Sie den Hash auf /etc/shadow
die gleiche Weise ein, um Fehler zu vermeiden. passwd -l
werde das für dich tun.
Eine dritte Möglichkeit, ein Konto zu deaktivieren, besteht darin, das Feld für das Ablaufdatum des Kontos auf ein altes Datum (z. B. usermod --expiredate 1
) zu setzen. Auf diese Weise werden Anmeldungen verhindert, wenn Benutzer sich bei Ihrem Setup ohne Kennwort bei ihrem Unix-Konto authentifizieren können und der von ihnen verwendete Dienst keine Shell benötigt.