Muitas outras excelentes respostas aqui, mas se você ainda está confuso como eu, aqui está outra abordagem. Por favor, note que eu sou apenas um aluno deste material, não um mestre , então esta resposta é um trabalho em andamento, e não deve ser considerada uma resposta sólida, pelo menos não ainda. Considere esta resposta v0.2.
Os grupos são simples e complexos ao mesmo tempo.
Chave para os IDs usados abaixo:
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.
Nomes de usuários e grupos:
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
...
Como os processos adquirem IDs:
1) Login autentica o nome de usuário e retorna LuID
e LgID
de /etc/passwd
.
2) O primeiro processo configura efetivo = real = login, ou seja
EuID=RuID=LuID
EgID=RgID=LgID
3) As crianças bifurcadas herdam RuID
, EuID
, RgID
e EgID
, (& possivelmente salvo & supp), no entanto,
-
Se o (s) bit (s) de id u estiver definido no arquivo do novo programa a ser executado, defina como efetivo a partir do arquivo:
EuID = FuID
-
Se o (s) bit (s) de id g estiver definido no arquivo do novo programa a ser executado, configure-o a partir do arquivo:
EgID = FgID
Observação: as opções de montagem suid e nosuid do sistema de arquivos subjacente também se aplicam.
4a) Se o u id foi usado para definir EuID
, então EuID
pode ser temporariamente alterado (por exemplo, rebaixado da raiz), mas primeiro é original O valor é salvo em OuID
, para que possa ser restaurado mais tarde, se desejado.
4b) Se s g id foi usado para definir EgID
, então EgID
pode ser temporariamente alterado (por exemplo, rebaixado da raiz), mas primeiro é original O valor é salvo em OgID
, para que possa ser restaurado mais tarde, se desejado.
Quando um arquivo deve ser criado:
File's new id's are set from effective id's: FuID=EuID and FgID=EgID
(Permissions are set from umask.)
Para abrir a leitura:
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 escrever:
(Same as above but write bit set to allow writing.)
Para abrir a execução:
(Same as above but execute bit set to allow execution.)
Quando uma mensagem precisa ser enviada:
Use RuID and RgID. (Not EuID or EgID). *(Not sure where I read this.)*
Referências: credenciais do homem
Extra: Aqui está um utilitário para imprimir seu arquivo / 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 }'