Os links a seguir discutem esses conceitos em diferentes contextos. Eu li as definições deles, mas ainda não sei dizer como eles estão relacionados ou se alguns deles são iguais.
- ID do grupo atual
- ID do grupo
- IDs de grupo primário e suplementar
- IDs de grupo efetivos e reais (também na Wikipedia )
Aqui está um exemplo da fonte da minha confusão:
De acordo com man id
, se eu digitar id
, devo obter o que eles chamam de identificações de grupo efetivas e reais .
id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)
No entanto, Wikipedia refere-se à saída de id
para distinguir entre IDs primários e suplementares . Além disso, a Wikipedia distingue entre IDs de grupo primário x suplementar e efetivo x real . Como esses conceitos se relacionam?
Além disso, é verdade que o ID do grupo primário = ID do grupo = ID do grupo atual ?
users
group
privileges
Amelio Vazquez-Reina
fonte
fonte
Respostas:
Você mistura duas distinções diferentes aqui:
A primeira distinção se refere a como os processos estão sendo executados . Normalmente, quando você executa um comando / programa, ele é executado com os privilégios do seu usuário. Ele tem o ID do grupo real igual ao grupo principal do usuário. Isso pode ser alterado por um processo para executar algumas tarefas como membro de outro grupo especial. Para fazer isso, os programas usam a
setgid
função que altera sua identificação de grupo efetiva .A segunda distinção refere-se a usuários . Cada usuário tem seu grupo principal . Há apenas um por usuário e é referido como gid na saída do
id
comando. Além disso, cada usuário pode pertencer a vários grupos suplementares - e eles são listados no final daid
saída.[Editar]:
Concordo que a página de manual
id
é um pouco enganadora aqui. Provavelmente é porque é uma versão simplificada da descrição fornecida pelo documento info. Para vê-lo mais claramente, executeinfo coreutils "id invocation"
(como sugerido no final doid
manual).fonte
newgrp
comando - veja o segundo parágrafo do manual no seu primeiro link!A visão do kernel
Conceitualmente, existem três conjuntos de grupos dos quais um processo é membro. Cada conjunto é um subconjunto do seguinte.
Por razões históricas, esses conjuntos são respectivamente:
Normalmente, um programa possui um único ID de usuário. Se o executável tiver o bit do modo setuid definido, o programa terá dois IDs de usuário: seu ID de usuário efetivo é o que importa para permissões de arquivo, limites por usuário, determinando se o processo está sendo executado como raiz e assim por diante. O processo pode alternar entre os IDs de usuário efetivo e real, se não precisar de privilégios extras o tempo todo ou se precisar alternar entre dois usuários não-root.
O mesmo mecanismo existe para o grupo. Para grupos, há um recurso adicional que não existia quando o sistema foi projetado: um processo pode ser membro de qualquer número de grupos; esses são os IDs de grupo suplementares.
A visualização do banco de dados do usuário
Depois que um usuário é autenticado, o processo de login muda para esse usuário, imediatamente antes de iniciar o shell do usuário (ou qualquer outro programa solicitado pelo usuário). Pouco antes de mudar para o usuário desejado (e perder privilégios de root), o processo de login muda para os grupos desejados.
Nas primeiras versões do unix, um processo só podia estar em um único grupo. Este grupo é o ID do grupo principal do usuário, armazenado no banco de dados do usuário (normalmente
/etc/passwd
). Esse grupo se torna o ID do grupo real e efetivo do shell ou outro programa iniciado pelo processo de login.Atualmente, um processo pode estar em vários grupos, para que os usuários também possam estar em vários grupos. O banco de dados do grupo (normalmente
/etc/group
) contém uma lista de usuários para cada grupo. Esses grupos se tornam IDs de grupo suplementares para o programa iniciado pelo processo de login.fonte
Muitas outras excelentes respostas aqui, mas se você ainda está confuso como eu, aqui está outra abordagem. Observe que eu sou apenas um estudante dessas coisas, não um mestre , portanto esta resposta é um trabalho em andamento e não deve ser considerada uma resposta sólida, pelo menos ainda não. Considere esta resposta v0.2.
Os grupos são simples e complexos ao mesmo tempo.
Chave para os IDs usados abaixo:
Nomes de usuário e ID do grupo:
Como os processos adquirem IDs:
1) Login autentica nome de usuário e retorna
LuID
eLgID
de/etc/passwd
.2) O primeiro processo configura eficaz = real = login, ou seja,
3) as crianças bifurcada herdar
RuID
,EuID
,RgID
, eEgID
, (e, possivelmente, salvou & supp), no entanto,Se o s u pouco id (s) é definido no arquivo do novo programa para executar, em seguida, defina eficaz a partir do arquivo:
EuID = FuID
Se o s g bit (s) id está definido no arquivo do novo programa para executar, em seguida, defina eficaz a partir do arquivo:
EgID = FgID
Nota: As opções de montagem suid e nosuid do sistema de arquivos subjacentes também se aplicam.
4a) Se s u id foi usado para definir
EuID
,EuID
pode ser temporariamente alterado (por exemplo, desatualizado a partir do root), mas primeiro o valor original é salvo,OuID
para que possa ser restaurado mais tarde, se desejado.4b) Se s g id foi usado para definir
EgID
, eleEgID
pode ser alterado temporariamente (por exemplo, desatualizado a partir da raiz), mas primeiro o valor original é salvo,OgID
para que possa ser restaurado mais tarde, se desejado.Quando um arquivo deve ser criado:
Para abrir para leitura:
Para abrir para escrever:
Para abrir para execução:
Quando uma mensagem precisa ser enviada:
Referências: credenciais do homem
Extra: Aqui está um utilitário para imprimir seu arquivo / etc / group:
fonte