PWCK : Vérifier l’intégrité des fichiers passwd et shadow

I. Présentation

La commande pwck (password check) est relativement peu connue des sysadmins Linux. Elle est pourtant utile car elle permet de vérifier l'intégrité, c'est à dire la structure, la validité, des fichiers /etc/passwd, /etc/group et /etc/shadow.

Au gré des utilisations, des créations et des suppressions de compte, ces fichiers peuvent devenir incohérents et contenir des données obsolètes ou mal formatées.

Ces données peuvent par exemple être :

  • un nombre incorrect de champs dans les fichiers
  • un nom d’utilisateur unique
  • un login shell valide
  • un home déclaré et non existant

Vous l'aurez compris, la commande pwck permet de vérifier ces informations et de fournir un "topo" de l'intégrité de ces fichiers. Son utilisation est relativement simple.

II. utilisation de PWCK

Pour commencer, nous allons exécuter PWCK en read-only. Il faut savoir que pour certaines informations, pwck propose de faire la modification. Exemple : suppression des utilisateurs ayant un nombre de champ incorrect.

Note : Les fichiers /etc/passwd et /etc/shadow ont une structure très claire qui doit être respectée. La structure est définie un certains nombre de champs qui sont séparés par ":".

Bien, pour utiliser cette commande, rien de plus simple (n'oubliez pas l'option "-r" pour read-only !) :

root@debian:~# pwck -r

Voici une sortie possible :

utilisateur lp : le répertoire « /var/spool/lpd » n'existe pas
utilisateur news : le répertoire « /var/spool/news » n'existe pas
utilisateur uucp : le répertoire « /var/spool/uucp » n'existe pas
utilisateur list : le répertoire « /var/list » n'existe pas
utilisateur irc : le répertoire « /var/run/ircd » n'existe pas
utilisateur gnats : le répertoire « /var/lib/gnats » n'existe pas
utilisateur nobody : le répertoire « /nonexistent » n'existe pas
utilisateur systemd-resolve : le répertoire « /run/systemd/resolve » n'existe pas
utilisateur pulse : le répertoire « /var/run/pulse » n'existe pas
utilisateur speech-dispatcher : le répertoire « /var/run/speech-dispatcher » n'existe pas
utilisateur saned : le répertoire « /var/lib/saned » n'existe pas
utilisateur usbmux : le répertoire « /var/lib/usbmux » n'existe pas
utilisateur test01 : le répertoire « /home/test01 » n'existe pas
utilisateur test22 : le répertoire « /home/test22 » n'existe pas
utilisateur test222 : le répertoire « /home/test222 » n'existe pas
utilisateur test02 : aucun groupe 1004
utilisateur test02 : le répertoire « /home/test02 » n'existe pas
utilisateur test03 : aucun groupe 1005
entrée non valable dans le fichier des mots de passe
effacer la ligne « test04:x:1006:1007:/home/test04:/bin/sh » ? Non
aucune entrée correspondante dans le fichier des mots de passe /etc/passwd
effacer la ligne « test04:!:17056:0:99999:7::: » ? Non
pwck : aucun changement

Plusieurs alertes sont ici remontées :

  • Des utilisateurs définis avec des /home qui n'existent pas
  • un utilisateur avec un nombre incorrect de champ
  • un groupe associé à "test02" manquant dans le fichier /etc/group

Pour le dernier point, il faut savoir que lorsqu'un utilisateur UNIX est créé, un groupe est créé également avec la valeur de son UID (User Identifier). Cela permet d'avoir un groupe propre à chaque utilisateur.

On remarque également que pwck propose la suppression de cet utilisateur "test02" (réponse automatique à "non" grâce au read-only). En cas de non utilisation de l'option "-r". Vous aurez la possibilité de répondre "oui" afin de supprimer l'utilisateur en question.

J'espère que ce tutoriel vous sera utile, n'hésitez pas à partager vos avis dans les commentaires.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Fondateur d'IT-Connect.fr et d'Information-security.fr. Auditeur sécurité chez Amossys.

    mickael a publié 475 articles sur IT-Connect.See all posts by mickael

    Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *