Perché l'output di `gruppi` è diverso da` gruppi utente` se attualmente sono registrato come utente?


21

Non sono sicuro del motivo per cui quanto segue ha un output diverso. La mia comprensione è che i gruppi senza specificare un utente danno tutti i gruppi di cui l'utente attualmente connesso è membro.

jacob@box:~$ groups
jacob adm lp dialout cdrom plugdev lpadmin sambashare

jacob@box:~$ groups jacob
jacob : jacob

Cosa significa anche "gruppi del processo corrente" (dalla pagina man dei gruppi)? Dove sono installati?

NOTA: la mia distribuzione è Ubuntu.


@Jake Prova a disconnetterti e a

1
Sto riscontrando questo problema al contrario. 'groups myname' mi dà tutti i gruppi che ho nel file / etc / groups, ma fare solo 'groups' mi mostra solo il mio gruppo principale. E, in effetti, i comandi che richiedono che io faccia parte di un certo gruppo supplementare falliscono a causa della mancanza di autorizzazioni. Sicuramente vorrei sapere cosa stava causando questo.
Todd Walton,

Risposte:


11

Potrebbe essere uno dei seguenti:

  • Potrebbe essere un bug (anche se ne dubito)
  • Potrebbe essere necessario disconnettersi e accedere nuovamente

I gruppi sono impostati in /etc/group.


8

Proprio come ogni processo ha un ID utente reale ed effettivo corrente e un ID gruppo reale ed efficace, ha anche un elenco di gruppi supplementari . Questi sono numeri (non nomi) tutti gestiti dal kernel. Sono impostati dal processo di accesso (o display manager) quando si accede, proprio come il proprio ID utente. Sono ereditati da processi secondari, proprio come il tuo ID utente.

Quando si esegue groupssenza argomenti, alla fine viene richiamato getgroups () per ottenere l'elenco di gruppi supplementari dal kernel. (Sul mio sistema Linux, / usr / bin / groups è uno script di shell che esegue "id -Gn", che a sua volta invoca getgroups ().)

Quando esegui groups username, il comando deve "indovinare" quali saranno i gruppi supplementari quando l'utente accede. In genere lo fa leggendo / etc / group o parlando con NIS o parlando con nscd o ... Beh, ci sono molti modi in cui potrebbe funzionare.

Quello che stai osservando è simile a scoprire che il tuo ID utente reale attuale e la tua voce in / etc / passwd sono incoerenti. Ciò significa che c'è qualcosa di strano nella configurazione del tuo sistema, ma è difficile dire cosa senza ulteriori indagini.


3

(Nota: il groupscomando, sebbene sia ancora utile, è in gran parte sostituito dal comando id .)

Un utente ha un gruppo primario che è tradizionalmente definito nel file /etc/passwdfile con il quale accede, ma che oggi può avere altre fonti. Può anche essere un membro di gruppi aggiuntivi, noti come gruppi secondari o supplementari, tradizionalmente specificati nel file /etc/groups, ma che oggi possono anche derivare o essere impliciti da fonti aggiuntive (come NIS, LDAP, SAMBA ecc.).

I gruppi primari e supplementari sono definiti al momento dell'accesso e rimangono aggiornati . Tuttavia, l'utente può in qualsiasi momento modificare il proprio gruppo primario attivo corrente utilizzando il newgrpcomando

Il processo di accesso imposta i gruppi primario e supplementare. Per il successivo, in genere chiama initgroups della funzione libc , che compila l'elenco di dati di gruppo supplementari e lo passa alla funzione setgroups , che lo stabilisce nel contesto del processo.

Le fonti di informazione per initgroupssono:

usato dalla GNU C Library e da alcune altre applicazioni per determinare le fonti da cui ottenere informazioni sul servizio dei nomi in una gamma di categorie e in quale ordine. Ogni categoria di informazioni è identificata da un nome di database.

Il groupscomando mostra i gruppi attualmente applicati al tuo utente e l'elenco inizierà con il gruppo primario corrente seguito dai gruppi supplementari dal momento dell'accesso. Eventuali modifiche alle fonti dei dati dopo il momento dell'accesso non si riflettono nell'elenco visualizzato.

Il groups usernamecomando di sta chiedendo Linux per il calcolo dei gruppi per l'utente, che lo farà utilizzando principalmente i file /etc/password e le /etc/groupse poi le altre fonti. Ciò rifletterà la situazione attuale dei file di sistema e potrebbe non essere uguale ai gruppi correnti che sono ancora in vigore dal momento dell'accesso.

Il groups usernamecomando può dare un risultato diverso quando non utilizza tutte le fonti utilizzate dal processo di accesso per calcolare i gruppi supplementari, che è ciò che apparentemente è accaduto nel tuo caso. Queste fonti potrebbero non essere accessibili dal tuo login o potrebbero non essere consultate dal comando.

L'uso del id usernamecomando può fornire risultati migliori, anche se non è garantito che sia completo come quello del processo di accesso. Il idcomando è più recente di ed era destinato a essere più preciso del vecchio groupscomando.

Mentre il groupscomando dà un risultato preciso e corretto, hai ben dimostrato che groups usernamenon si può fare affidamento sul comando per fare lo stesso.

Senza esaminare il codice sorgente del groupscomando, immagino che l'implementazione del groups usernamecomando nelle tue analisi di distribuzione Linux /etc/groups, che nel tuo caso non contenesse nulla, ma non utilizzi /etc/nsswitch.conf, da cui provenissero tutti i tuoi gruppi supplementari. Pertanto è elencato solo il nome del gruppo primario, jacob.

Per ulteriori informazioni, vedere:

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.