Je veux une commande pour répertorier tous les utilisateurs qui ont des privilèges root, par exemple sudo?
Supposons que je sois un utilisateur de sudoer. Comment pourrais-je connaître tous les autres utilisateurs de sudoer?
Si vous avez juste besoin de lister les sudoers listés dans le groupe sudo
, je pense que la meilleure façon de le faire serait d’exécuter cette commande (qui devrait être plus légère que toute autre les autres commandes de cette réponse):
grep -Po '^sudo.+:\K.*$' /etc/group
Comme suggéré dans les commentaires de muru, le format des entrées de /etc/group
peut être facilement traité par cut
:
grep '^sudo:.*$' /etc/group | cut -d: -f4
Toujours comme suggéré dans les commentaires de muru, on peut utiliser getent
à la place de grep
:
getent group sudo | cut -d: -f4
Chacune de ces commandes affichera tous les utilisateurs répertoriés dans le groupe sudo
dans /etc/group
(le cas échéant).
Panne de la commande n ° 1:
grep
: Imprime toutes les lignes correspondant à une expression régulière dans un fichier -P
: permet à grep
de correspondre aux expressions rationnelles de style Perl o
: fait que grep
imprime uniquement la chaîne correspondante '^sudo.+:\K.*$'
: fait que grep
corresponde à l'expression régulière entre les guillemets Regex # 1 ventilation:
^
: début de ligne .+
: un ou plusieurs caractères \K
: ignorer la correspondance précédente .*
: zéro ou plusieurs caractères $
: fin de ligne Panne de la commande n ° 2:
grep
: Imprime toutes les lignes correspondant à une expression régulière dans un fichier '^sudo.+:\K.*$'
: fait que grep
corresponde à l'expression régulière entre les guillemets cut
: Imprime uniquement une section spécifiée de chaque ligne dans un fichier -d:
: rend cut
interprète :
comme délimiteur de champ -f4
: permet à cut
d'imprimer uniquement le quatrième champ Regex # 2 ventilation:
^
: début de ligne .*
: zéro ou plusieurs caractères $
: fin de ligne Comme indiqué, ici je considérez la façon la plus simple de découvrir avec -l
& amp; -U
options ensemble, tapez simplement users
il listera par exemple: John
alors:
Si l'utilisateur dispose de sudo
access, il affichera le niveau d'accès sudo
pour cet utilisateur particulier:
sudo -l -U John
User John may run the following commands on this host:
(ALL : ALL) ALL
Si l'utilisateur n'a pas accès à sudo, il affichera qu'un utilisateur est non autorisé à exécuter sudo
sur localhost:
sudo -l -U John
User John is not allowed to run sudo on localhost.
Comme cela a déjà été dit, la réponse peut être trouvée sur Unix & amp; Linux Stack Exchange :
Cela montre que l'utilisateur "saml" est membre du groupe de roues.
$ getent group wheel wheel:x:10:saml
La seule différence est que le groupe dans Ubuntu n'est pas wheel
, mais sudo
(ou admin
dans les anciennes versions d'Ubuntu). La commande devient donc:
getent group sudo
sudo -l -U
, on peut utiliser getent passwd
pour déterminer les utilisateurs pouvant utiliser sudo
. L'utilisation de getent
nous permet d'accéder aux utilisateurs qui peuvent ne pas être présents dans le fichier passwd
, tels que les utilisateurs LDAP:
getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'
sudo -U
ne retourne pas une valeur de sortie non nulle dont nous pourrions tirer parti, nous sommes donc réduits à accepter la sortie.
Cette commande renvoie une liste d’utilisateurs possédant les droits sudo:
awk -F ":" '{ system("groups " " | 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 d'utilisateur à afficher, alors cette commande:
awk -F ":" '{ system("groups " " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print }' /etc/passwd
Sur la plupart des systèmes de type Unix, qui ont la commande sudo et qui ont un fichier de configuration sudo; en cours d'exécution visudo en tant que root:
:~$ sudo bash
ou
:~$ su
:~# visudo
permettra à un administrateur d’inspecter et de modifier les privilèges des groupes pouvant utiliser la commande sudo.
Sur les systèmes Unix basés sur Unix, 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 affectés à ces groupes, utilisez le fichier / etc / group comme indiqué ci-dessous:
:~$ cat /etc/group
Un exemple de résultat, sur Ubuntu (mais pas sur Redhat, basé sur Oracle Solaris / Solaris ou sur des systèmes basés sur BSD) produirait 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 constater, votre utilisateur est l'administrateur du système et membre de groupe 4 (adm). Mais votre utilisateur et mon frère sont tous deux membres du groupe 27, qui est le numéro d'identification du groupe sudo. Donc, mon frère peut également obtenir les privilèges root (super utilisateur).
De nombreux systèmes Linux comme Fedora et Slackware intègrent le gid du groupe de roues = 10. 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 de roues gid 0.
En outre, en utilisant la commande id, tout utilisateur peut trouver les informations de groupe d’un autre utilisateur connu sur le 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)
Lire d'autres questions sur les étiquettes command-line sudo