1

Это связано с этим вопросом.

У меня есть скрипт (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

1 ответ1

4

Linux игнорирует бит setuid при запуске процесса под управлением strace или аналогичных программ.

  • Список рассылки ядра Linux, Re: 2.4.16 + strace 4.4 + программы setuid:

    От: Манфред Спраули
    Дата: чт дек 06 2001 - 12:25:53 EST

    Если вы хотите связать вещи setuid с заданным битом setuid, вам нужно запустить strace как root с параметром -u.

    Нет, даже это больше невозможно. setuid теперь всегда игнорируется, если процесс ptraced, даже если root является ptracing - это исправление для последнего эксплойта ptrace root (2.4.1x).

что, вероятно, говорит о:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .