Использование Policy Kit с golang для повышения привилегий - PullRequest
0 голосов
/ 07 марта 2019

Я пишу программу на Голанге, которая должна будет выполнять задачи с ICMP. Он также будет работать на веб-сервере через порт 80. Для этого мне нужны определенные привилегии в Linux.

Я хочу подражать тому, как SystemD получает привилегии с помощью команды systemctl при запуске непривилегированным пользователем. Поведение, которое я хочу эмулировать, воспроизводимо, если вы запустите, например: systemctl stop sshd как пользователь с правами администратора, но не root

Мой вопрос; Как я могу использовать policykit для повышения привилегий программы, которая в данный момент работает, без перезапуска программы, как в команде SystemD systemctl. Я уже псевдо-выполнил эту задачу, привязав stdin, stdout и stderr к команде из

exec.Command("pkexec", ...)

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

Я оставляю родительский процесс висящим на дочернем процессоре, чтобы оболочка продолжала ждать процесса.

Я не хочу, чтобы пользователи этой программы имели дело с необходимостью запускать sudo или другие схемы управления, я просто хочу, чтобы они могли загружать двоичный файл программы, ./ исполняемый файл, а затем программа сделает это. Мне кажется разумным запрашивать пароль для polkit и т. Д. Внутри программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...