Comando id: verificare UID e gruppi, whoami, groups e gruppi supplementari

Ambiente di testFamiglia RHELAlmaLinux 9.8coreutils 8.32account rootDebian 12 · coreutils 9.1 account normale
Comandi per utenti · gruppiid, whoami, groupsPosizione/usr/bin/id

Per verificare l'UID e i gruppi dell'account corrente su un server Linux si usa il comando id; se serve solo il nome dell'account si usa whoami, se servono solo i nomi dei gruppi si usa groups. Eseguendo i tre comandi uno dopo l'altro su server AlmaLinux 9 e Debian 12 e confrontando l'output, id -un e whoami hanno mostrato lo stesso nome di account, e groups ha mostrato l'elenco dei gruppi di id lasciando solo i nomi.

L'output qui sotto è stato ottenuto su un server AlmaLinux 9.8 con l'account root e su un server Debian 12 con un account normale. Il nome e i numeri dell'account di accesso e i gruppi supplementari sono stati sostituiti con valori di esempio (user1, 1000, adm, systemd-journal).

1️⃣ Uso di base del comando id

  • ↪️ Leggere i tre campi uid, gid e groups

Eseguendo id senza opzioni, le informazioni dell'account che ha avviato la shell corrente compaiono su una riga. Con l'account root, tutti e tre i campi erano 0(root).

id
uid=0(root) gid=0(root) groups=0(root)

Il campo uid è il numero e il nome dell'account, e il campo gid è il numero e il nome del gruppo primario (primary group). Il campo groups contiene tutti i gruppi a cui l'account appartiene, con il gruppo primario al primo posto.

Scrivendo un nome di account dopo id vengono mostrate le informazioni di quell'account. Verificando l'account normale user1, che ha gruppi supplementari, nel campo groups dopo il gruppo primario user1 sono comparsi adm e systemd-journal. Questi gruppi a cui l'account appartiene oltre al gruppo primario sono i gruppi supplementari (supplementary group).

id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),4(adm),190(systemd-journal)

Molti account hanno lo stesso numero per UID e gid, quindi è facile considerare i due numeri come lo stesso valore, ma l'account adm presente di serie sul server aveva UID 3 e numero di gruppo primario 4. L'account operator aveva root come gruppo primario.

id adm
uid=3(adm) gid=4(adm) groups=4(adm)
id operator
uid=11(operator) gid=0(root) groups=0(root)

Scrivendo più account ne viene mostrato uno per riga.

id root bin
uid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin)

Scrivendo un account che non esiste compare l'errore [no such user], e il codice di uscita era 1.

id no-such-user9
id: 'no-such-user9': no such user
echo $?
1

Il codice di uscita quando si scrive un account esistente è 0, quindi in uno script si può usare come condizione per verificare se un account esiste.

2️⃣ Opzioni del comando id

  • ↪️ -u, -g, -G per i numeri e -n per i nomi

Per passare a uno script un solo numero di tutto l'output, si sceglie un solo campo con un'opzione. -u mostra l'UID, -g il numero del gruppo primario e -G tutti i numeri dei gruppi a cui l'account appartiene.

id -u
0
id -u daemon
2
id -G user1
1000 4 190

Aggiungendo -n compaiono i nomi al posto dei numeri. Verificando i gruppi di user1 con [id -Gn], i tre numeri sono diventati tre nomi.

id -Gn user1
user1 adm systemd-journal
id -gn user1
user1

-n e -r si usano insieme a una delle opzioni -u, -g e -G. Scrivendo solo -n è comparso l'errore qui sotto.

id -n
id: cannot print only names or real IDs in default format

-r mostra l'ID reale al posto dell'ID effettivo (effective). Eseguendo [id -ur] in una shell dell'account root è comparso 0. Scrivendo insieme due o più opzioni che scelgono un numero, come -u e -g, compare l'errore [cannot print "only" of more than one choice]. Le opzioni sono riassunte qui sotto.

OpzioneCopiaDescrizione
-u--userMostra il numero dell'UID
-g--groupMostra il numero del gruppo primario
-G--groupsMostra tutti i numeri dei gruppi di appartenenza
-n--nameCon -u, -g o -G, mostra il nome al posto del numero
-r--realCon -u, -g o -G, mostra l'ID reale al posto dell'ID effettivo
OpzioneCopiaDescrizione
-Z--contextMostra solo il contesto di sicurezza del processo
-z--zeroSepara gli elementi dell'output con caratteri NUL invece che con spazi; non utilizzabile nel formato predefinito
-aAccettata solo per compatibilità con altre versioni di id e ignorata
--helpMostra l'aiuto
--versionStampare la versione

