Los siguientes enlaces discuten estos conceptos en diferentes contextos. He leído sus definiciones, pero todavía no puedo decir cómo están relacionadas, o si algunas de ellas son iguales.
- ID del grupo actual
- Identificación del grupo
- ID de grupo primario y suplementario
- ID de grupo real y efectivo (también en Wikipedia )
Aquí hay un ejemplo de la fuente de mi confusión:
Según man id
, si escribo id
, debería obtener lo que ellos llaman ID de grupo real y efectivo .
id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)
Sin embargo, Wikipedia se refiere a la salida de id
distinguir entre IDs primarios y suplementarios . Además, Wikipedia distingue entre identificadores de grupo primarios versus suplementarios y efectivos versus reales . ¿Cómo se relacionan estos conceptos entre sí?
Además, ¿es cierto que la ID del grupo primario = ID del grupo = ID del grupo actual ?
users
group
privileges
Amelio Vazquez-Reina
fuente
fuente
Respuestas:
Mezclas dos distinciones diferentes aquí:
La primera distinción se refiere a cómo se ejecutan los procesos . Normalmente, cuando ejecuta un comando / programa, se ejecuta con los privilegios de su usuario. Tiene la identificación del grupo real igual que el grupo principal de su usuario. Esto puede cambiarse mediante un proceso para realizar algunas tareas como miembro de otro grupo especial. Para hacer eso, los programas usan la
setgid
función que cambia su identificación de grupo efectiva .La segunda distinción se refiere a los usuarios . Cada usuario tiene su grupo primario . Solo hay uno por usuario y se conoce como gid en la salida del
id
comando. Además de eso, cada usuario puede pertenecer a varios grupos suplementarios , y estos se enumeran al final de laid
salida.[Editar]:
Estoy de acuerdo en que la página de manual
id
es algo engañosa aquí. Probablemente se deba a que es una versión reducida de la descripción proporcionada por el documento de información. Para verlo más claramente, ejecuteinfo coreutils "id invocation"
(como se sugiere al final delid
manual).fuente
newgrp
comando - ¡vea el segundo párrafo del manual en su primer enlace!La vista del núcleo
Conceptualmente, hay tres conjuntos de grupos de los que un proceso es miembro. Cada conjunto es un subconjunto del siguiente.
Por razones históricas, estos conjuntos son respectivamente:
Normalmente, un programa tiene una sola identificación de usuario. Si el ejecutable tiene el bit de modo setuid establecido, entonces el programa tiene dos ID de usuario: su ID de usuario efectiva es la que importa para los permisos de archivos, los límites por usuario, determinar si el proceso se ejecuta como root, etc. El proceso puede cambiar entre las ID de usuario efectivas y reales, si no necesita sus privilegios adicionales todo el tiempo, o si necesita cambiar entre dos usuarios no root.
El mismo mecanismo existe para el grupo. Para los grupos, hay una característica adicional que no existía cuando se diseñó el sistema: un proceso puede ser miembro de cualquier número de grupos; Estas son las ID de grupo suplementarias.
La vista de la base de datos del usuario
Una vez que un usuario se autentica, el proceso de inicio de sesión cambia a ese usuario, justo antes de iniciar el shell del usuario (o cualquier programa que el usuario solicite). Justo antes de cambiar al usuario deseado (y perder los privilegios de root), el proceso de inicio de sesión cambia a los grupos deseados.
En las primeras versiones de Unix, un proceso solo podía estar en un solo grupo. Este grupo es el ID de grupo principal del usuario, almacenado en la base de datos del usuario (normalmente
/etc/passwd
). Este grupo se convierte en el ID de grupo real y efectivo del shell u otro programa lanzado por el proceso de inicio de sesión.Hoy en día, un proceso puede estar en múltiples grupos, por lo que los usuarios también pueden estar en múltiples grupos. La base de datos del grupo (típicamente
/etc/group
) contiene una lista de usuarios para cada grupo. Estos grupos se convierten en ID de grupo suplementarios para el programa lanzado por el proceso de inicio de sesión.fuente
Aquí hay muchas otras respuestas excelentes, pero si todavía estás confundido como yo, aquí hay otro enfoque. Tenga en cuenta que solo soy un estudiante de estas cosas, no un maestro , por lo que esta respuesta es un trabajo en progreso y no debe considerarse una respuesta sólida, al menos todavía no. Considere esta respuesta v0.2.
Los grupos son simples y complejos al mismo tiempo.
Clave para las ID utilizadas a continuación:
Nombres de ID de usuario y grupo:
Cómo los procesos adquieren ID:
1) Iniciar sesión autentica nombre de usuario y devoluciones
LuID
yLgID
de/etc/passwd
.2) El primer proceso establece efectivo = real = inicio de sesión, es decir
3) los niños bifurcada hereda
RuID
,EuID
,RgID
, yEgID
, (y posiblemente salvado y supl), sin embargo,Si el bit u s bit (s) está establecido en el archivo del nuevo programa a ejecutar, entonces establezca efectivo desde el archivo:
EuID = FuID
Si el / los bit (es) s g id se configuran en el archivo del nuevo programa a ejecutar, entonces se establece como efectivo desde el archivo:
EgID = FgID
Nota: Las opciones de montaje suid y nosuid del sistema de archivos subyacente también se aplican.
4a) Si se usó s u id para establecerlo
EuID
, entoncesEuID
se puede cambiar temporalmente (por ejemplo, degradado desde la raíz), pero primero se guarda su valor originalOuID
para que se pueda restaurar más tarde si se desea.4b) Si se usó s g id para establecer
EgID
, entoncesEgID
se puede cambiar temporalmente (por ejemplo, degradado desde la raíz), pero primero se guarda su valor originalOgID
para que se pueda restaurar más tarde si se desea.Cuando se va a crear un archivo:
Para abrir para leer:
Para abrir para escribir:
Para abrir para la ejecución:
Cuando un mensaje necesita ser enviado:
Referencias: credenciales de hombre
Extra: Aquí hay una utilidad para imprimir bastante su archivo / etc / group:
fuente