suid executáveis só funcionam quando presentes no sistema PATH

3

Eu tenho um executável que requer privilégios de root. Mas parece funcionar apenas quando está presente no caminho do sistema. Quando eu executo assim:

$ ./prog

O programa reclama de não ter acesso root. Parece que é outra restrição de segurança em programas suid, mas eu pesquisei e não consigo encontrar nada relacionado a ele na rede. Por que isso funciona assim? E há uma maneira elegante de fazer alguns testes neste programa além de adicionar . ao PATH ou chamar make como root?

Edit: Não funciona mesmo quando o diretório atual está no PATH.

    
por saga 22.01.2017 / 11:10

1 resposta

3

Não há nada especial sobre qual nome de caminho você usa para invocar um programa que pode fazer a diferença se seu bit setuid será ou não honrado. É certo que uma das duas coisas está acontecendo aqui. Qualquer um

  • os prog encontrados no $PATH e o prog encontrados no diretório atual não são, de fato, os mesmos prog . Você tem certeza de que prog sozinho está encontrando a mesma cópia de prog via $PATH ?
    • (Exceção: Eu posso pensar em um caso de borda improvável aqui, onde eles podem ser o mesmo arquivo como eles são o mesmo inode, mas eles são alcançados através de diferentes pontos de montagem, um dos quais tem nosuid e um dos quais não faz.)
  • O prog está consultando seu argv[0] para ver como ele foi invocado e está se recusando a agir de acordo com seus poderes (ou está soltando-os) se ele não encontrar o que espera.
por 22.01.2017 / 16:10