остановить systemctl с помощью графического приглашения sudo

остановить systemctl с помощью графического приглашения sudo

Мой вопрос в том, как мне настроить 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, например:отвяжите свой терминал от графического сеанса, в котором запущен агент аутентификации.

Связанный контент