Рассмотрите этот сценарий, в котором исполняемый файл A.bin использует libY.so и libZ.so. A.c, Y.c и Z.c записаны в C. Z.c и Y.c скомпилированы в соответствующие .so файлы.Программа не может загрузить после установки бита setuid на
Это структура каталогов файлов
$ домой/бен/A.bin $ Главная/Библиотека/libY.so $ домой/Библиотека/libZ.so
Когда я бегу .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: со смертельным исходом: libY.so: открыть не удалось: Нет такого файла или каталога не Убитые
Когда я просто удалите разрешение setuid из всех этих файлов, тогда двоичные прогоны, за исключением функциональных сбоев, в которых ему нужны привилегии root.
Как преодолеть эту проблему?
Edit: ОС Solaris 5,10
* Любая * UNIX-подобная ОС должна игнорировать LD_LIBRARY_PATH для Setuid бинарных файлов, в противном случае это дыра в безопасности вы можете водить грузовик через. – caf
@caf: Я столкнулся с тем, кто этого не сделал. Все бинарные файлы setuid были статически связаны. – Joshua