Я написал программу, скомпилировал ее, скопировал в / usr / local / bin / и дал ей права доступа к файлу setuid-root.
К сожалению, я не могу заставить программу работать должным образом из-за проблем с разрешениями, то есть она хорошо работает, когда я вызываю ее как непривилегированный пользователь из командной строки, но выдает ошибки, когда я вызываю ее как непривилегированный пользователь из модуля PAM pam_exec - и именно так я хочу его использовать в конце.
До сих пор у меня были следующие различия между вызовом его из командной строки и вызовом из pam_exec:
Когда я не даю программе права доступа к файлу setuid-root, но вместо этого даю ей возможность Linux cap_setuid, которая работает из командной строки, но с pam_exec программа не запускается вообще, с ошибкой «Операция запрещена».
Для дальнейшего выполнения программы не только эффективный, но и реальный UID должен быть 0. Из командной строки это работает, когда я использую setuid (0) в программном коде, но с pam_exec setuid (0) не работает. чтобы изменить реальный UID, и вместо этого я должен использовать setreuid (0,0).
Хотя реальный и эффективный UID равен 0, я все равно получаю такие ошибки, как «Permission denied» и «Operation not allowed», когда программа вызывается из pam_exec. Во-первых, это произошло при выполнении внешней команды lvcreate из моей программы setuid-root, и после того, как я решил, что теперь, используя вместо этого вызовы библиотеки lvm dbus, я даже получаю сообщение «Операция запрещена» при выполнении простого chown () в каталоге в локальная файловая система. Конечно, все это отлично работает, когда я запускаю свою программу из командной строки.
Любая идея о возможных причинах того, почему программа с разрешением файла setuid-root (или программа со специальными возможностями Linux), когда она вызывается непривилегированным пользователем из модуля PAM pam_exec, ведет себя совсем иначе, чем когда она вызывается непривилегированным пользователем из командная строка? Или как вообще возможно, что ошибки «Операция запрещена» и «В разрешении запрещена» возникают, если и getuid (), и geteuid () возвращают 0?
С Уважением Кристоф
@arash kordi: Вы имеете в виду SELinux или AppArmor? Раньше у меня был включен apparmor, но когда впервые возникли проблемы с моей программой, я отключил его - не помогло.





похоже, какой-то модуль безопасности не любит вашу программу, проверьте журналы systemd