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

169

Technisch gesehen kann, sofern nicht so konfiguriert pamist , dass Ihre Shell mit pam_shellskeiner dieser Optionen überprüft wird , die Anmeldung verhindert werden, wenn Sie nicht in der Shell sind. Auf meinem System sind sie sogar unterschiedlich groß, daher vermute ich, dass sie tatsächlich etwas tun. Was ist der Unterschied? Warum existieren beide? Warum sollte ich eins übereinander verwenden?

-rwxr-xr-x 1 root root  21K Feb  4 17:01 /bin/false
-rwxr-xr-x 1 root root 4.7K Mar  2 14:59 /sbin/nologin
Xenoterracid
quelle
Der Pfad /bin/falsesollte überall existieren, aber nicht /sbin/nologin: '/ sbin / nologin': Keine solche Datei oder kein solches Verzeichnis. Irgendeine Idee, warum es /usr/sbin/nologinstatt /sbin/nologinDebian und Ubuntu ist?
Taufe
4
Ich bin neugierig, warum / bin / false 21k Code benötigt, um einen "1" -Rückgabecode zurückzugeben! (und / sbin / nologin dauert nur 4,7k)
Mark Stewart
1
@ MarkStewart Ein bisschen zu spät, aber Sie möchten vielleicht lesen, warum wahr und falsch so groß sind? und ein Wirbelwind-Tutorial zum Erstellen von wirklich teensy ELF Executables für Linux .
nxnev
1
@nxnev Yeah hat nicht über den Overhead von ELF nachgedacht. Und aus meiner alten IBM-Zeit gab es ein Programm IEFBR14, das eine einfache Op-Code-Assembler-Anweisung war: BR 14 - Verzweige zu Register 14, wodurch das Programm mit dem Rückkehrcode beendet würde, der auf den Code in Register 14 gesetzt war!
Mark Stewart

Antworten:

198

Wenn /sbin/nologinals Shell festgelegt ist, erhalten Benutzer, die sich mit dieser Shell anmelden, die höfliche Nachricht "Dieses Konto ist derzeit nicht verfügbar". Diese Nachricht kann mit der Datei geändert werden /etc/nologin.txt.

/bin/falseist nur eine Binärdatei, die sofort beendet wird und beim Aufruf false zurückgibt. Wenn sich also jemand mit einer falseShell anmeldet, wird er beim falseBeenden sofort abgemeldet . Das Festlegen der Shell /bin/truehat den gleichen Effekt, dass niemand sich anmelden kann, falsewird jedoch wahrscheinlich als Konvention verwendet, trueda es viel besser ist, das Konzept zu vermitteln, dass eine Person keine Shell hat.

In der nologinManpage heißt es, dass es in 4.4 BSD (Anfang der 1990er Jahre) erstellt wurde, also kam es lange nachdem falsees erstellt wurde. Die Verwendung falseals Shell ist wahrscheinlich nur eine Konvention, die aus den Anfängen von UNIX übernommen wurde.

nologinist die benutzerfreundlichere Option, bei der dem Benutzer eine anpassbare Meldung angezeigt wird, die versucht, sich anzumelden, sodass Sie diese Option theoretisch verwenden möchten. aber beide nologinund falsewerden das gleiche Ergebnis haben, wenn jemand keine Shell hat und nicht in der Lage ist, sich einzuschalten.

Mark McKinstry
quelle
10
/usr/sbin/nologinfür Debian-basierte Distributionen.
Diemo
3
Zumindest protokolliert die BSD-Implementierung auch die Anmeldeversuche an syslog, wie in opensource.apple.com/source/system_cmds/system_cmds-735/… zu sehen , während / bin / false nichts protokollieren würde
Sergiy Kolodyazhnyy
28

Bei einigen FTP-Servern können Sie nur dann auf FTP zugreifen, wenn Sie über eine gültige Shell verfügen. /sbin/nologinwird als gültige Shell angesehen, /bin/falseist es aber nicht.

(Ich denke, "gültig" bedeutet, dass der Beendigungsstatus 0 ist, er /etc/shellskann aber auch eingegeben werden. Dies hängt wahrscheinlich vom System, der FTP-Software und Ihrer Konfiguration ab.)

Mikel
quelle
1
Ja, das ist wahrscheinlich ein Teil des FTP-Programms, das pam verwendet, und pam_shells, das, wie Sie sagten, prüft /etc/shells. Nur eine Vermutung ... Ich könnte mich irren.
Xenoterracide
4
Ich habe gerade Ubuntu 8.04 und 14.04 überprüft. Der Befehl nologin wird mit dem Status 1 "false" beendet, und weder "true" noch "false" oder "nologin" sind in / etc / shells enthalten. Wenn dies der Fall wäre, könnte ein Benutzer chsh verwenden, um eine solche Shell auszuwählen und sich von seinem Konto zu trennen.
Pinguin359
12

