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/nologin
stattdessen eine Shell von haben .
Ich sehe auf der Manpage, die /sbin/nologin
eine Nachricht an den Benutzer druckt, dass das Konto deaktiviert ist und dann beendet wird. /bin/false
Würde vermutlich nichts drucken.
Ich sehe auch, dass /sbin/nologin
in aufgeführt ist /etc/shells
, während /bin/false
nicht.
Die Handbuchseite besagt, dass FTP den Zugriff für Benutzer mit einer Shell deaktiviert, die nicht in aufgeführt ist, /etc/shells
und impliziert, dass andere Programme möglicherweise dasselbe tun. Bedeutet das, dass jemand mit einem Account, der /sbin/nologin
als 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
?
Antworten:
/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 Shellschsh
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 -
(AKAsu -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ührtsu -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 sicherzustellencrypt
, 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.quelle
titantools
Paket:noshell
. Diese Pseudo-Shell bietet Überwachungsfunktionen und protokolliert Syslog-Versuche, Kontennoshell
als Shell zu verwenden, ohne jedoch den Zugriff zuzulassen./bin/false
als Anmeldeshell für Personen zu verwenden, die sich nicht anmelden sollten.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.txt
mindestens auf RHEL-Derivaten erstellen .Wie Sie wissen,
/bin/false
ist keine Muschel. Sie funktioniert so, dass sie false zurückgibt, das sich unmittelbar nach dem Beenden der Binärdatei abmeldet. Beachten Sie, dass/bin/true
dies den gleichen Effekt erzielen würde.Bezüglich Ihrer FTP-Frage: Ja, Sie haben Recht, wenn die Shell so eingestellt ist,
/sbin/nologin
dass Benutzer sich bei FTP anmelden können, während der Benutzer sich bei keinem Dienst anmeldet,/bin/false
oder dies/bin/true
vollständig verhindert .Daher
/bin/false
oder/bin/true
ist am besten , um einen Benutzer zu verhindern , dass in jeden Dienst anmelden, während/sbin/nologin
noch 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.quelle
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).
quelle
/etc/shells
? Wie ist Ihr FTP-Server konfiguriert?