Lister les propriétés et autorisations d’un compte sous GNU/Linux

I. Présentation

Très souvent sur GNU/Linux, il est nécessaire de connaître à quelle personne le compte est associé, quel est le profil de cette personne, de quel(s) droit(s) le compte en question dispose-t-il. Je vous propose ici de détailler l’ensemble des moyens permettant d’identifier l’ensemble de ces informations. Au cours de ce tutoriel, nous verrons les techniques suivantes permettant de :

  • Lister les comptes
  • Lister les caractéristiques d’un compte en particulier
  • Vérifier les délégations d’un compte en particulier
  • Lister les autorisations d’accès SSH de ce même compte

II. Les bases internes de comptes

Le système GNU/Linux possède un certain nombre de bases internes de référence, permettant de connaître à la fois les comptes utilisateurs, les groupes associés ainsi que leurs droits respectifs. Ces bases peuvent être facilement interrogées grâce à la commande getent.

Cette dernière permet de rechercher au sein de la base de référence correspondante : /etc/passwd, /etc/group ou /etc/shadow les caractéristique d’un ou plusieurs comptes.

ATTENTION : l’interrogation de la base /etc/shadow ne peut fonctionner que depuis le compte root. Il est notamment possible de consulter les comptes dont le mot de passe n’a pas été défini. Il s’agit des enregistrements s’affichant avec le caractère ‘ !’ au niveau du champ du mot de passe.

Par exemple, l’interrogation du fichier /etc/passwd fournit la liste des enregistrements de ce fichier (et donc, des comptes existants sur le système), sous la forme suivante :

Bien évidemment, il est à tout à fait possible de faire afficher uniquement les caractéristiques d’un compte ou d’un utilisateur en particulier :

RAPPEL : le champ /bin/bash correspond au type de Shell utilisé. Celui-ci doit être défini dans le fichier /etc/shells pour pouvoir être mentionné au sein du fichier /etc/passwd. Le séparateur de champ au sein des fichiers de comptes est le caractère ‘ :’ et le second champ correspond au champ du mot de passe. Le ‘x’ signifie que celui-ci est chiffré et stocké dans le fichier /etc/shadow.

On peut facilement modifier ces propriétés grâce à la commande usermod et les options associées à cette commande :

  • -g pour changer le groupe primaire
  • -G pour ajouter des groupes secondaires
  • -c pour modifier le commentaire associé au compte
  • -s pour modifier le type de Shell utilisé
  • -u pour modifier le n° de compte

III. Lister les caractéristiques d'un compte particulier

Maintenant que l’on sait interroger les bases de comptes internes, on peut également chercher à préciser les caractéristiques d’un compte en particulier. Pour se faire, on utilisera alors l’instruction id. Sans aucune option, cette commande permet de lister l’ensemble des caractéristiques d’un compte, de son uid, de son gid ainsi que de ses groupes primaires et secondaires. Cela revient à interroger la base de comptes internes /etc/passwd avec la commande getent précédente, mais avec une présentation différente :

$ id phil
uid=1000 (phil) gid=1000 (phil) groupes=1000 (phil), 120 (users)

Cet ensemble d’informations vient conforter celles que l’on a pu visualiser précédemment en interrogeant la ou les bases de comptes NSS, au travers des fichiers /etc/passwd, /etc/group ou /etc/shadow.

RAPPEL : on peut également vérifier la cohérence des déclarations de comptes du fichier /etc/passwd en exécutant la commande pwck.

 

IV. Vérifier les délégations d'un compte

Sur des systèmes un tant soit peu protégé, en général, le compte root est désactivé (à l’instar des distributions Debian et Ubuntu like) et on utilise alors les comptes utilisateurs avec des délégations d’accès, aussi appelées sudoers. Le fichier de configuration s’édite grâce à la commande visudo.

Dès lors qu’un utilisateur possède une ou plusieurs délégations d’accès à des commandes privilégiées, on peut bien sûr éditer le fichier de règles (via la commande visudo) ou simplement se connecter sous le compte utilisateur en question et exécuter la commande suivante :

$ sudo -l
Entrées par défaut pour phil sur mysrv01 :
  Insults

L’utilisateur phil peut utiliser les commandes suivantes sur mysrv01 :
(root) NOPASSWD : /usr/bin/tee -a /etc/hosts, /usr/local/scripts/manage_dsh.sh,/usr/bin/vi -Z /etc/dhcp/dhcpd.conf
(ALL) NOPASSWD: ALL

Bien évidemment, on constate ici que l’utilisateur phil peut se connecter sans saisie de mot de passe (règle (ALL) NOPASSWD : ALL). Mais, la plupart du temps, si l’on souhaite sécuriser son système, il est fortement conseillé de forcer la saisie du mot de passe de l’utilisateur.

V. Lister les autorisations d'accès SSH

Enfin, on peut aussi interroger les différents accès autorisés sur des serveurs distants pour le compte de l’utilisateur concerné, au travers du protocole SSH. Pour se faire, on doit se placer sur le répertoire $HOME/.ssh du compte de l’utilisateur, et exécuter l’instruction suivante :

$ ssh-keygen -lf authorized_keys

En tout état de cause, cela devrait nous retourner l’ensemble des clés publiques (placées dans le fichier $HOME/.ssh/authorized_keys), pour lesquelles l’accès distant du compte en question est autorisé à se connecter aux serveurs associés à la clé publique mentionnée sous la forme ci-dessous :

$ ssh-keygen -lf authorized_keys
2048 SHA256: BHylkdmlskdfYK4987JF+MPdfj476… no comment (RSA)
2048 SHA256: VYh4876+XcrZ098Nn0746+peszXX… no comment (RSA)
…

En résumé, pour autoriser un compte à accéder en SSH à une machine particulière, il suffit de créer ce compte sur cette même machine et d’y placer la clé publique (récupérée lors d’une création via ssh-keygen d’une paire de clés {privée, publique}, ou via la copie de sa clé publique à l’aide de la commande ssh-copy-id), dans le fichier authorized_keys du compte à accréditer.

VI. Conclusion

Ces techniques que nous venons de lister ne sont bien sûr pas exhaustives et peuvent être complétées par de nombreuses autres méthodes d’interrogation de comptes et de leurs propriétés. Mais, cela a le mérite de permettre de récupérer les principales fonctions et autorisations d’un compte utilisateur sans trop d’effort ni de commandes compliquées.

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

Philippe PIERRE

A exercé de nombreuses années en tant qu'administrateur de base de données et comme administrateur Système Unix/Linux. Il a enseigné les réseaux au CNAM (Paris). Aujourd'hui, employé en tant qu'ingénieur infrastructure, au sein d'un laboratoire pharmaceutique et administrant un cluster de calculs HPC, il connaît parfaitement les environnements GNU/Linux dans le cadre d'une entreprise et des systèmes de haute disponibilité. Il aime partager son expérience.

Nombre de posts de cet auteur : 69.Voir tous les posts

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.