Come elenco tutti gli utenti con root?


35

Su una scatola di Linux, come posso elencare tutti gli utenti che hanno i privilegi di root (e ancora meglio, tutti gli utenti in generale con se hanno root o no)?


1
Puoi essere più specifico su cosa intendi per "privilegi di root"? Intendi gli utenti con UID = 0?
Chris S,

Utenti che hanno la possibilità di fare qualsiasi cosa. Fondamentalmente - se è possibile, devo elencare gli utenti insieme ai gruppi di cui sono membri.
Eric,

2
Se sapessi dov'era il tuo computer, potrei camminare e tirare il cavo di alimentazione. Ciò si qualificherebbe come "fare qualsiasi cosa", il che significa che sono nella tua lista. Rafiq ha elencato le tre cose più comuni, ma potrebbero essercene di più e sappiamo che il tuo sistema o come è configurato.
Chris S,

Risposte:


42

Non dimenticare di cambiare la password di root. Se un utente ha UID 0 oltre a root, non dovrebbe. Cattiva idea. Controllare:

grep 'x:0:' /etc/passwd

Ancora una volta, non dovresti farlo ma per verificare se l'utente è un membro del gruppo radice:

grep root /etc/group

Per vedere se qualcuno può eseguire comandi come root, controlla sudoers:

cat /etc/sudoers

Per verificare il bit SUID, che consente ai programmi di essere eseguiti con i privilegi di root:

find / -perm -04000


In senso stretto, quello primo funziona solo se il file della password shadow è nell'utente. Sono d'accordo che quasi sempre lo è, in questi giorni, ma per ogni evenienza, ho fatto un rapido lavoro perl che controlla esplicitamente il campo 3.
MadHatter supporta Monica il

4
Questo è un modello migliore rispetto al primo: grep '[^:]*:[^:]*:0:' /etc/passwd. +1 in particolare per il controllo del SUID.
In pausa fino a nuovo avviso.

33

Per vedere chi è UID 0:

getent passwd 0

Per vedere chi è in gruppo root, wheel adme admin:

getent group root wheel adm admin

Per elencare tutti gli utenti e i gruppi di cui sono membri:

getent passwd | cut -d : -f 1 | xargs groups

9
A differenza di tutte le altre risposte che si basano erroneamente sul file / etc / passwd, questa, usando getent passwdinvece, è effettivamente corretta. Basta non dimenticare di controllare / etc / sudoers.
marzo

Grazie per questo. Molto più chiaro Per me questa è la risposta accettata.
Fiddy Bux,

6

La radice pura è l'id utente "0".

Tutti gli utenti nel sistema sono nel file / etc / passwd:

less /etc/passwd

Coloro che sono root hanno "0" come ID utente, che è la terza colonna. Quelli con "0" come gruppo (4a colonna) possono anche avere alcuni privilegi di root.

Successivamente, ti consigliamo di guardare i gruppi e vedere chi è un membro aggiuntivo dei gruppi "root" o "wheel" o "admin":

less /etc/group

Gli utenti elencati in questi gruppi potrebbero avere alcuni privilegi di root, in particolare tramite il comando "sudo".

L'ultima cosa che vorrai controllare è la configurazione "sudo" e vedere chi è elencato come autorizzato ad eseguire questo comando. Questo file stesso è ben documentato, quindi non lo riprodurrò qui:

less /etc/sudoers

Questo riguarda le aree principali di chi potrebbe avere accesso come root.


Vedi anche serverfault.com/questions/205598/… per alcuni altri posti in cui è possibile concedere i diritti di escalation di privilegi. (Vale a dire, consolehelpere PackageKit.)
mattdm,

2
Tutti gli utenti NON sono sicuramente garantiti in / etc / passwd. Potrebbero essere in LDAP, per esempio. Ma getent passwddovrebbe elencare tutti gli utenti del sistema (incluso root), in formato passwd, indipendentemente dal database in cui sono definiti.
marzo

3

Per stampare tutti gli utenti

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

Per stampare solo quegli utenti con UID 0, come altri hanno già detto, gli utenti con privilegi di root impliciti:

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

Questo è un buon aspetto, ma fai attenzione ai limiti (sono sicuro che MadHatter è già a conoscenza di questo) - non controllerà i gruppi e non controllerà i sudoers. Controllerà solo, come dice, la radice implicita.
Rafiq Maniar,

2
Non analizzare / etc / passwd. Gli utenti possono essere definiti altrove. Usa getent passwdinvece. Per il tuo primo esempio di "stampa tutti gli utenti", prova piuttosto questo:getent passwd | perl -naF: -e 'print "$F[0]\n"'
mivk

2

Per un rapido elenco di tutti gli utenti, prova a premere due volte la scheda (per il completamento automatico) dopo aver digitato il passwdcomando seguito da uno spazio. Funziona anche con il sucomando.

Deve essere eseguito come utente con privilegi di root.


È una funzionalità specifica di zsh? Bash suggerisce solo file su openSUSE.
jgillich,

Testato su Debian (Squeeze) in bash. Non credo che qualcuno lo sosterrebbe ufficialmente, ma è una scorciatoia.
Emeraldo,

Aggiornamento: non funziona più in El Capitan. Probabilmente è stato risolto per motivi di sicurezza.
Emeraldo,

0

Mi dava fastidio che non ci fosse una risposta di una riga ... Se vuoi elencare tutti gli account UID 0 (root) usa il seguente:

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

Migliore,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.