Я создаю графический установщик, который должен работать в Linux. Установка должна состоять из копирования файлов в некоторые места в /usr
. В настоящее время программа установки написана на Python.
Как я могу повысить привилегии моего установщика, когда мне нужно скопировать файлы? Я посмотрел на PolicyKit , но
- a) похоже, что не существует общего идентификатора действия "install files" для PolicyKit
- b) идентификаторов действий, которые я могу использовать, я не думаю, что они являются стандартными в дистрибутивах
Я также посмотрел на PAM, и у меня есть код, который использует libpam, но я не могу ничего с этим поделать. После аутентификации моего пользователя (путем предоставления имени пользователя и пароля) у меня нет доступа на запись к /usr
. Я попытался сменить пользователя на os.setuid(0)
после аутентификации, но я получил ошибку от ОС.
Также, как ни странно, неважно, какую услугу я предоставляю pam_start
. Пока имя пользователя и пароль верны, я могу передать все, что захочу. Я вижу, у меня есть /etc/pam.d/sudo
. Приведенный ниже код упрощен, пароль правильно хранится в объекте pam_conversation
, и я передаю объект дескриптора.
pam_start("my_user", "my_pass", "sudo_garbage_12345");
работает так же хорошо, как и
pam_start("my_user", "my_pass", "sudo");
То есть они оба преуспевают.
В крайнем случае я могу выполнить gksudo
или kdesudo
, но я не хочу привязываться к этим программам. Требование к пользователям вызывать мой установщик с помощью sudo
является (очень) последним средством.