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:
KEY Full name -------- Description---------------------------------------------
u User uID = User ID (a unique # associated with each user)
g Group gID = Group ID (a unique # associated with each group)
While each /etc/passwd entry has one uID and one gID,
additional gIDs can be associated with a users via
/etc/group.
L Login IDs - uID and gID produced from the Login process.
('L' is not exactly standard Linux terminology, but
useful for explanations below.)
F File IDs - uID and gID retrieved from a file's ownership.
('F' is not exactly standard Linux terminology, but
useful for explanations below.)
R Real IDs - Who actually runs a process
E Effective IDs - Who spoofed via setuid or setgid, runs a process
O Original Eff. IDs - Place to save the original Effective ID when changing
it (e.g. temporarily downgrading it) so can later
restore it. Also called "Saved ID"; (but 'S' was not
used for here to help avoid confusion with the 'S' in
'SetUserID' & SetGroupID.)
+ Supplimentary gIDs - Optional, additional groups (none or more) running
this process which can be used to test for permissions.
Nombres de ID de usuario y grupo:
Category USER GROUP Notes
----------------- ---- ----- -------------------------------------------
From login: LuID LgID From /etc/passwd lookup
From files: FuID FgID Each file has these. Set by creator process.
For each running process:
Real RuID RgID Actual user starting the program
Effective EuID EgID Assigned user starting the program*
Saved OuID OgID Saves original effective ID.
Supplementary +gID1 (optional, additional groups)
+gID2
...
Cómo los procesos adquieren ID:
1) Iniciar sesión autentica nombre de usuario y devoluciones LuID
y LgID
de /etc/passwd
.
2) El primer proceso establece efectivo = real = inicio de sesión, es decir
EuID=RuID=LuID
EgID=RgID=LgID
3) los niños bifurcada hereda RuID
, EuID
, RgID
, y EgID
, (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
, entonces EuID
se puede cambiar temporalmente (por ejemplo, degradado desde la raíz), pero primero se guarda su valor original OuID
para que se pueda restaurar más tarde si se desea.
4b) Si se usó s g id para establecer EgID
, entonces EgID
se puede cambiar temporalmente (por ejemplo, degradado desde la raíz), pero primero se guarda su valor original OgID
para que se pueda restaurar más tarde si se desea.
Cuando se va a crear un archivo:
File's new id's are set from effective id's: FuID=EuID and FgID=EgID
(Permissions are set from umask.)
Para abrir para leer:
If FuID = EuID and user-read bit is set, or
If FgID = EgID and group-read bit is set, or
If FgID = +gID1 and group-read bit is set, or
If FgID = +gID2 and group-read bit is set, ...
then allow reading.
Para abrir para escribir:
(Same as above but write bit set to allow writing.)
Para abrir para la ejecución:
(Same as above but execute bit set to allow execution.)
Cuando un mensaje necesita ser enviado:
Use RuID and RgID. (Not EuID or EgID). *(Not sure where I read this.)*
Referencias: credenciales de hombre
Extra: Aquí hay una utilidad para imprimir bastante su archivo / etc / group:
cat /etc/group | sort -t: -k3n | awk -F ':' \
'BEGIN{printf "\n%-20s %-3s %-8s %s", \
"Group name","pw", "Group ID ", "User list"}\
BEGIN{printf "\n%-20s %-3s %-8s %s\n", \
"----------","--", "---------", "---------"} \
{ printf "%-20s %-3s %8d %s\n", $1, $2, $3, $4 }'