Comment pourrais-je lister tous les super utilisateurs?

58

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?

    
posée Maythux 20.04.2015 - 12:57
la source

6 réponses

59

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:

  • Tout caractère ou groupe de caractères non répertorié correspond au caractère ou au groupe de caractères lui-même
  • ^ : 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:

  • Tout caractère ou groupe de caractères non répertorié correspond au caractère ou au groupe de caractères lui-même
  • ^ : début de ligne
  • .* : zéro ou plusieurs caractères
  • $ : fin de ligne
réponse donnée kos 20.04.2015 - 13:57
la source
26

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.
    
réponse donnée JoKeR 20.04.2015 - 13:40
la source
10

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
    
réponse donnée Andrea Corbellini 20.04.2015 - 13:02
la source
6
En développant le test 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.

    
réponse donnée muru 20.04.2015 - 15:26
la source
1

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
    
réponse donnée A.B. 20.04.2015 - 13:12
la source
0

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)
    
réponse donnée oOpSgEo 08.06.2015 - 22:13
la source

Lire d'autres questions sur les étiquettes