Como o comando passwd da conta não-raiz é bem-sucedido

3

Estou tentando alterar minha senha como um usuário não raiz:

passwd 

Os dados são atualizados em / etc / shadow, mas checam a permissão:

---------- 1 root root 6076 Jan 27 17:14 /etc/shadow
cat /etc/shadow
cat: /etc/shadow: Permission denied

Claramente, não havia permissões no arquivo para ninguém, mesmo assim, o comando passwd é bem-sucedido e estou indiretamente atualizando dados para um recurso não previligiado (arquivo de sombra)! Então, alguém pode explicar o mecanismo de como a atualização ocorre em segundo plano? Explicação com referência às chamadas do sistema será muito útil.

    
por Puneet S. Chauhan 27.01.2015 / 13:17

1 resposta

3

O utilitário passwd está instalado setuid , o que significa que, quando executado, ele é executado como o usuário que possui o arquivo , não como o usuário que o chamou. Nesse caso, passwd pertence a root , portanto, o setuid bit faz com que o programa seja executado com privilégios de root. Portanto, é possível fazer alterações nos arquivos passwd e shadow .

Se você olhar as permissões para o utilitário passwd , verá algo assim:

-r-sr-xr-x  2 root  wheel   8.2K 19 Jan 17:24 /usr/bin/passwd

Isto é do meu sistema FreeBSD - o que você vê dependerá do SO que você está usando. O s na posição de execução do proprietário (4ª coluna) indica o setuid bit.

Para referência futura, o syscall é setuid e faz parte da biblioteca C padrão.

    
por 27.01.2015 / 13:37