Désactiver su lorsque root est sans mot de passe

Sous une distribution Linux telle CentOS où l’utilisateur root est activé, il est possible pour un utilisateur lambda de devenir super-utilisateur en tapant simplement su y compris lorsque celui-ci est actif et sans mot de passe :

# On vire le mot de passe root (si existant)
passwd -d root
# Changement pour un utilisateur lambda
su - test
# En tant que test, on exécuter id via su :
su -c 'id'
# Résultat :
uid=0(root) gid=0(root) groups=0(root)

Plutôt problématique non ?

Pour s’en prémunir, plusieurs solutions s’offrent à nous :

  • Définir un mot de passe à root
  • Interdire l’utilisation d’un mot de passe vide avec su :
    • Depuis SSH
    • Globalement
  • Limiter l’utilisation de su à un groupe donné (wheel généralement)
  • Désactiver carrément su

Je passe sur comment définir un mot de passe…

Interdire l’utilisation d’un mot de passe vide avec su

L’utilisation de su est possible car, dans la configuration de PAM, pam_unix a par défaut l’option nullok.

Pour modifier ce comportement uniquement à un accès via SSH, on utilise le module pam_securetty en l’ajoutant avant pam_unix dans les fichiers etc/pam.d/system-auth et /etc/pam.d/password-auth :

auth        required      pam_env.so
auth        required      pam_securetty.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

pam_securetty va en fait aller lire /etc/securetty et regarder depuis quel périphérique se fait l’accès. Par défaut, l’accès console est ainsi autorisé.

Pour modifier le comportement de façon globale, deux lignes sont à ajouter dans /etc/pam.d/su (ce sont les deux du milieu) :

auth        sufficient      pam_rootok.so
auth        [default=1 success=ignore] pam_succeed_if.so uid eq 0
auth        required pam_unix.so try_first_pass
auth        substack        system-auth

Quelques explications :

  • pam_succeed_if permet de sauter des règles suivant des conditions. Ici, on lui indique que, lorsque l’UID est à 0 (root), on passe à la ligne suivante (success=ignore) sinon on saute une ligne (default=1).
  • pam_unix.so try_first_pass va faire l’authentification de l’utilisateur root sans l’option nullok, donc mot de passe obligatoire.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s