/bin/falseist ein Systembefehl, der immer dann verwendet wird, wenn Sie einen Befehl an ein Programm übergeben müssen, das nichts weiter tun soll, als mit einem Fehler zu beenden. Es ist der Begleiter zu /bin/true. Beide sind sehr alte und standardmäßige POSIX-Dienstprogramme und erzeugen per Definition keine Ausgabe. true wird manchmal für ein Shell-Skript verwendet, das eine Endlosschleife ausführen soll, z.

while true; do
    ...
    # Waste time
    if [ $wasted_time -gt 100000 ]; then
        exit 0
    fi
    ...
done

/usr/sbin/nologinwurde speziell entwickelt, um eine Shell zu ersetzen und erzeugt eine Ausgabe, bei der Sie sich nicht anmelden können. Früher war die Verwendung /bin/falsefür Dummy-Benutzer üblich, kann jedoch verwirrend sein, da der Benutzer nicht weiß, warum sie gestartet wurden.

penguin359
quelle
4
erwähnenswert /bin/trueund /bin/falsesind nicht immer das, was Sie in einem Shell-Skript erhalten. In zsh trueund falsesind bash/bin/*
Built
4

Auf meinem Computer wird nologinimmer dieselbe Meldung in Englisch angezeigt, wobei die Argumente ignoriert werden. /bin/falseantwortet auf --versionund --helpin der von angegebenen Sprache $LC_CTYPE. Abgesehen von diesen kosmetischen Unterschieden haben sie den gleichen Effekt.

In puncto nologinBenutzerfreundlichkeit ist es besser, wenn es für eine reale Person verwendet wird, die Englisch spricht. In Bezug auf die Sicherheit gibt es keinen Unterschied.

Gilles
quelle
4
Es scheint, als ob dies falseeher für Systemkonten gilt, die keinen echten Benutzer haben, und nologinfür deaktivierte Konten.
Xenoterracide
1
Was ist dein Betriebssystem? Die Centos- nologinVersion akzeptiert keine Argumente, kann jedoch Nachrichten von lesen /etc/nologin.txt.
Alexander Gonchiy
3

/ bin / false Nur Job ist das Beenden mit einem Exit-Code ungleich Null.

Probieren Sie es an der Kommandozeile aus:

$:> /bin/false
$:> echo $?
1
$:>

Einige Institutionen verwenden / bin / false im Shell-Feld der Passwortdatei. Wenn der Benutzer versucht, sich anzumelden, lautet die Shell / bin / false und wird sofort beendet

Shellter
quelle
2

Unter Linux /sbin/nologinstammt es aus dem Projekt util-linux , während /bin/falsees Teil von GNU Coreutils ist . Sie haben unterschiedliche Rollen, und nologin hat die Möglichkeit, eine Nachricht für Benutzer auszudrucken, die sich als Shell anmelden. Die Linux-Befehle stammen von BSD, wo sie eine lange Geschichte des Andersseins zu haben scheinen. Das FreeBSD gibt falseeinfach 1 zurück , während es nologinprüft, ob es auf einem TTY läuft, und bei Anmeldeversuchen eine Nachricht an syslog sendet. Die Linux-Versionen sind etwas komplizierter ( falseich nehme an, sie erledigen alle möglichen unterhaltsamen Dinge mit Internationalisierung für die Ausgabe von --help), verhalten sich aber im Wesentlichen genauso.

jsbillings
quelle
1

Sie könnten dasselbe Programm sein, aber sie haben unterschiedliche Bedeutungen. Der Programmname sagt alles.

  • / bin / false soll einen falschen Wert zurückgeben. Es wird als Programm ausgeführt.
  • / bin / nologin soll dem Benutzer anzeigen, dass für ein Konto keine Anmeldung zulässig ist. (Es wird eine Login-Shell verwendet.)
BillThor
quelle
-4

Beide erledigen mehr oder weniger den gleichen Job, sind jedoch /bin/falsefür nicht privilegierte Benutzer nützlich. Auf der anderen Seite /sbin/nologinist für privilegierte Benutzer.

Pythondetektiv
quelle
4
Oh, wie bist du zu diesem Schluss gekommen?
fpmurphy
Wahrscheinlich hat er nachgesehen /etc/passwd. Ich habe mir gerade /etc/passwdeine frisch installierte Debian-Strecke angesehen. In diesem Feld haben fast alle Systemkonten (Benutzer-IDs <1000) /usr/sbin/nologinals Shell, mit wenigen Ausnahmen. Bitte beachten Sie, dass ich mit der Antwort von @ pythondetective nicht einverstanden bin. Ich spekuliere nur, was ihn zu dieser Schlussfolgerung hätte führen können. Mein Kommentar ist allerdings etwas spät.
Binarus
Nein! Die Standardanmeldeshell ist nicht dasselbe wie die Berechtigungen.
MUY Belgium
kein großer "Detektiv"
Emobe