Was ist der Unterschied zwischen / sbin / nologin und / bin / false?


69

Ich habe oft gehört, dass empfohlen wurde, ein Benutzerkonto zu deaktivieren, indem die Shell auf eingestellt wurde /bin/false. Auf meinen vorhandenen Linux-Systemen sehe ich jedoch, dass eine große Anzahl vorhandener Konten (alle Dienstkonten) /sbin/nologinstattdessen eine Shell von haben .

Ich sehe auf der Manpage, die /sbin/nologineine Nachricht an den Benutzer druckt, dass das Konto deaktiviert ist und dann beendet wird. /bin/falseWürde vermutlich nichts drucken.

Ich sehe auch, dass /sbin/nologinin aufgeführt ist /etc/shells, während /bin/falsenicht.

Die Handbuchseite besagt, dass FTP den Zugriff für Benutzer mit einer Shell deaktiviert, die nicht in aufgeführt ist, /etc/shellsund impliziert, dass andere Programme möglicherweise dasselbe tun. Bedeutet das, dass jemand mit einem Account, der /sbin/nologinals Shell fungiert , einen FTP-Zugang hat ?

Was ist der Unterschied hier? Mit welcher dieser Optionen kann ich ein Benutzerkonto deaktivieren und unter welchen Umständen? Welche anderen Effekte hat ein Listing in /etc/shells?



1
Als allgemeine Information funktioniert das. Ich denke speziell aus der Perspektive der Systemadministration.
Michael Hampton

Nur als Hintergrund gedacht.
Dmourati

Antworten:


70

/bin/falseist 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 $? = 0unabhä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/nologinist ein BSD-Dienstprogramm, das sich ähnlich verhält wie /bin/false(gibt boolean false zurück), jedoch auch die Ausgabe druckt, was /bin/falseverboten 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/nologinin hat wenig Sinn /etc/shells. Der Standardeffekt von /etc/shellsist, die Programme aufzulisten, die für die Verwendung zulässig sind, chshwenn 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/nologinund /bin/falsein auflisten /etc/rsh, wodurch Benutzer mit diesen Shells chshin 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 sftpes ähnlich, aber sicher ist (und ähnliche Funktionen bietet). Auf einigen Websites wird /sbin/nologinder 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 scpwird nicht mit einer ungültigen Shell gearbeitet. scponlykann 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/nologinauf 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 -clwerden, fehl.

Zum Schluss die Antwort:

Um ein Konto zu deaktivieren, müssen Sie keines von beiden verwenden, setzen Sie die Shell jedoch zu /sbin/nologinInformationszwecken auf (es /sbin/nologinsei denn, in /etc/shells, zu welchem ​​Zeitpunkt sollten Sie welche verwenden /bin/false, sollten nicht sein). Setzen Sie stattdessen das Kennwortfeld /etc/passwdauf !, um sicherzustellen crypt, dass es für keine Kennwörter gültig ist. Stellen Sie den Hash auf /etc/shadowdie gleiche Weise ein, um Fehler zu vermeiden. passwd -lwerde 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.


9
Während diese Antwort perfekt die verschiedenen Optionen fasst (und beantwortet die Frage), fühlte ich die Notwendigkeit, eine nützliche Ressource für diesen Anwendungsfall zu zeigen, die zumindest in dem Standard -Debian - Repositories verfügbar ist, in dem titantoolsPaket: noshell. Diese Pseudo-Shell bietet Überwachungsfunktionen und protokolliert Syslog-Versuche, Konten noshellals Shell zu verwenden, ohne jedoch den Zugriff zuzulassen.
Dawud

1
Es ist keineswegs apokryphisch, aber bei Sysadmins eines bestimmten Jahrgangs (Husten) durchaus üblich, es /bin/falseals Anmeldeshell für Personen zu verwenden, die sich nicht anmelden sollten.
MadHatter,

2
Apokryphen in dem Sinne, dass es nicht der ursprüngliche Verwendungszweck ist. Ich sagte nicht anachronistisch; Ich sehe es jeden Tag :)
Falcon Momot

1
Das Deaktivieren des Kontos durch ein ungültiges Passwort funktioniert mit ssh nicht so gut. Wenn es dem Benutzer zuvor gelungen ist, die Authentifizierung mit öffentlichem Schlüssel einzurichten, kann er möglicherweise trotzdem darauf zugreifen.
Joshudson

3
sshd ist dokumentiert, um zu überprüfen, ob Konten, die auf bestimmte Weise gesperrt sind (Passwort-Hashes, die mit! beginnen, werden ausdrücklich erwähnt), auch wenn pubkey auth verwendet wird.
Falcon Momot

13

Nachdem Sie einige Nachforschungen angestellt haben, hängt die von Ihnen verwendete Methode davon ab, was Sie aussperren müssen. Wenn sich ein Benutzer mit diesem Set bei der Shell anmeldet, wird eine Meldung angezeigt, die darauf This account is currently unavailable.hinweist, dass Sie dies ändern können, indem Sie die Datei /etc/nologin.txtmindestens auf RHEL-Derivaten erstellen .

Wie Sie wissen, /bin/falseist keine Muschel. Sie funktioniert so, dass sie false zurückgibt, das sich unmittelbar nach dem Beenden der Binärdatei abmeldet. Beachten Sie, dass /bin/truedies den gleichen Effekt erzielen würde.

Bezüglich Ihrer FTP-Frage: Ja, Sie haben Recht, wenn die Shell so eingestellt ist, /sbin/nologindass Benutzer sich bei FTP anmelden können, während der Benutzer sich bei keinem Dienst anmeldet, /bin/falseoder dies /bin/truevollständig verhindert .

Daher /bin/falseoder /bin/trueist am besten , um einen Benutzer zu verhindern , dass in jeden Dienst anmelden, während /sbin/nologinnoch Benutzer erlauben , in Diensten anmelden andere als SSH oder lokale Konsole , während Feedback an den Benutzer , dass das Konto nicht aktiv ist und ist am besten, wenn nur SSH / local Konsole muss ausgesperrt werden.


2

Hat jemand versucht zu beweisen, dass / bin / false den FTP-Zugriff nicht zulässt?

Ich habe gerade die Shell meines Benutzers in / bin / false geändert und konnte problemlos FTP ausführen.

Ich benutze / dev / null, um den Benutzer vollständig zu sperren (naja, außer E-Mail, sie können immer noch POP3).


Hattest du es in /etc/shells? Wie ist Ihr FTP-Server konfiguriert?
Michael Hampton

Es gibt keine Regel, die besagt, dass ein Benutzer eine Shell benötigt, um sich bei einem FTP-Server anzumelden.
Petter H

Bei einigen FTP-Daemons ist dies nicht zulässig, bei anderen nicht. Die Funktionalität der verschiedenen Funktionen ist sehr unterschiedlich. Die klassische Implementierung wird den Zugriff auf alle Personen verweigern, die keine Shell haben, aber das bedeutet nicht, dass alle Implementierungen dies tun müssen.
Falcon Momot
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.