Исполняемый файл с setuid не находит разделяемую библиотеку

ребята.

Вот моя проблема:

У меня есть исполняемый файл, которому нужно создать папку в определенном месте в системе.

Я бы хотел, чтобы он мог это сделать независимо от того, кто его выполняет.

Моя идея заключалась в том, чтобы предоставить пользователю родительскую папку (ту, в которой исполняемый файл должен создавать папки), а исполняемый файл — тому же пользователю. Затем установите бит setuid в исполняемом файле. Таким образом, исполняемый файл выполняется с правами этого пользователя, поэтому он имеет права на папку.

Вот в чем дело: исполняемый файл использует общую библиотеку, которая находится рядом с ним.

Когда запускаю без бита setuid, все нормально работает (ну кроме создания папки, понятно, но экзешник запускается).

Однако, когда я запускаю его с битом setuid, система говорит мне, что не может найти разделяемую библиотеку, которая, очевидно, не была перемещена и у которой есть права на чтение и выполнение для всех.

Что творится ? Что мне не хватает?

Спасибо.


person Pouf    schedule 19.07.2018    source источник


Ответы (1)


необходимо создать папку в определенном месте в системе.

В системах UNIX нет папок, правильное имя — «каталог».

Затем установите бит setuid в исполняемом файле

В общем, это очень плохая идея (ТМ). Написание кода, который будет работать как часть исполняемого файла setuid, требует большой осторожности, и тот факт, что вы задаете этот вопрос, указывает на то, что вы, вероятно, не готовы выполнить эту задачу.

Когда я запускаю его без бита setuid, все работает нормально

Как двоичный файл находит требуемую разделяемую библиотеку?

Скорее всего, вы установили LD_LIBRARY_PATH для включения каталога, в котором находится разделяемая библиотека.

Однако, когда я запускаю его с битом setuid, система сообщает мне, что не может найти общую библиотеку,

Если моя догадка LD_LIBRARY_PATH верна, то ожидается следующее: двоичные файлы setuid игнорируют LD_LIBRARY_PATH (по очевидным причинам безопасности).

Вы можете исправить это, используя -Wl,--rpath='$ORIGIN' при связывании исполняемого файла и сбросе настроек LD_LIBRARY_PATH — теперь исполняемый файл должен работать с битом setuid или без него.

person Employed Russian    schedule 21.07.2018