porque o bit suid é desfeito depois da modificação do arquivo

3

Eu tenho um arquivo uid gravável:

ls -lh suid_bin.sh
-rwsr-srwx 1 root root 168 mai   23 16:46 suid_bin.sh

logado com uma conta de usuário não-root. Eu uso o vi (ou outro editor) para modificar "suid_bin.sh". Depois de salvar o novo conteúdo, (s | g) os bits uid não são definidos:

ls -lh suid_bin.sh 
-rwxr-xrwx 1 root root 168 mai   23 16:46 suid_bin.sh

Por quê? Existe uma maneira de manter (s | g) bits uid após a modificação?

    
por nuggets 23.05.2016 / 16:57

1 resposta

6

As permissões Unix permitem gravar no arquivo, se acidentalmente alguém definir o grupo ou o bit gravável no arquivo setuid, mas não permitir a alteração de IDs de proprietários e grupos em tais arquivos por estranhos.

Assim, após a modificação, o kernel remove os bits setuid / setgid do arquivo para garantir que não haja código malicioso gravado no arquivo.

usuário root, claro, pode restaurar bit setuid, mas usuário comum, se ele, por erro de alguém ganhou acesso de gravação para o executável privilegiado não será capaz de explorá-lo.

E, conhecendo partes do kernel nessa área, não tenho certeza se você pode desabilitar isso sem editar o código-fonte do kernel e recompilar.

Observe que os scripts setuid no Linux não ganham status setuid após a execução porque, na verdade, o kernel inicia o interpretador de script, sem o status setuid, com o caminho completo para script como seu último argumento analisado e, em seguida, interprete o script como um arquivo comum . Mas isso pode variar em outros sistemas Unix.

    
por 23.05.2016 / 18:02