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)