Kernel Linux: uid e gid vs / etc / passwd

3

Como o kernel do Linux lida com UIDs e GIDs?

Quando eu quero adicionar um usuário a um sistema, o kernel requer algum tipo de "registro" para este usuário (syscall?)? O kernel ainda se importa com quais usuários estão disponíveis em / etc / passwd ou simplesmente conhece e lida com valores numéricos independentemente do conteúdo desse arquivo?

    
por Axel Fontaine 15.01.2013 / 20:52

3 respostas

6

Para o kernel, um usuário ou um grupo são apenas um número (o UID e o GID) anexado a um processo e que são usados para ver se o processo é permitido, por ex. leia (realmente aberto (2)) um arquivo (arquivos carregam UID / GID e bits de permissão ao redor para este propósito), e também outras operações (por exemplo, processos podem manipular processos pertencentes ao mesmo UID). Existem chamadas do sistema para alterar o UID / GID do processo de chamada (setuid (2) / setgid (2) e amigos). Obviamente, há severas restrições sobre quem pode usá-las.

O sistema pode usar os números para procurar nomes em / etc / passwd, / etc / group ou uma série de outros mecanismos (LDAP, NIS, outros), mas isso é estritamente para consumo humano.

Quando você efetua login e atribui seu nome de usuário, um programa (executado como root e assim permitido fazer muitas coisas que usuários normais não são permitidos) pega o nome de usuário e pesquisa o UID (para ver se esse usuário existe em primeiro lugar), pede a senha (ou alguma outra autenticação) e a verifica. Se tudo correr bem, o programa muda para esse UID / GID e exec (2) é o shell do usuário (que, novamente, é apenas um programa comum, exatamente qual deles iniciar é parte da descrição da conta do usuário) .

    
por 15.01.2013 / 22:28
6

O kernel não se importa com /etc/passwd . Nem toda a autenticação é feita usando um arquivo /etc/passwd . As informações do usuário podem vir do NIS ou LDAP, por exemplo.

    
por 15.01.2013 / 22:00
4

O cheque que você está procurando está em acl_permission_check() em fs/namei.c . Ele apenas verifica os valores brutos do ID do usuário e do grupo para o usuário fazer a chamada do sistema em relação aos valores encontrados no inode do arquivo.

Para um sistema de arquivos POSIX normal, o caminho completo da chamada é:

  • open(2)
  • sys_open()
  • do_sys_open()
  • do_filp_open()
  • finish_open()
  • may_open()
  • inode_permission()
  • generic_permission()
  • acl_permission_check()

Para outros tipos de sistema de arquivos (por exemplo, FAT), a cadeia de chamadas pode variar devido à falta de inodes, bits de permissão e outros.

O kernel não se importa de onde os IDs de usuário e grupo vêm, ou quais são seus valores reais.

    
por 15.01.2013 / 22:25