Не используйте Sudo для systemctl, когда - либо; если вам разрешено делать техническое обслуживание, настроить polkit правильно.
Обоснование: sudo
делает программу, которую вы эффективно запускаете запрошенным пользователем (обычно: root
). Включая все связанные наборы инструментов. Любая ошибка в программе, библиотеках или ... конфигурации sudo делает вас уязвимыми. В случае systemd
бинарный файл systemctl
является всего лишь контроллером (в общем). Для него не требуются привилегии суперпользователя (для большинства случаев использования), поскольку он не выполняет привилегированную операцию сам по себе, а запрашивает init
. Использование действительной учетной записи root
(напрямую или через sudo
) - это атомарное решение (бомба) «все или ничего», в то время как единственное, что требуется, - это авторизоваться (не аутентифицироваться) против systemd
. Поскольку systemd
понимает polkit
для авторизации, использование аутентифицированного root
слишком много разрешений.
Рассмотрим ошибку в systemctl
, которая позволяет вызывать произвольную команду напрямую (не через systemd
). Когда разрешения root
задаются sudo
можно выполнить любую команду с EUID = 0. Когда systemctl
работает как непривилегированный пользователь, такую команду можно запустить только с той учетной записью, к которой он получил доступ ранее. Это простое следствие некоторых основных правил безопасности:
- использовать только необходимый набор разрешений (не полный набор ==
root
),
- предоставьте эти разрешения только коду, который требует этого (авторизуйтесь в
systemd
без предоставления разрешений для systemctl
).
Что касается того, что вы являетесь единственным пользователем компьютера - если вы работаете с непривилегированной учетной записью, а не с учетной записью root
, я предполагаю, что вы хотите ограничить программы, которые вы запускаете, от получения лишних разрешений. Предоставление их systemctl
только потому, что root
учетная запись authorized
для команды systemd
является таким лишним разрешением.
Более того, с помощью polkit
вы можете иметь разные критерии доступа для разных действий (запуск / остановка / перезагрузка / что угодно) и разных сервисов. Вы можете поместить точные команды в sudoers
, но решение polkit знает о конкретных частях таких команд.
Вывод: не используйте sudo
если доступен какой-либо менее привилегированный метод. sudo
- последнее или окончательное решение.
Если вы хотите, чтобы запрос пароля отображался в текстовом, а не графическом виде, просто unset DISPLAY, например: отсоедините ваш терминал от графического сеанса, который запускает агент аутентификации.