Я пишу программу на Голанге, которая должна будет выполнять задачи с ICMP. Он также будет работать на веб-сервере через порт 80. Для этого мне нужны определенные привилегии в Linux.
Я хочу подражать тому, как SystemD получает привилегии с помощью команды systemctl
при запуске непривилегированным пользователем. Поведение, которое я хочу эмулировать, воспроизводимо, если вы запустите, например: systemctl stop sshd
как пользователь с правами администратора, но не root
Мой вопрос; Как я могу использовать policykit для повышения привилегий программы, которая в данный момент работает, без перезапуска программы, как в команде SystemD systemctl
. Я уже псевдо-выполнил эту задачу, привязав stdin, stdout и stderr к команде из
exec.Command("pkexec", ...)
но этот подход просто запускает программу снова как дочерний процесс, оставляя родительский процесс в ожидании выхода дочернего процесса. Это кажется ненужным и слишком сложным. Мне кажется, что лучшим решением было бы изменение разрешений процесса в интерактивном режиме, и я думаю, что policykit позволяет это сделать.
Я оставляю родительский процесс висящим на дочернем процессоре, чтобы оболочка продолжала ждать процесса.
Я не хочу, чтобы пользователи этой программы имели дело с необходимостью запускать sudo или другие схемы управления, я просто хочу, чтобы они могли загружать двоичный файл программы, ./ исполняемый файл, а затем программа сделает это. Мне кажется разумным запрашивать пароль для polkit и т. Д. Внутри программы.