Это связано с этим вопросом.
У меня есть скрипт (fix-permissions.sh
), который исправляет некоторые права доступа к файлам:
#! /bin/bash
sudo chown -R person:group /path/
sudo chmod -R g+rw /path/
И небольшая с программой для запуска этого, что setuid
- й изд:
#include "sys/types.h"
#include "unistd.h"
int main(){
setuid(geteuid());
return system("/path/fix-permissions.sh");
}
Справочник:
-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
Если я сделаю это, все будет хорошо, и права доступа будут исправлены правильно:
james $ sudo su someone-else
someone-else $ ./fix-permissions
но если я использую strace, я получаю:
someone-else $ strace ./fix-permissions
/bin/bash: /path/fix-permissions.sh: Permission denied
Интересно отметить, что я получаю ту же ошибку отказа в доступе с идентичной настройкой (permissions, c program), но другим сценарием, даже когда не используется strace. Это что-то вроде магического поведения в setuid, которое я раскрываю?
Как мне понять, что происходит?
Система Ubuntu 10.04.2 LTS, Linux 2.6.32.26-kvm-i386-20101122 # 1 SMP