Linux - por que os binários su e sudo precisam ser set-UID root?

1

Estou tentando encontrar o motivo correto para a questão declarada. Meu entendimento é que:

  • sudo precisa ler o arquivo /etc/sudoers que só pode ser lido pelo root, e é por isso que ele precisa ser set-UID root
  • su criará um novo shell com um UID real e efetivo diferente e precisará verificar a senha. Para verificar a senha, ela precisa ler /etc/shadow , e é por isso que ela precisa ser set-UID root. Após verificar a senha, seria necessário chamar setuid() no processo bifurcado e, para usar um argumento UID arbitrário, seu processo pai deve ter raiz como UID efetivo, portanto isso também cria outro motivo.

As razões acima estão corretas?

    
por Jake 28.08.2018 / 09:47

1 resposta

5

Seus motivos estão corretos, mas em ambos os casos ( su e sudo ), a razão básica pela qual eles precisam ser executados como root, é que eles precisam alterar os vários identificadores de usuário e grupo do Processo atual. Isso envolve chamar funções como setreuid , que funcionam apenas para usuários e grupos arbitrários. se o processo de chamada estiver sendo executado como root.

Tanto su como sudo têm outros recursos que também exigem execução como raiz, mas são efetivamente detalhes secundários quando comparados com o acima. Como você mencionou, sudo precisa ler /etc/sudoers ; mas o fato de que o último é legível apenas pela raiz não é um requisito difícil. Ambos os programas podem usar o PAM para executar a autenticação, mas normalmente também incluem fallbacks que exigem a leitura de /etc/shadow , que também é legível apenas pelo root. A lista continua; mas isso realmente não importa, já que o fato inescapável é que a capacidade de alterar usuários e / ou grupos é atribuída somente ao root, e é por isso que su e sudo são setuid root.

Como funcionam os internos do sudo? e as perguntas relacionadas fornecem informações adicionais.

    
por 28.08.2018 / 10:05

Tags