Comment lister tous les utilisateurs avec root?

35

Sur une boîte Linux, comment puis-je lister tous les utilisateurs qui ont des privilèges root (et même mieux, tous les utilisateurs en général avec s'ils ont root ou non)?

Eric
la source
1
Pouvez-vous être plus précis quant à ce que vous entendez par "privilèges root"? Vous voulez dire les utilisateurs avec UID = 0?
Chris S
Les utilisateurs ayant la capacité de faire n'importe quoi. Fondamentalement, je dois répertorier les utilisateurs avec les groupes dont ils sont membres si cela est possible.
Eric
2
Si je savais où se trouvait votre ordinateur, je pourrais marcher et tirer le cordon d'alimentation. Cela serait qualifié de "faire n'importe quoi", ce qui signifie que je suis sur votre liste. Rafiq a répertorié les trois choses les plus courantes, mais il pourrait y en avoir plus et nous savons ce qu’il en est de votre système ou de sa configuration.
Chris S

Réponses:

42

N'oubliez pas de changer le mot de passe root. Si un utilisateur a l'UID 0 en plus de root, il ne le devrait pas. Mauvaise idée. Vérifier:

grep 'x:0:' /etc/passwd

Encore une fois, vous ne devriez pas faire cela, mais pour vérifier si l'utilisateur est membre du groupe racine:

grep root /etc/group

Pour voir si quelqu'un peut exécuter des commandes en tant que root, vérifiez dans sudoers:

cat /etc/sudoers

Pour vérifier le bit SUID, qui permet aux programmes d'être exécutés avec les privilèges root:

find / -perm -04000

Warner
la source
Strictement, ce premier ne fonctionne que si le fichier de mot de passe shadow est en mode utilisateur. Je conviens qu'il en est presque toujours ainsi, mais au cas où je
ferais
4
Ceci est un meilleur modèle que le premier: grep '[^:]*:[^:]*:0:' /etc/passwd. +1 en particulier pour vérifier le SUID.
pause jusqu'à nouvel ordre.
33

Pour voir qui est l'UID 0:

getent passwd 0

Pour voir qui est en groupe root, wheel admet admin:

getent group root wheel adm admin

Pour lister tous les utilisateurs et les groupes dont ils sont membres:

getent passwd | cut -d : -f 1 | xargs groups
En pause jusqu'à nouvel ordre.
la source
9
Contrairement à toutes les autres réponses qui reposent à tort sur le fichier / etc / passwd, celle-ci, qui utilise getent passwdplutôt, est en fait correcte. N'oubliez pas de vérifier / etc / sudoers.
mardi
Merci pour cela. Beaucoup plus clair. Pour moi c'est la réponse acceptée.
Fiddy Bux Le
6

La racine pure est l'ID utilisateur "0".

Tous les utilisateurs du système se trouvent dans le fichier / etc / passwd:

less /etc/passwd

Ceux qui sont root ont "0" comme identifiant d'utilisateur, qui est la 3ème colonne. Ceux avec "0" comme groupe (4ème colonne) peuvent aussi avoir des privilèges root.

Ensuite, vous voudrez regarder les groupes et voir qui est un membre supplémentaire des groupes "root" ou "wheel" ou "admin":

less /etc/group

Les utilisateurs répertoriés dans ces groupes peuvent disposer de certains privilèges root, notamment via la commande "sudo".

La dernière chose que vous voudrez vérifier est la configuration "sudo" et voir qui est répertorié comme ayant l'autorisation de lancer cette commande. Ce fichier lui-même est bien documenté, je ne le reproduirai donc pas ici:

less /etc/sudoers

Cela couvre les principaux domaines de qui pourrait avoir un accès root.

Rafiq Maniar
la source
Voir aussi serverfault.com/questions/205598/… pour quelques emplacements supplémentaires où des droits d' élévation de privilèges peuvent être accordés. (À savoir, consolehelperet PackageKit.)
mattdm
2
Tous les utilisateurs ne sont certainement PAS garantis d'être dans / etc / passwd. Ils peuvent être dans LDAP, par exemple. Mais getent passwddoit lister tous les utilisateurs du système (y compris root), au format passwd, quelle que soit la base de données où ils sont définis.
mardi
3

Pour imprimer tous les utilisateurs

perl -n -e '@user = split /:/ ; print "@user[0]\n";' < /etc/passwd

Pour n'imprimer que les utilisateurs avec l'UID 0, comme d'autres l'ont déjà dit, les utilisateurs avec les privilèges root implicites:

perl -n -e '@user = split /:/ ; print "@user[0]\n" if @user[2] == "0";' < /etc/passwd
MadHatter soutient Monica
la source
C'est un bon choix, mais soyez conscient des limitations (je suis sûr que MadHatter est déjà au courant de cela) - cela ne vérifiera pas les groupes et les Sudoers. Il ne fera que vérifier, comme il le dit, la racine implicite.
Rafiq Maniar
2
Ne pas analyser / etc / passwd. Les utilisateurs peuvent être définis ailleurs. Utilisez à la getent passwdplace. Pour votre premier exemple "print all users", essayez plutôt ceci:getent passwd | perl -naF: -e 'print "$F[0]\n"'
mivk
2

Pour une liste rapide de tous les utilisateurs, essayez d'appuyer deux fois sur tab (pour compléter automatiquement) après avoir tapé la passwdcommande suivie d'un espace. Cela fonctionne aussi avec la sucommande.

Doit être fait en tant qu'utilisateur root.

Emeraldo
la source
Est-ce une caractéristique spécifique à zsh? Bash suggère uniquement des fichiers sur openSUSE.
Jgillich
Testé sur Debian (Squeeze) à Bash. Je ne crois pas que quiconque soutiendrait officiellement cela, mais c'est un raccourci.
Emeraldo
Mise à jour: Cela ne fonctionne plus à El Capitan. Il a probablement été corrigé pour des raisons de sécurité.
Emeraldo
0

Cela m'ennuyait qu'il n'y ait pas de réponse à une ligne ... Si vous souhaitez répertorier tous les comptes UID 0 (racine), utilisez les éléments suivants:

cat /etc/passwd | cut -f1,3,4 -d":" | grep"0:0" | cut -f1 -d":" | awk '{print $1}'

Meilleur,

Boschko
la source