Isso está relacionado a esta pergunta .
Eu tenho um script ( fix-permissions.sh
) que corrige algumas permissões de arquivo:
#! /bin/bash
sudo chown -R person:group /path/
sudo chmod -R g+rw /path/
E um pequeno programa c para executar isso, que é setuid
ed:
#include "sys/types.h"
#include "unistd.h"
int main(){
setuid(geteuid());
return system("/path/fix-permissions.sh");
}
Diretório:
-rwsr-xr-x 1 root root 7228 Feb 19 17:33 fix-permissions
-rwx--x--x 1 root root 112 Feb 19 13:38 fix-permissions.sh
Se eu fizer isso, tudo parece bem e as permissões são corrigidas corretamente:
james $ sudo su someone-else
someone-else $ ./fix-permissions
mas se eu usar strace, recebo:
someone-else $ strace ./fix-permissions
/bin/bash: /path/fix-permissions.sh: Permission denied
É interessante notar que recebo a mesma permissão negada de erro com uma configuração idêntica (permissões, programa c), mas um script diferente, mesmo quando não estou usando strace. Isso é algum tipo de comportamento de magia heurustica no cenário que estou descobrindo?
Como devo descobrir o que está acontecendo?
O sistema é o Ubuntu 10.04.2 LTS, Linux 2.6.32.26-kvm-i386-20101122 # 1 SMP