Por que o setuid não funciona? [duplicado]

11

Eu quero garantir que meu programa só possa ser executado pelo usuário xyz usando o privilégio de root. Para fazer isso, eu defino o bit setuid com:

chmod u+s program1.sh
ls -l program1.sh
rwsr-x--- 1 root house 1299 May 15 23:54 program1.sh

Além disso, adicionei o usuário xyz ao grupo house para que apenas xyz e root possam executar o program1.sh.

No program1.sh existe

id -u

para que ele possa me mostrar o ID efetivo.

Executando program1.sh como root, mostra root . Mas, com a conta xyz , mostra xyz . Parece que não foi executado com privilégios de root. Eu não sei o que há de errado aqui.

    
por Marcus Thornton 19.05.2014 / 08:46

1 resposta

29

Ao executar scripts de shell que possuem o bit setuid (por exemplo, perms de rwsr-xr-x), os scripts são executados como o usuário que os executa, não como o usuário que os possui. Isso é contrário a como o setuid é tratado para binários (por exemplo, / usr / bin / passwd), que são executados como o usuário que os possui, independentemente de qual usuário os executa.

Verifique esta página: link

Esta é uma medida de segurança tomada pelo sistema operacional. Você deve usar seu script com sudo .

Se você realmente precisa usar o seu script, você pode criar um binário que fará o trabalho. Crie um novo arquivo “program.c” e copie o seguinte código:

   #include <stdio.h>
   #include <stdlib.h>
   #include <sys/types.h>
   #include <unistd.h>

   int main()
   {
   setuid(0);
   system("./program.sh");
   return 0;
   }

Compile e execute o código usando os seguintes comandos:

$ gcc program.c -o program
$ sudo chown root.root program
$ sudo chmod 4755 program
$ ./program

Desta forma, funcionará. O setuid funciona para o arquivo compilado, e este arquivo pode executar outros arquivos como root.

    
por 19.05.2014 / 09:10