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.
Respuestas:
Podría ser uno de los siguientes:
Los grupos se establecen en el
/etc/group
.fuente
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
groups
sin 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.
fuente
(Observación: el
groups
comando, aunque sigue siendo útil, es reemplazado principalmente por el comando id .)Un usuario tiene un grupo primario que se define tradicionalmente en el
/etc/passwd
archivo 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
newgrp
comando.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
initgroups
son:El
groups
comando 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 username
comando está pidiendo Linux para calcular los grupos de ese usuario, lo que hará utilizando principalmente los archivos/etc/password
y/etc/groups
y 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 username
comando 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 username
comando puede dar mejores resultados, aunque tampoco se garantiza que sea tan completo como el del proceso de inicio de sesión. Elid
comando es más reciente que, y estaba destinado a ser más preciso que elgroups
comando anterior.Si bien el
groups
comando da un resultado preciso y correcto, usted ha demostrado quegroups username
no se puede depender del comando para hacer lo mismo.Sin examinar el código fuente del
groups
comando, supongo que la implementación delgroups username
comando 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:
fuente