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 ?
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 ?
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)
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
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
.
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 ]
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.