Проблемы с правами доступа в программе setuid-root - PullRequest
0 голосов
/ 28 ноября 2018

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

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

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

  1. Когда я не предоставляю разрешение файла setuid-rootпрограмме, но вместо этого предоставьте ей возможность Linux cap_setuid, которая работает из командной строки, но с 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?

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

...