131 votes

Comment pourrais-je lister tous les super utilisateurs ?

Je veux une commande pour lister tous les utilisateurs qui ont les privilèges root, c'est-à-dire sudo ?

Supposons que je suis un utilisateur sudoer. Comment pourrais-je connaître tous les autres utilisateurs sudoer ?

3voto

oOpSgEo Points 541

Sur la plupart des systèmes de type Unix, qui disposent de la commande sudo et d'un fichier de configuration sudo, l'exécution de visudo en tant que root :

:~$ sudo bash

oder

:~$ su

:~# visudo

permettra à un administrateur d'inspecter et de modifier les privilèges des groupes qui peuvent utiliser la commande sudo.

Sur les systèmes Unix-like basés sur Debian, comme Ubuntu, les groupes 4 et 27 ont généralement des droits d'accès aux privilèges sudo.

Le groupe 4 est le groupe administrateur (adm) et le groupe 27 est le sudo gid.

Pour voir quels utilisateurs sont actuellement assignés à ces groupes, regardez le fichier /etc/group comme indiqué ci-dessous :

:~$ cat /etc/group

Un exemple de sortie, sur Ubuntu (mais pas sur les systèmes basés sur Redhat, Oracle Solaris/Solaris, ou BSD) donnerait ceci :

adm:x:4:youruser
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9: 
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:youruser,mybrother
floppy:x:25:
tape:x:26:
sudo:x:27:youruser,mybrother

Comme nous pouvons le dire, votre utilisateur est l'administrateur du système, et membre de groupe 4 (adm). Mais youruser et mybrother sont tous deux membres du groupe 27, qui est le numéro gid (identification du groupe) du groupe sudo. Ainsi, mybrother peut également obtenir les privilèges de root (super utilisateur).

De nombreux systèmes linux, comme Fedora et Slackware, intègrent le groupe wheel gid=10. Ce qui autorise les privilèges d'administrateur lorsque la commande sudo est appliquée. Sur les systèmes basés sur BSD (par exemple FreeBSD), l'utilisateur root est membre du groupe wheel qui est gid 0.

De même, en utilisant la commande id, tout utilisateur peut trouver les informations sur le groupe d'un autre utilisateur connu du système.

Par exemple :

:~$ id mybrother

Exemple de sortie

uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)

1voto

A.B. Points 84870

Cette commande renvoie une liste d'utilisateurs ayant des droits sudo :

awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' /etc/passwd

La sortie est (par exemple) :

<username> : <username> adm cdrom sudo dip plugdev lpadmin sambashare docker

Si seul le nom de l'utilisateur doit être affiché, alors cette commande :

awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print $1 }' /etc/passwd

0voto

krubo Points 930

J'étais perplexe quant à la façon dont le vagrant l'utilisateur peut utiliser sudo même sans être mentionné dans /etc/sudoers ni dans /etc/group ni trouvé avec getent .

Il s'avère que sudo lit également les entrées de tous les fichiers sous /etc/sudoers.d/ . Donc, si vous n'avez pas regardé dans ce répertoire, vous ne réalisez peut-être pas combien d'utilisateurs ont en fait sudo accès.

Ce genre de sudo l'accès peut être détecté par la réponse de JoKeR en utilisant sudo -l -U vagrant mais n'est pas détecté par aucune des autres réponses ici qui reposent toutes sur soit getent oder /etc/group .

0voto

Eduardo Lucio Points 214

Basé sur les réponses de @muru et @kos, mais avec quelques optimisations.

Le site getent group sudo ne liste que les utilisateurs qui ont le groupe sudo. Le reste des commandes testent si l'utilisateur est réellement capable de s'exécuter en tant que root. Il y a aussi d'autres ajouts pour améliorer le formatage de la sortie.

COMMANDE

if [ -z $(getent group sudo) ]; then printf "\n >>>>>>>>>>> NO ENTRIES <<<<<<<<<<<\n\n"; 
else getent group sudo | 
sed 's/.*://' | 
sed 's/,/\n/g' | 
xargs -L1 sudo -l -U | 
grep -v 'not allowed' | 
sed 's/Matching Defaults entries/\n >>>>>>>>>>> CAN RUN COMMANDS AS ROOT >>>>>>>>>>>\n\nMatching Defaults entries/g' | 
sed '$a\\'; fi

SORTIE

 >>>>>>>>>>> CAN RUN COMMANDS AS ROOT >>>>>>>>>>>

Matching Defaults entries for may_user_i on localhost:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User may_user_i may run the following commands on localhost:
    (ALL) ALL
    (ALL) ALL

 >>>>>>>>>>> CAN RUN COMMANDS AS ROOT >>>>>>>>>>>

Matching Defaults entries for may_user_ii on localhost:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User may_user_ii may run the following commands on localhost:
    (ALL) ALL

Merci ! =D

[Réf : https://askubuntu.com/a/611607/134723 , https://askubuntu.com/a/611646/134723 , https://unix.stackexchange.com/a/136798/61742 , https://unix.stackexchange.com/a/26639/61742 ]

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X