Voglio un comando per elencare tutti gli utenti che hanno i privilegi di root, ad esempio sudo?
Supponiamo che io sia un utente sudoer. Come potrei conoscere tutti gli altri utenti sudoer?
Voglio un comando per elencare tutti gli utenti che hanno i privilegi di root, ad esempio sudo?
Supponiamo che io sia un utente sudoer. Come potrei conoscere tutti gli altri utenti sudoer?
Risposte:
Se hai solo bisogno di elencare i sudoer elencati nel sudogruppo, penso che il modo migliore per farlo sarebbe quello di eseguire questo comando (che dovrebbe essere computazionalmente più leggero di qualsiasi altro comando in questa risposta):
grep -Po '^sudo.+:\K.*$' /etc/group
Inoltre, come suggerito nei commenti di Muru, il formato delle voci in /etc/grouppuò essere facilmente gestito da cut:
grep '^sudo:.*$' /etc/group | cut -d: -f4
Inoltre, come suggerito nei commenti di Muru, si può usare getental posto di grep:
getent group sudo | cut -d: -f4
Uno di questi comandi stamperà tutti gli utenti elencati nel sudogruppo /etc/group(se presenti).
Ripartizione comando n. 1:
grep: Stampa tutte le righe corrispondenti a una regex in un file-P: crea grepregex in stile Perlo: consente di grepstampare solo la stringa corrispondente'^sudo.+:\K.*$': fa grepcorrispondere la regex tra le virgoletteRipartizione Regex n. 1:
^: inizio della riga.+: uno o più personaggi\K: scarta la partita precedente.*: zero o più caratteri$: fine lineaRipartizione comando n. 2:
grep: Stampa tutte le righe corrispondenti a una regex in un file'^sudo.+:\K.*$': fa grepcorrispondere la regex tra le virgolettecut: Stampa solo una sezione specificata di ogni riga in un file-d:: fa cutinterpretare :come delimitatore di campo-f4: consente di cutstampare solo il quarto campoRipartizione Regex # 2:
^: inizio della riga.*: zero o più caratteri$: fine lineagetent group sudo | cut -d: -f4oppure usa awk, ma ricorda comunque che gruppo e passwd hanno formati fissi, con delimitatori.
getent group- non hai bisogno del grep. getent group fooè come grep foo /etc/group, ma più capace.
getentaffatto, qualche idea su come grepe getentconfrontare a livello computazionale? Sarebbe più leggero correre getent?
sudogruppo. Alcuni unix hanno altri gruppi come wheel. La risposta di @muru includerà tutti i sudoer, indipendentemente dai gruppi in cui si trovano.
Come indicato qui, considero il modo più semplice di scoprire con -l& -Uoptions insieme, basta digitare usersche elencherà ad esempio John:
Se l'utente ha sudoaccesso, stamperà il livello di sudoaccesso per quel particolare utente:
sudo -l -U John
User John may run the following commands on this host:
(ALL : ALL) ALL
Se l'utente non ha accesso sudo, stamperà che un utente non può essere eseguito sudosu localhost:
sudo -l -U John
User John is not allowed to run sudo on localhost.
for u in $(awk -F'[/:]' '{if($3>=1000&&$3!=65534) print $1}' /etc/passwd); do sudo -lU "$u" ; done. hack rapido niente garantito :)
"%domain admins@mycompany.intra" ALL=(ALL) ALLallora funziona. Mi hai risparmiato un sacco di tempo, perché non ero a conoscenza del fatto che funziona anche per utenti non locali.
Come è già stato affermato, la risposta può essere trovata su Unix & Linux Stack Exchange :
Ciò dimostra che l'utente "saml" è un membro del gruppo ruote.
$ getent group wheel wheel:x:10:saml
L'unica differenza è che il gruppo in Ubuntu non lo è wheel, ma sudo(o adminnelle versioni precedenti di Ubuntu). Quindi il comando diventa:
getent group sudo
geten groupe vedo molti numeri diversi. La mia domanda originale è: come scoprire se un utente è un utente di sistema (creato con useradd -r)
Espandendo il sudo -l -Utest, è possibile utilizzare getent passwdper determinare gli utenti che possono utilizzare sudo. L' getentutilizzo ci consente di accedere agli utenti che potrebbero non essere presenti nel passwdfile, come gli utenti LDAP:
getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'
sudo -U non restituisce un valore di uscita diverso da zero che potremmo trarre vantaggio, quindi siamo ridotti a grepping dell'output.
sudo.
Sulla maggior parte dei sistemi simili a Unix, che hanno il comando sudo e hanno un file di configurazione sudo; eseguendo visudo come root:
:~$ sudo bash
o
:~$ su
:~# visudo
consentirà a un amministratore di ispezionare e modificare i privilegi dei gruppi che possono usare il comando sudo.
Su sistemi simili a Unix basati su Debian, come Ubuntu, i gruppi 4 e 27 hanno generalmente diritti di accesso ai privilegi di sudo.
Il gruppo 4 è il gruppo di amministratori (adm) e il gruppo 27 è il sudo gid.
Per vedere quali utenti sono attualmente assegnati a questi gruppi cat il file / etc / group come mostrato di seguito:
:~$ cat /etc/group
Un output di esempio, su Ubuntu (ma non basato su Redhat, basato su Oracle Solaris / Solaris o su sistemi basati su BSD) produrrebbe questo:
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
Come possiamo dire, il tuo utente è l'amministratore del sistema e membro del gruppo 4 (adm). Ma il tuo utente e mio fratello sono entrambi membri del gruppo 27, che è il numero gid (identificazione del gruppo) del gruppo sudo. Quindi mybrother può anche ottenere i privilegi di root (super user).
Molti sistemi Linux come Fedora e Slackware, incorporano il gruppo di ruote gid = 10. Che consente i privilegi di amministratore quando viene applicato il comando sudo. Su sistemi basati su BSD (ad es. FreeBSD), l'utente root è un membro del gruppo di ruote che è gid 0.
Inoltre, utilizzando il comando id, qualsiasi utente può trovare nel sistema le informazioni di gruppo di un altro utente noto.
Per esempio:
:~$ id mybrother
Uscita campione
uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
Questo comando restituisce un elenco di utenti con diritti sudo:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' /etc/passwd
L'output è (ad es.):
<username> : <username> adm cdrom sudo dip plugdev lpadmin sambashare docker
Se viene visualizzato solo il nome utente, questo comando:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print $1 }' /etc/passwd
Comando:
cat /etc/group | grep sudo
Produzione:
sudo:x:27:Tom,Stacy
Tom, Stacy sono gli utenti con privilegi di sudo.
cat .
Ero sconcertato su come l' vagrantutente può usare sudoanche senza essere menzionato /etc/sudoersné in /etc/groupné trovato con getent.
Risulta sudoinoltre legge voci da tutti i file in/etc/sudoers.d/ . Quindi, se non hai guardato attraverso quella directory, potresti non capire quanti utenti hanno effettivamente sudoaccesso.
Questo tipo di sudoaccesso può essere rilevato dalla risposta di JoKeR usando sudo -l -U vagrantma non viene rilevato da nessuna delle altre risposte qui che fanno affidamento su getento /etc/group.