Программа не может загрузиться после установки бита setuid - PullRequest
6 голосов
/ 21 августа 2009

Рассмотрим сценарий, в котором исполняемый файл A.bin использует libY.so и libZ.so. A.c, Y.c и Z.c все написаны на C. Z.c и Y.c скомпилированы в соответствующие файлы .so.

Это структура каталогов файлов

$ дом / бен / A.bin $ Домой / Библиотека / libY.so $ Главная / Библиотека / libZ.so

Когда я запускаю A.bin как обычный пользователь, A.bin работает как обычно. Примечание: $ LD_LIBRARY_PATH содержит $ home / lib

Я изменил некоторый код в A.c, добавив некоторые функции, которые требуют привилегий администратора (например, привязка к порту менее 1000). Я установил бит setuid для A.bin, libY.so и libZ.so в rwsrwsrws и изменил владельца файлов на root. Когда я пытаюсь запустить A.bin, я получаю следующую ошибку

ld.so.1: A.bin: fatal: libY.so: открыть не удалось: такого файла или каталога нет Убитые

Когда я просто удаляю разрешение setuid из всех этих файлов, запускается двоичный файл, за исключением функциональных возможностей, где ему требуются права root.

Как преодолеть эту проблему?

Редактировать: ОС Solaris 5.10

Ответы [ 2 ]

10 голосов
/ 21 августа 2009

Как сказал AProgrammer, при выполнении программ setuid $ LD_LIBRARY_PATH игнорируется. Следовательно, путь должен быть жестко закодирован в самом исполняемом файле с использованием этого флага при соединении

gcc -R $ home / lib

Флаг -R встраивает список путей поиска во время выполнения в исполняемый файл.

Ссылка: http://www.justskins.com/forums/loading-shared-libraries-from-a-setuid-program-116597.html

3 голосов
/ 21 августа 2009

В некоторых вариантах Unix исполняемые файлы suid имеют некоторые функции безопасности, такие как игнорирование LD_LIBRARY_PATH, проверка владения и прав доступа к исполняемому файлу и используемым разделяемым библиотекам ... Я не помню случай с Solaris, но вам, вероятно, следует проверьте это.

...