newgrp
apenas dá acesso a um grupo ao qual você já tem acesso. Soa inútil? Basicamente sim. É principalmente uma sobra dos dias em que um processo não podia ser membro de vários grupos. Você também pode obter acesso a um grupo protegido por uma senha, mas isso é extremamente pouco usado.
Do ponto de vista do kernel, cada processo está em um ou mais grupos. setgid
só pode ser usado quando rodando como root ou em programas setgid (para trocar entre os grupos real (run-by) e efetivo (run-as)). O kernel não sabe sobre bancos de dados de usuários e grupos.
Os bancos de dados de usuários e grupos ( /etc/passwd
, /etc/group
, /etc/security/group.conf
, LDAP,…) são gerenciados por login
, su
e outros programas que gerenciam logins e elevação de privilégios, geralmente por meio do PAM. Ao efetuar login, você é atribuído aos grupos listados em /etc/passwd
, /etc/group
e outros arquivos por meio de pam_groups
; o processo se parece com isso:
gid_t groups[…] = /*extra GIDs computed from /etc/group and so on*/;
setgroups(sizeof(groups)/sizeof(gid_t), groups);
setgid(gid); /*main GID read from /etc/passwd*/
setuid(uid);
execve(shell, "-sh"); /*shell read from /etc/passwd*/
Em palavras: a renúncia aos privilégios de root (ou seja, a mudança para o usuário de destino) é feita após todos os outros gerenciamentos de privilégios, antes de invocar o shell do usuário. Depois que o processo não estiver mais sendo executado como root, não será possível obter grupos extras.
Se você acabou de adicionar um usuário a um grupo, ele entrará em vigor na próxima vez que o usuário fizer login. Se você iniciar outra sessão fazendo login em outro terminal ou por ssh, os processos nessa sessão terão o que quer que seja. grupos em que seu usuário estava no momento em que você efetuou login. É possível usar o comando groups
ou id
para ver em quais grupos você (ou seja, o processo específico do qual você iniciou groups
) é membro.
Então, eu respondi suas perguntas explícitas ( newgrp
está fazendo o seu trabalho, o que não é o que você pensou). Eu posso ou não ter resolvido o seu problema. É incomum para aplicativos que não fazem logon para procurar bancos de dados de usuários e grupos; Normalmente, as permissões de acesso seriam decididas, verificando se o processo de solicitação é um membro do grupo relevante. Se você tiver algum problema com um aplicativo em particular, informe-nos.