Por que o “logout” de uma sessão ativa um grupo suplementar recém-adicionado? [duplicado]

3

Eu fiz a seguinte pergunta Adicionado grupo suplementar de usuários, mas 'groups (1)' não mostrando a mudança hoje cedo. Agora eu gostaria de saber porque a resposta funciona. Depois de correr

adduser user group

Por que o usuário precisa fazer logout (nem tenho certeza do que isso significa em um contexto sem um gerenciador de janelas), ou por que o newgrp (1) precisa ser invocado?

    
por fthinker 17.10.2013 / 04:33

2 respostas

3

Se você der uma olhada na página man, credenciais , verá por que os processos filhos não podem ter alterações feita via adduser imediatamente refletida em tempo real:

trecho

A child process created by fork(2) inherits copies of its parent's user and groups IDs. During an execve(2), a process's real user and group ID and supplementary group IDs are preserved; the effective and saved set IDs may be changed, as described in execve(2).

Então, o que isso significa?

Efetuar logout termina o processo pai do qual todos os processos subsequentes foram bifurcados. Tudo na sua área de trabalho, etc. Esse processo original continha informações sobre seus grupos, o que é preenchido com a leitura de /etc/passwd & /etc/group .

Outro arquivo que desempenha um papel em como seu ambiente obtém as informações de seus grupos é /etc/nsswitch.conf . Este arquivo contém linhas como esta:

passwd:     files
shadow:     files
group:      files

Isso instrui o seu sistema a ler apenas essas informações em relação a senhas, grupos, etc. dos arquivos que acabei de mencionar.

Essas linhas poderiam facilmente instruir o sistema a usar outras fontes, como NIS, LDAP, etc., para obter essas informações.

nsswitch.conf

Se você der uma olhada na página nsswitch.conf man, você descobrirá como o sistema é capaz de obter o conteúdo dos vários "bancos de dados" de nomes de usuários, grupos e senhas.

trecho

FILES
       A service named SERVICE is implemented by a shared object library named 
       libnss_SERVICE.so.X that resides in /lib.

       /etc/nsswitch.conf       configuration file
       /lib/libnss_compat.so.X  implements 'compat' source for glibc2
       /lib/libnss_db.so.X      implements 'db' source for glibc2
       /lib/libnss_dns.so.X     implements 'dns' source for glibc2
       /lib/libnss_files.so.X   implements 'files' source for glibc2
       /lib/libnss_hesiod.so.X  implements 'hesiod' source for glibc2
       /lib/libnss_nis.so.X     implements 'nis' source for glibc2
       /lib/libnss_nisplus.so.2 implements 'nisplus' source for glibc 2.1

NOTES
       Within each process that uses nsswitch.conf, the entire file is read only
       once; if the file is later changed, the process will continue using the 
       old  configuration.

Se você observar esta observação, ela refletirá uma situação semelhante com esse arquivo, em que as alterações feitas no nsswitch.conf também não poderão ser feitas em tempo real.

    
por 17.10.2013 / 05:01
0

É necessário porque a participação no grupo é lida no login. Todas essas informações são armazenadas com essa sessão e não são relidas.

    
por 17.10.2013 / 04:41