A resposta marcada respondeu perfeitamente a minha pergunta. O que eu coloco aqui é a lógica extra que é útil para explicar a existência da permissão SUID em relação ao cenário de alteração de senha.
-
No Linux, os arquivos bin executáveis devem ser executados por diferentes usuários.
For example, /usr/bin/nano
is a bin for a text editor, it makes sense that this same executable bin file can be executed by different users (why make copies of the same bin file to each user's home filesystem?)
-
Mesmo que muitos usuários possam usar o mesmo arquivo bin, o processo iniciado por esse arquivo bin deve ter permissões diferentes em um arquivo.
For example, userA and userB should both be able to create two nano processes by executing the same /usr/bin/nano
bin file. However, userA's nano process should allow userA to modify his own files and only his own files and vice versa.
This calls for a mechanism by which a process should apply the same permission that the user who started that process has on a file to that file (instead of the permission of the user who owns the executable bin file which was executed to create the process).
No Linux, cada processo tem o RUID . O RUID é o id do usuário que inicia esse processo. Por essa lógica, o RUID de um processo deve ser o usuário cuja permissão em um arquivo é usada por esse processo (por exemplo, um processo decide o que ele pode fazer com um arquivo baseado em seu RUID usuário pode fazer para esse arquivo).
No entanto, no caso de alterar a senha, o RUID sozinho não é suficiente porque:
-
O arquivo
/etc/shadow
não pode ser modificado por ninguém, mas root .
- Qualquer usuário que queira alterar a senha precisa fazer isso através da execução de
/usr/bin/passwd
arquivo bin executável. A lógica deste programa garante que um usuário desprivilegiado possa alterar sua senha e apenas sua senha.
- Nenhum usuário, exceto o root, pode alterar essa lógica, pois somente o root pode gravar nesse arquivo bin.
- Se userA executar
/usr/bin/passwd
, ele iniciará um passwd
processo cujo RUID é userA .
- No entanto, como userA não tem permissão para gravar em
/etc/shadow
, o passwd
processo iniciado não pode gravar nesse arquivo também.
This calls for a mechanism by which a process decides its permissions to a file based on another user's permissions on that file (instead of the permissions of the user who started the process).
No Linux, a permissão que um processo tem em um arquivo é retirada da permissão que o EUID tem nesse arquivo.
Com EUID , root agora pode usar permissão SUID para permitir que userA inicie um passwd
< strong> process que tem o EUID definido como root . Isso efetivamente permite que o passwd
processo iniciado por userA modifique o arquivo /etc/shadow
.