Erstellen Sie ein neues Konto namens test
:
$ sudo useradd test
test
hat gerade kein Passwort. Also
$ su test
funktioniert nicht. Wenn Sie es versuchen, werden Sie nach test
gefragt 's Passwort. Es hat keine. Das ist nicht dasselbe wie ein leeres Passwort. Wenn Sie also ein leeres Passwort eingeben, indem Sie die Eingabetaste drücken, erhalten Sie die Meldung „su:Authentication failure“.
Dasselbe gilt, wenn Sie zu einem tty wechseln und versuchen, sich als test
anzumelden :Ein leeres Passwort wird nicht akzeptiert.
Weisen Sie nun test
zu ein leeres Passwort:
$ sudo passwd -d test
Sie können sich jetzt als test
anmelden auf einem tty, indem Sie den leeren String als Passwort angeben. Wenn Sie es jedoch versuchen
$ su test
Auch hier erhalten Sie immer noch die Meldung „su:Authentication failure“, die Sitzung wechselt nicht zum Benutzer test
.
Warum ist das so?
Akzeptierte Antwort:
Aus der Ausgabe von ldd /bin/su
, der su
Binary wird mit pam
kompiliert Bibliotheken (libpam*
), also werden Authentifizierung, Kontoverwaltung, Sitzungsinitiierung usw. von pam
verwaltet .
Im Folgenden wird die su
eines typischen Ubuntu-Systems beschrieben wird von pam
verwaltet , sollten Sie einen ähnlichen Ansatz finden, wenn Sie eine andere Distribution verwenden.
Die pam
Regeln für su
sind in der Datei /etc/pam.d/su
definiert . Diese Datei enthält auch den common-auth
, common-passwd
, common-session
Dateien aus dem gleichen Verzeichnis wie allgemeine Vorlagen zum Abdecken der Aufgaben, die ihr Name vermuten lässt (und in anderen pam
aktivierte Dienste).
Auf meinem System am Ende von /etc/pam.d/su
Ich habe:
@include common-auth
@include common-account
@include common-session
Die vorangegangenen Zeilen befassen sich nicht mit der Überprüfung des Null-Passworts, es ist hauptsächlich die Aufgabe von pam_unix
Modul.
Jetzt /etc/pam.d/common-auth
hat:
auth [success=1 default=ignore] pam_unix.so nullok_secure
Von man pam_unix
:
nullok
Die Standardaktion dieses Moduls besteht darin, dem Benutzer keinen Zugriff auf einen Dienst zu gewähren, wenn sein offizielles Passwort leer ist. Das nullok-Argument überschreibt diesen Standard und erlaubt jedem Benutzer mit einem
leeren Passwort, auf den Dienst zuzugreifen.
nullok_secure
Die Standardaktion dieses Moduls besteht darin, dem Benutzer keinen Zugriff auf einen Dienst zu gewähren, wenn sein offizielles Passwort leer ist. Das nullok_secure-Argument überschreibt diesen Standard und erlaubt jedem Benutzer
mit einem leeren Passwort, auf den Dienst zuzugreifen, solange der Wert von PAM_TTY auf einen der in /etc/securetty gefundenen Werte gesetzt ist.
wie Sie sehen können, ob nullok_secure
Option gesetzt ist, es sei denn die Umgebungsvariable PAM_TTY
auf die erwähnte Weise eingestellt ist, wird es dem Benutzer mit Null-Passwort nicht gestattet, sich mit su
anzumelden .
Also, um jedem Benutzer mit Null-Passwort zu erlauben, su
zu tun , müssen Sie den nullok
haben -Argument für pam_unix
Modul:
auth [success=1 default=ignore] pam_unix.so nullok
dies ist unsicher wie der common-auth
Datei wird von vielen anderen Diensten verwendet, sogar nur für su
Dies sollte nicht getan werden. (Zu Testzwecken können Sie es einmal einstellen und dann auf das Original zurücksetzen. Wenn Sie den Test jedoch durchführen möchten, ist es besser, die gesamte Logik in /etc/pam.d/su
zu integrieren Datei, und ändern Sie danach alle Änderungen, anstatt mit common-*
herumzuspielen Datei)