Странное поведение strace и setuid: разрешение не разрешено, но не работает нормально

4041
James

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

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

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).

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

Итак, подведем итоги: у `setuid` так много дыр в безопасности, что я просто не должен ожидать, что он сработает, и когда-либо использовать его когда-нибудь - очень плохая идея? James 13 лет назад 0
@Autopulated: Нет. Мой пост описывает только * один * эксплойт, с 2003 года, а не "много". И это * неосторожное использование * setuid, а не самой функции, которая приводит к дырам в безопасности. Тщательно написанные программы работают нормально. Однако лучше избегать setuid и * особенно * в вашем случае "пароля Gmail" (для которого я предложил другое решение). grawity 13 лет назад 0