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.