Quando um usuário normal deseja alterar o arquivo passwd, o usuário por setuid recebe o acesso efetivo do usuário. O usuário se torna root temporariamente e pode editar a senha.
No entanto, você só pode editar sua senha corretamente, e nem todo mundo? No entanto, seu acesso efetivo ao usuário é raiz. Então, por que você não tem permissão para alterar outras senhas além das suas?
Quando você executa um programa com setuid, o que significa realmente quando um usuário efetivo é root, mas o ID do usuário real ainda é o seu nome?
Você só pode alterar apenas sua senha, apesar de ter um ID de usuário eficaz como root, porque no momento da alteração da senha, o ID de usuário real é verificado e não o ID de usuário efetivo. Você pode alterar apenas o ID do usuário efetivo e não o ID do usuário real.
Somente o usuário root pode alterar o ID do usuário real para executar o programa como usuário não privilegiado. O ID do usuário real não pode ser alterado, pois é definido no momento do início da sessão.
É por isso que apenas sua senha pode ser alterada, pois o ID do usuário real não é alterado (pois ainda é sua, não é raiz).
fonte
Um hack inicial no Unix foi criar um link simbólico para um script shell setuid e chamá-lo
-i
. Isso faz com que o script seja chamado como osh -i
qual, em vez de executar o script chamado-i
como pretendido, lança um shell interativo, que fornece todos os poderes. O ID do usuário eficaz pode ser usado para modificar opasswd
arquivo para qualquer usuário ou raiz. A melhor maneira de evitar isso é usar o SELinux para impedir que scripts ou programas confiáveis sejam modificados fora da área que o SELinux permite que eles executem.Outra técnica é ter um bit imutável em arquivos importantes que um conjunto não pode ser modificado nem mesmo pelo usuário root (exceto no modo de usuário único)
Como root, você pode convidar os usuários a fazer logon no sistema sem uma senha e aparecer como qualquer usuário, mas os processos com privilégios normais se esforçam muito para impedir que isso aconteça.
Se você usar algum tipo de sistema de arquivamento em rede, o usuário root será tratado como ninguém naquele espaço no arquivo, em vez de root, o que permite que computadores não confiáveis ingressem em uma rede confiável, como um campus universitário.
fonte
Você só pode alterar sua senha, porque o programa set-password, embora tenha o poder de fazer qualquer coisa, está programado para alterar apenas senhas. Ele verificará o ID do usuário real, para decidir qual senha alterar.
Como você não pode alterar sua identificação de usuário real, mesmo chamando um programa set-uid, o programa pode usá-lo para implementar a segurança. O sistema operacional renuncia à segurança do programa raiz set uid.
Nota: o programa raiz set uid também pode alterar o ID do usuário real (mas isso não é útil neste caso de uso).
Aviso: definir uid root é considerado prejudicial (muito menos que o ideal). Devemos usar recursos hoje em dia (consulte Quais são as diferentes maneiras de definir permissões de arquivo etc. no gnu / linux e http://man7.org/linux/man-pages/man7/capabilities.7.html )
fonte