Créez un nouveau compte appelé test
:
$ sudo useradd test
test
n'a pas de mot de passe pour le moment. Alors
$ su test
ne fonctionne pas. Si vous essayez, on vous demande un test
le mot de passe. Il n'en a pas. Ce n'est pas la même chose que son mot de passe vide, donc si vous entrez un mot de passe vide en appuyant sur Entrée, vous obtenez le message "su :Échec de l'authentification".
Il en va de même si vous passez à un tty et essayez de vous connecter en tant que test
:Un mot de passe vide n'est pas accepté.
Attribuez maintenant test
un mot de passe vide :
$ sudo passwd -d test
Vous pouvez maintenant vous connecter en tant que test
sur un tty en fournissant la chaîne vide comme mot de passe. Cependant, si vous essayez
$ su test
encore une fois, vous obtenez toujours le message "su:Échec de l'authentification" la session ne bascule pas vers l'utilisateur test
.
Pourquoi est-ce ?
Réponse acceptée :
À partir de la sortie de ldd /bin/su
, le su
le binaire est compilé avec le pam
bibliothèques (libpam*
), donc l'authentification, la gestion de compte, l'ouverture de session, etc. seront gérés par pam
.
Voici comment le su
d'un système Ubuntu typique est géré par pam
, vous devriez trouver une approche similaire si vous utilisez une autre distribution.
Le pam
règles pour su
sont définis dans le fichier /etc/pam.d/su
. Ce fichier inclut également le common-auth
, common-passwd
, common-session
fichiers du même répertoire que les modèles communs pour couvrir les tâches suggérées par leur nom (et utilisés dans d'autres pam
services activés).
Sur mon système, en bas de /etc/pam.d/su
j'ai :
@include common-auth
@include common-account
@include common-session
Les lignes précédentes ne traitent pas de la vérification du mot de passe nul, c'est principalement le travail de pam_unix
module.
Maintenant /etc/pam.d/common-auth
a :
auth [success=1 default=ignore] pam_unix.so nullok_secure
De man pam_unix
:
nullok
L'action par défaut de ce module est de ne pas autoriser l'utilisateur à accéder à un service si son mot de passe officiel est vide. L'argument nullok remplace cette valeur par défaut et permet à tout utilisateur avec un
mot de passe vide d'accéder au service.nullok_secure
L'action par défaut de ce module est de ne pas autoriser l'utilisateur à accéder à un service si son mot de passe officiel est vide. L'argument nullok_secure remplace cette valeur par défaut et permet à tout utilisateur
avec un mot de passe vide d'accéder au service tant que la valeur de PAM_TTY est définie sur l'une des valeurs trouvées dans /etc/securetty.
comme vous pouvez le voir si le nullok_secure
est définie, sauf si la variable d'environnement PAM_TTY
est défini de la manière mentionnée, l'utilisateur avec un mot de passe nul ne sera pas autorisé à se connecter en utilisant su
.
Donc, pour permettre à tout utilisateur avec un mot de passe nul de faire su
, vous devez avoir le nullok
argument du pam_unix
modules :
auth [success=1 default=ignore] pam_unix.so nullok
ceci n'est pas sécurisé car le common-auth
le fichier est utilisé par de nombreux autres services, même uniquement pour su
cela ne devrait pas être fait. (Pour des raisons de test, vous pouvez le définir une fois, puis revenir à l'original. Bien que si vous voulez faire le test, il est préférable d'incorporer toutes les logiques dans /etc/pam.d/su
fichier, et modifiez les modifications par la suite plutôt que de jouer avec n'importe quel common-*
fichier)