Comando id in Linux: leggere UID, GID e gruppi di utenti e processi

id mostra gli identificativi dell'utente e dei gruppi del processo corrente; se specifichi un account, ne consulta invece le informazioni nel database degli utenti. È utile per iniziare a capire un problema di accesso ai file. Il comando legge le informazioni: non cambia utente, gruppi o permessi.

UID significa User ID, identificativo utente; GID significa Group ID, identificativo di gruppo. Un processo ha un gruppo principale e può appartenere anche a gruppi supplementari. I numeri sono le identità usate dal sistema; i nomi tra parentesi sono la loro rappresentazione leggibile, quando disponibile.

Sintassi e informazioni del processo corrente

id [opzione...] [utente]

Questa è la notazione della sintassi: non copiare le parentesi quadre come argomenti. Per vedere le informazioni del processo corrente, esegui senza opzioni:

id

Non servono file di ingresso o privilegi amministrativi per il normale controllo. Leggi le voci uid, gid e groups. Quando identità reale ed effettiva differiscono, l'uscita GNU può mostrare anche euid o egid. Esegui il comando nella sessione in cui si verifica il problema: un altro terminale o un servizio può avere credenziali diverse.

Controlla id --version, id --help e man id sulla macchina interessata. Gli esempi di base sono stati verificati con GNU Coreutils 8.32 nel Bash di Git per Windows; questo ambiente non riproduce il modello dei permessi di Linux. Le differenze dopo modifiche ai gruppi o cambi di UID su Linux sono descritte in base ai manuali, senza una prova locale di queste modifiche.

Consultare un account senza assumerne l'identità

id alice

Questo esempio richiede che esista un account chiamato alice. Sostituiscilo con un nome reale del sistema se necessario: non occorre creare alice per provare id. Se il nome non viene trovato, il comando segnala un errore; verifica l'account e il servizio che risolve utenti e gruppi prima di interpretare il risultato.

Con un argomento utente, id interroga le informazioni di quell'account. Non avvia una sessione come alice e non assegna alla shell corrente i suoi gruppi. Puoi controllare l'utente attuale prima e dopo con id -u: una semplice interrogazione non ne cambia l'identificativo.

Per confrontare i dati del processo con quelli dell'account avente il suo nome effettivo, in un ambiente GNU con quel nome risolvibile puoi usare id "$(id -un)". Anche questa seconda forma consulta il database: non è un modo alternativo di leggere direttamente tutti i gruppi già associati al processo.

Ottenere solo un identificativo o un nome

id -u
id -un

La prima riga stampa l'UID effettivo numerico; la seconda stampa il nome corrispondente. Nell'ambiente GNU id -un equivale a whoami. La parola effettivo si riferisce alle credenziali del processo attuale, non necessariamente all'account del primo accesso.

Con id -g ottieni il GID effettivo, con id -gn il relativo nome. Per gli identificativi di tutti i gruppi usa id -G; per i nomi usa id -Gn. La n si combina con una selezione come -u, -g o -G: non usarla da sola per chiedere genericamente tutti i nomi.

Se vuoi l'UID reale invece di quello effettivo, usa id -ru; per il GID reale usa id -rg. Reale ed effettivo sono attributi distinti del processo: l'UID reale non è una registrazione affidabile del primo utente che si è collegato alla macchina. Per uno script scegli l'opzione specifica anziché estrarre il numero dalla riga completa destinata alla lettura umana.

Leggere UID, GID e l'elenco dei gruppi

id

Un esempio illustrativo di uscita è:

uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo)

In questo esempio, uid=1000 identifica l'utente alice. Il gruppo principale è indicato da gid=1000(alice): il nome accanto all'UID non definisce il gruppo principale. L'elenco groups contiene qui sia il gruppo principale 1000 sia il gruppo 27, chiamato sudo.

Non tutti gli elementi di groups sono quindi gruppi supplementari: il gruppo principale può essere incluso nell'elenco. L'appartenenza a un gruppo chiamato sudo può essere rilevante per la politica locale, ma non dimostra da sola che ogni comando amministrativo sia consentito. Nomi, numeri e regole variano: non assumere che il gruppo sudo abbia sempre GID 27.

Per visualizzare soltanto le appartenenze puoi considerare anche il comando groups. Non confrontare numeri e nomi come se fossero lo stesso dato: se un nome non è risolvibile, conserva l'identificativo numerico e verifica la risoluzione dell'account o del gruppo.

Opzioni e verifica dopo una modifica ai gruppi

Opzione GNU Risultato
-u Solo l'UID effettivo del processo, senza argomento utente.
-g Solo il GID effettivo.
-G Gli identificativi di tutti i gruppi.
-n I nomi invece dei numeri, insieme a -u, -g o -G.
-r Seleziona l'identità reale invece di quella effettiva nelle forme compatibili; per esempio -ru e -rg.

Dopo che un amministratore modifica le appartenenze nel database, una sessione già aperta può conservare il vecchio insieme di gruppi. Perciò id senza utente e id con il nome dell'account possono divergere. Controlla prima la sessione dove l'accesso fallisce e poi i dati dell'account; non scambiare l'interrogazione del database per un aggiornamento della sessione.

Se la modifica è corretta, apri una nuova sessione di accesso e ricontrolla id al suo interno. Per un servizio occorre considerare il suo processo e il modo in cui viene avviato: una nuova shell personale non ne aggiorna automaticamente le credenziali. Non modificare gruppi o permessi solo per far coincidere due stampe senza aver individuato il contesto del problema.

Un errore nella conversione di un GID in nome non equivale all'assenza di quel gruppo numerico. Controlla anche lo stato di uscita: durante la prova su Windows Git alcune conversioni dei gruppi in nomi hanno restituito stato 1 pur producendo testo. Questa osservazione riguarda quell'ambiente e non dimostra un problema di autorizzazioni su Linux.

Domanda frequente

Che cosa indicano UID e GID nell'uscita di id?

UID identifica l'utente e GID il gruppo principale. L'elenco groups può includere il gruppo principale e quelli supplementari. Senza un account come argomento osservi le informazioni del processo corrente; con un account interroghi i dati di quell'utente e non cambi l'identità della sessione.

Documentazione di riferimento

La pagina di manuale di GNU id descrive la selezione degli identificativi e dei nomi. La pagina di manuale di GNU groups chiarisce la distinzione tra dati del processo e database delle appartenenze. Sono manuali del progetto GNU pubblicati su man7.org; confronta le opzioni con quelle della versione installata.