De APUE
O ID do usuário real e o ID do grupo real de um processo identificam quem realmente somos. Esses dois campos são retirados de nossa entrada no arquivo de senhas quando efetuamos login. Normalmente, esses valores não mudam durante uma sessão de login, embora existam maneiras de um processo de superusuário alterá-los
Um processo de superusuário pode alterar o ID do usuário real e o ID do grupo real de um processo, para que a relação entre o ID do usuário real e o ID do grupo real não corresponda aos do arquivo de senha? Por exemplo, se o usuário Tim
não for um membro do grupo ocean
por um arquivo de senha, um processo de superusuário pode alterar o ID do usuário real e o ID do grupo real de um processo Tim
e, ocean
respectivamente?
Respostas:
Sim, um processo de superusuário pode alterar seu ID do usuário real e o ID do grupo real para qualquer valor que desejar. Os valores
/etc/passwd
e/etc/shadow
são a configuração para quais valores devem ser definidos, mas não uma limitação dos valores possíveis.Editar # 1
Isso significa que programas como
login
lerão os valores dos arquivos, portanto, os arquivos são arquivos de configuração ou arquivos de entrada. Eles não são restrições sobre o que um programa pode fazer. Um processo de superusuário pode passar qualquer valor para o kernel, e o kernel não verifica nenhum arquivo.Um programa poderia chamar
e isso funcionaria, mesmo que nenhum dos IDs seja mencionado em qualquer arquivo.
fonte
O arquivo de senha e o arquivo de grupo não são lidos, eles são lidos apenas pelo processo de login, para definir o ID do usuário real e o ID do grupo real.
Não há nada no kernel mencionando esses arquivos. O login deve abrir os arquivos, processá-los e definir os dois IDs. Poderia ser escrito de forma diferente para obter esses IDs de outro lugar. Por exemplo, de um banco de dados em rede.
Qualquer processo com capacidade CAP_SETUID pode definir esses IDs, a raiz possui essa capacidade.
O modelo de segurança no Unix é parte implementada no kernel e parte implementada em processos executados com recursos elevados (por exemplo, como root).
Note-se que
/etc/passwd
e/etc/group
também são lidos porls
,ps
e qualquer outro programa que precisa traduzir nomes de usuário / grupo de / para IDs de usuário / grupo. (Eles podem fazer isso através de uma biblioteca, do que sabem sobre métodos alternativos de armazenamento desses detalhes.)fonte
/etc/passwd
,/etc/groups
) também são lidos por processos que desejam mostrar ou processar nomes de usuário em vez dos IDs numéricos internos, por exemplo,ps
els
.Entre outras coisas, o objetivo
/etc/passwd
é converter o nome de um usuário no UID do usuário . Se você não se importa com o que é o UID de bob, não precisa desse arquivo. Se você deseja apenas mudar para um UID / GID arbitrário, use os syscalls relevantes:Observe que um processo privilegiado com os recursos
CAP_SETUID
e (que geralmente possui um processo raiz) só pode alterar seu próprio UID e GID, não o de outro processo em execução.CAP_SETGID
fonte