Проблемы с правами доступа в программе setuid-root

329
Christoph

Я написал программу, скомпилировал ее, скопировал в / usr / local / bin / и дал ей разрешение на доступ к файлу setuid-root.

К сожалению, я не могу заставить программу работать должным образом из-за проблем с разрешениями, то есть она работает хорошо, когда я называю ее непривилегированным пользователем из командной строки, но выдает ошибки, когда я называю ее непривилегированной. Пользователь из модуля PAM pam_exec - и вот как я хочу использовать его в конце.

До сих пор у меня были следующие различия между вызовом его из командной строки и вызовом его из pam_exec:

  1. Когда я не даю программе права доступа к файлу setuid-root, а вместо этого даю ей возможность cap_setuid для Linux, которая работает из командной строки, но с pam_exec программа вообще не запускается с ошибкой «Операция не разрешена».

  2. Для дальнейшего выполнения программы не только эффективный, но и реальный UID должен быть равен 0. Из командной строки это работает, когда я использую setuid (0) в программном коде, но с pam_exec, setuid (0) завершается неудачно чтобы изменить реальный UID, я должен вместо этого использовать setreuid (0,0).

  3. Хотя реальный и эффективный UID равен 0, я по-прежнему получаю сообщения об ошибках типа «Отказано в доступе» и «Операция не разрешена» при вызове программы из pam_exec. Во-первых, это произошло при выполнении внешней команды lvcreate из моей программы setuid-root, и после того, как я решил, что теперь, используя вместо этого вызовы библиотеки lvm dbus, я даже получаю «Операция не разрешена» при выполнении простой команды chown () в каталоге в локальная файловая система. Конечно, все это прекрасно работает, когда я запускаю свою программу из командной строки.

Любая идея о возможных причинах, почему программа с разрешением файла setuid-root (или программа со специальными возможностями Linux), когда она вызывается непривилегированным пользователем из PAM-модуля pam_exec, ведет себя очень иначе, чем когда она вызывается непривилегированным пользователем из командная строка? Или как вообще возможно, что возникают ошибки «Операция не разрешена» и «Отказано в доступе», хотя и getuid (), и geteuid () возвращают 0?

С уважением Кристоф

0
Что именно здесь слишком широко? Я уже описал проблему в нескольких списках рассылки, и нигде не нашел удовлетворительного решения или даже малейшего намека на то, что может быть причиной проблем с разрешениями, поэтому я предполагаю, что более конкретный вопрос снизит шансы получить ответ вообще , Christoph 5 лет назад 0

0 ответов на вопрос

Похожие вопросы