🔲 Simulatore del comando id

Il simulatore qui sotto parte con l'account user1, che ha gruppi supplementari. Dopo aver aggiunto il gruppo wheel con il chip [🖊 Other window], si possono confrontare [id] e [id user1] e verificare i gruppi di una nuova shell con il chip [🔁 Log in again].

Simulatore del comando idcoreutils 8.32
[root@server work]#
Funziona solo all'interno del browser. Dopo aver modificato i gruppi con il chip [🖊 Other window], si confrontano [id] e [id user1] e si verificano i gruppi di una nuova shell con il chip [🔁 Log in again].

3️⃣ Il comando whoami e id -un

  • ↪️ Verificare il nome dell'account corrente e verificare altri account

Se serve solo il nome dell'account della shell corrente, si esegue whoami. La pagina di man descrive whoami come lo stesso comando di [id -un]. Eseguendo i due comandi con l'account root, entrambi hanno mostrato root.

whoami
root
id -un
root

Anche con un account normale sul server Debian 12 i due comandi hanno mostrato lo stesso nome di account.

whoami
user1
id -un
user1

whoami mostra il nome dell'account che corrisponde all'UID effettivo (effective) corrente. È un comando che verifica solo l'account corrente, quindi aggiungendo dopo un nome di account compare un errore.

whoami user1
whoami: extra operand 'user1'
Try 'whoami --help' for more information.

Il nome o il numero di un altro account si verifica scrivendo quell'account dopo id.

id -un user1
user1

Scrivendo -u al posto di -un, nello stesso punto compare il numero dell'UID invece del nome dell'account.

4️⃣ Il comando groups e i gruppi supplementari

  • ↪️ Gruppo primario e gruppi supplementari, e la shell dopo la modifica dei gruppi

groups mostra solo i nomi dei gruppi su una riga. Senza nome di account compaiono i gruppi della shell corrente, e con l'account root c'era solo root.

groups
root

Scrivendo un nome di account compaiono il nome dell'account e, dopo i due punti, i gruppi. Scrivendo più account ne è stato mostrato uno per riga.

groups user1 daemon
user1 : user1 adm systemd-journal
daemon : daemon

Il gruppo primario e i gruppi supplementari vengono registrati in posti diversi. I gruppi supplementari sono scritti come membri nel quarto campo del database dei gruppi (/etc/group), mentre il gruppo primario è scritto come numero nel quarto campo delle informazioni dell'account (/etc/passwd).

getent group adm
adm:x:4:user1
getent group user1
user1:x:1000:
getent passwd daemon
daemon:x:2:2:daemon:/sbin:/sbin/nologin

Il gruppo user1, gruppo primario di user1, aveva il quarto campo vuoto, e nel gruppo supplementare adm user1 era scritto come membro. Il 2 nel quarto campo della riga dell'account daemon è il numero del gruppo primario.

Per aggiungere un account a un gruppo supplementare si usa il comando usermod nella forma [usermod -aG gruppo account]. Usando solo -G senza -a, l'account esce dai gruppi supplementari esistenti non scritti nell'elenco, quindi -a va scritto insieme.

groups eseguito senza nome di account mostra i gruppi del processo della shell corrente. La pagina di man spiega che questo valore può essere diverso dal database quando il database dei gruppi cambia.

Per questo, subito dopo aver modificato i gruppi si verificano i gruppi del database con [groups account] o [id account], e per applicarli alla shell si accede di nuovo. Un comando che cambia l'ID di gruppo corrente restando connessi è newgrp.

🔢 FAQ & contenuti consigliati

Sì, si può. Eseguendo [id 0] sul server AlmaLinux 9.8 è comparso uid=0(root) gid=0(root) groups=0(root), come con [id root].

Dal numero scritto in UID_MIN in /etc/login.defs. Sul server AlmaLinux 9.8 era 1000, e SYS_UID_MIN e SYS_UID_MAX nello stesso file erano 201 e 999, l'intervallo degli account di sistema.

who am i è who seguito da due parole; si comporta come l'opzione -m e mostra una riga con le informazioni di accesso del terminale in cui si sta scrivendo. whoami mostra solo una riga con il nome dell'account dell'UID effettivo corrente.

ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dimostra di essere umano: 6   +   10   =