web-dev-qa-db-fra.com

Comment pourrais-je lister tous les super utilisateurs?

Je souhaite une commande permettant de répertorier tous les utilisateurs disposant des privilèges root, à savoir Sudo?

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

78
Maythux

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 est plus légère en calcul que toutes les autres commandes de cette commande. réponse):

grep -Po '^Sudo.+:\K.*$' /etc/group

Aussi, comme suggéré dans les commentaires de muru, le format des entrées dans /etc/group peut être facilement géré par cut:

grep '^Sudo:.*$' /etc/group | cut -d: -f4

De même, 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 imprimera tous les utilisateurs répertoriés dans le groupe Sudo dans /etc/group (le cas échéant).

Répartition de la commande n ° 1:

  • grep: Imprime toutes les lignes correspondant à une expression régulière dans un fichier
  • -P: fait correspondre grep aux expressions rationnelles de style Perl
  • o: permet à grep d’imprimer uniquement la chaîne correspondante
  • '^Sudo.+:\K.*$': fait en sorte que grep corresponde à l'expression régulière entre les guillemets

Répartition regex # 1:

  • 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 la ligne
  • .+: un ou plusieurs caractères
  • \K: ignorer la correspondance précédente
  • .*: zéro ou plusieurs caractères
  • $: fin de ligne

Répartition de la commande n ° 2:

  • grep: Imprime toutes les lignes correspondant à une expression régulière dans un fichier
  • '^Sudo.+:\K.*$': fait en sorte que grep corresponde à l'expression régulière entre les guillemets
  • cut: n'imprime qu'une section spécifiée de chaque ligne d'un fichier
  • -d:: permet à cut d'interpréter : en tant que délimiteur de champ
  • -f4: permet à cut d'imprimer uniquement le quatrième champ

Répartition regex # 2:

  • 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 la ligne
  • .*: zéro ou plusieurs caractères
  • $: fin de ligne
75
kos

Comme indiqué ici Je considère la méthode la plus simple pour découvrir les options -l & -U ensemble, il vous suffit de taper userspour obtenir la liste, par exemple: Johnname__, puis:

Si l'utilisateur a un accès Sudoname__, il affichera le niveau d'accès Sudopour 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 indiquera qu'un utilisateur est non autorisé à exécuter Sudosur localhost:

   Sudo -l -U John
   User John is not allowed to run Sudo on localhost.
28
JoKeR

Comme cela a déjà été dit, la réponse peut être trouvée sur nix & Linux Stack Exchange :

Cela montre que l'utilisateur "saml" est membre du groupe wheel.

$ 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 versions antérieures d'Ubuntu). Alors la commande devient:

getent group Sudo
11
Andrea Corbellini

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 ne figurent peut-être pas 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 renvoie pas une valeur de sortie non nulle dont nous pourrions tirer parti, nous sommes donc réduits à greper la sortie.

8
muru

Cette commande renvoie la liste des utilisateurs dotés 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 d'utilisateur à afficher, alors cette commande:

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

Commande -

cat group | grep Sudo

Sortie -

Sudo:x:27:Tom,Stacy

Tom, Stacy sont les utilisateurs avec les privilèges Sudo

0
XYZ

Sur la plupart des systèmes de type Unix, qui ont la commande Sudo et un fichier de configuration Sudo; lancer 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 de type Unix 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 d'administrateurs (adm) et le groupe 27 est le gid Sudo.

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

:~$ cat /etc/group

Un exemple de sortie, sur Ubuntu (mais pas sur Redhat, sur Oracle Solaris/Solaris ou sur des systèmes 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 constater, votre utilisateur est l'administrateur du système et membre du groupe 4 (adm). Mais votre utilisateur et mon frère sont tous deux membres du groupe 27, qui est le numéro de groupe (IDG) du groupe Sudo. Donc, mon frère peut également atteindre les privilèges root (super utilisateur).

De nombreux systèmes Linux comme Fedora et Slackware intègrent le groupe de roues gid = 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 qui est gid 0.

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

Par exemple:

:~$ id mybrother

Échantillon de sortie

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