Lister les propriétés et autorisations d’un compte sous GNU/Linux
Sommaire
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.