¿Por qué la salida de `groups` es diferente de` groups user` si actualmente estoy conectado como usuario?


21

No estoy seguro de por qué los siguientes tienen una salida diferente. Entiendo que los grupos sin especificar un usuario dan todos los grupos a los que pertenece el usuario actualmente conectado.

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

jacob@box:~$ groups jacob
jacob : jacob

Además, ¿qué significa "grupos del proceso actual" (de la página de manual de grupos)? ¿Dónde están instalados?

NOTA: Mi distribución es Ubuntu.


@Jake Intenta cerrar sesión y luego volver a

1
Tengo este problema a la inversa. 'groups myname' me da todos los grupos que tengo en el archivo / etc / groups, pero hacer solo 'groups' me muestra solo mi grupo principal. Y, de hecho, los comandos que requieren que esté en cierto grupo suplementario fallan debido a la falta de permisos. Claro que desearía saber qué estaba causando esto.
Todd Walton

Respuestas:


11

Podría ser uno de los siguientes:

  • Podría ser un error (aunque lo dudo)
  • Es posible que deba cerrar sesión e iniciar sesión nuevamente

Los grupos se establecen en el /etc/group.


8

Así como cada proceso tiene una ID de usuario real y efectiva actual, y una ID de grupo real y efectiva, también tiene una lista de grupos suplementarios . Estos son números (no nombres) todos mantenidos por el núcleo. Los establece el proceso de inicio de sesión (o el administrador de pantalla) cuando lo registra, al igual que su ID de usuario. Son heredados por subprocesos, al igual que su ID de usuario.

Cuando ejecuta groupssin argumentos, en última instancia invoca getgroups () para obtener la lista de grupos complementarios del núcleo. (En mi sistema Linux, / usr / bin / groups es un script de shell que ejecuta "id -Gn", que a su vez invoca getgroups ()).

Cuando ejecuta groups username, el comando tiene que "adivinar" cuáles serán los grupos suplementarios cuando ese usuario inicie sesión. Generalmente lo hace leyendo / etc / group o hablando con NIS o hablando con nscd o ... Bueno, hay un De muchas maneras podría funcionar.

Lo que está observando es similar a descubrir que su ID de usuario real actual y su entrada en / etc / passwd son inconsistentes. Esto significa que hay algo un poco extraño en la configuración de su sistema, pero es difícil decir qué sin más investigación.


3

(Observación: el groupscomando, aunque sigue siendo útil, es reemplazado principalmente por el comando id .)

Un usuario tiene un grupo primario que se define tradicionalmente en el /etc/passwdarchivo con el que inicia sesión, pero que hoy puede tener otras fuentes. También puede ser miembro de grupos adicionales, conocidos como grupos secundarios o complementarios, tradicionalmente especificados en el archivo /etc/groups, pero que hoy también pueden provenir o estar implicados por fuentes adicionales (como NIS, LDAP, SAMBA, etc.).

Los grupos primarios y suplementarios se definen en el momento del inicio de sesión y permanecen actualizados . Sin embargo, el usuario puede cambiar en cualquier momento su grupo primario activo actual mediante el newgrpcomando.

El proceso de inicio de sesión establece los grupos primarios y suplementarios. Para lo posterior, generalmente llama a la función libc initgroups , que compila la lista de datos de grupo suplementarios y la pasa a la función setgroups , que la establece en el contexto del proceso.

Las fuentes de información para initgroupsson:

utilizado por la Biblioteca GNU C y ciertas otras aplicaciones para determinar las fuentes de las cuales obtener información del servicio de nombres en un rango de categorías, y en qué orden. Cada categoría de información se identifica mediante un nombre de base de datos.

El groupscomando muestra los grupos aplicados actualmente a su usuario, y la lista comenzará con el grupo primario actual seguido de los grupos suplementarios desde el momento del inicio de sesión. Cualquier cambio en las fuentes de los datos después del tiempo de inicio de sesión no se refleja en la lista que se muestra.

El groups usernamecomando está pidiendo Linux para calcular los grupos de ese usuario, lo que hará utilizando principalmente los archivos /etc/password y /etc/groupsy luego las fuentes adicionales. Esto reflejará la situación actual de los archivos del sistema y puede que no sea igual a los grupos actuales que todavía están vigentes desde el momento del inicio de sesión.

El groups usernamecomando puede dar un resultado diferente cuando no usa todas las fuentes que el proceso de inicio de sesión usó para calcular sus grupos suplementarios, que es lo que aparentemente sucedió en su caso. Es posible que no se pueda acceder a estas fuentes desde su inicio de sesión o que el comando no las consulte.

El uso del id usernamecomando puede dar mejores resultados, aunque tampoco se garantiza que sea tan completo como el del proceso de inicio de sesión. El idcomando es más reciente que, y estaba destinado a ser más preciso que el groupscomando anterior.

Si bien el groupscomando da un resultado preciso y correcto, usted ha demostrado que groups usernameno se puede depender del comando para hacer lo mismo.

Sin examinar el código fuente del groupscomando, supongo que la implementación del groups usernamecomando en sus análisis de distribución de Linux /etc/groups, que en su caso no contenía nada, pero no usa /etc/nsswitch.conf, de la que provenían todos sus grupos suplementarios. Por lo tanto, sólo aparece el nombre del grupo primario, jacob.

Para más información, ver:

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.