
Мой вопрос в том, как мне настроить systemd(?), чтобы он перестал открывать это раздражающее всплывающее окно всякий раз, когда я забываю ввести sudo. Просто дайте мне текстовую подсказку sudo или покажите ошибку, чтобы я мог быстро исправить ошибку.
Это Arch Linux, последняя версия (systemd 238.133).
решение1
Это не приглашение 'sudo', это приглашение 'polkit'. Один из способов избежать этого – global toвсепрограммное обеспечение, а не только systemctl, — это написать правило polkit, которое немедленно запрещает действие (или немедленно разрешает его).
polkit.addRule(function(action, subject) {
if (subject.user !== "root") {
if (/^org\.freedesktop\.systemd1\./.test(action.id)) {
return polkit.Result.NO;
}
}
});
( subject.user
Тест можно было бы пропустить, так как действия, вызываемые root, полностью обходят проверки polkit.)
Правила polkit хранятся в /etc/polkit/rules.d/*.rules
, обычно именуются как 80-custom.rules
(обрабатываются в порядке возрастания). Для получения дополнительной информации см.полькит(8).
(Тем не менее, если ваша конфигурация sudo не имеет пароля, то нет никакой практической разницы в безопасности между использованием 'sudo' и немедленной активацией polkit. И наоборот, если ваша конфигурация sudoтребуетпароль... тогда почему бы просто не ввести его в диалоговом окне polkit? Это тот же пароль.)
решение2
Есть вариант --no-ask-password
. Сделать псевдоним:
alias systemctl='systemctl --no-ask-password'
(протестировано в Bash, Kubuntu).
решение3
Не используйте sudo для systemctl,всегда; если выявляютсяразрешено проводить техническое обслуживание, правильно настраивать polkit.
Обоснование: sudo
делает программу, которую вы запускаете, эффективной для запрошенного пользователя (обычно: root
). Включая все связанные наборы инструментов. Любая ошибка в программе, библиотеках или ...конфигурации sudo делает вас уязвимыми. В случае systemd
, systemctl
двоичный файл является толькоконтроллер(в общем). Этонетребуют привилегий root (для большинства случаев использования), так как он не выполняет привилегированную операцию сам по себе, но запрашивает 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
Это последнее средство, решение «все или ничего».
Если вы хотите, чтобы запрос пароля отображался в текстовом, а не графическом виде, простосбросить DISPLAY, например:отвяжите свой терминал от графического сеанса, в котором запущен агент аутентификации.