Вопрос или проблема
Запущена Ubuntu 24.04 LTS. У меня есть правила polkit, успешно ограничивающие выключение и приостановку до AUTH_ADMIN. Однако правила просто не работают для org.freedesktop.login1.reboot. Я не понимаю, в чем разница. Это работает, когда активны несколько сеансов, но я хочу предотвратить все перезагрузки, которые не выполняются администратором. Есть идеи?
Ответ или решение
Рассмотрим задачу с использованием polkit для ограничения перезагрузки системы в Ubuntu 24.04 LTS. Polkit (PolicyKit) — это система управления в Linux для определения прав доступа, которая позволяет задавать политики для различных задач. Если правила polkit работают для "power-off" и "suspend", но не работают для "org.freedesktop.login1.reboot", необходимо глубже изучить, почему так происходит и как можно решить эту проблему.
Теория
Polkit управляет доступом пользователей к системным функциям. Он позволяет определять, какие действия могут выполняться без проверки полномочий, а какие требуют подтверждения (например, ввод пароля администратора). Правила polkit пишутся в формате .rules
и обычно располагаются в директории /etc/polkit-1/rules.d/
. Каждое правило может указывать на определенное действие и требовать определенного уровня авторизации, например, AUTH_ADMIN
для административных действий.
Пример
В вашем случае, правила polkit успешно ограничивают действия "power-off" и "suspend". Пример такого правила может выглядеть следующим образом:
polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.login1.power-off" ||
action.id == "org.freedesktop.login1.suspend") &&
!subject.isInGroup("admin")) {
return polkit.Result.AUTH_ADMIN;
}
});
Однако, похоже, что аналогичное правило для "org.freedesktop.login1.reboot" не работает.
Применение
Чтобы исправить эту ситуацию, вы должны создать или изменить правило, которое будет правильно обрабатывать запросы на перезагрузку. Убедитесь, что ваше правило корректно распознает действие и не конфликтует с другими существующими политиками. Вот пример, как это правило может быть настроено для перезагрузки:
polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.login1.reboot" &&
!subject.isInGroup("admin"))) {
return polkit.Result.AUTH_ADMIN;
}
});
Диагностика и устранение неполадок
-
Проверка формата и синтаксиса: Убедитесь, что в вашем файле
.rules
нет синтаксических ошибок. Используйте командуpolkit --validate
для проверки. -
Конфликтующие правила: Возможно, что в другой части вашей системы определены правила, которые переопределяют ваше. Проверьте директорию
/etc/polkit-1/rules.d/
на наличие других правил, касающихся перезагрузки. -
Журналы и диагностика: Просмотрите системные журналы с помощью
journalctl
, чтобы найти возможные ошибки или предупреждения, возникающие при попытке перезагрузки. -
Перезагрузите демонов: После изменения файлов правил обязательно перезагрузите службу polkit. Сделать это можно с помощью команды
systemctl restart polkit.service
. -
Версии пакетов и обновления: Убедитесь, что все пакеты системы обновлены до последних версий, так как ошибка могла быть исправлена в более поздних версиях.
-
Группы пользователей: Проверьте, в какие группы входит пользователь, который пытается перезагрузить систему. Возможно, ему автоматически разрешено это действие благодаря принадлежности к какой-либо системной группе.
Заключение
Политики и правила polkit играют критически важную роль в управлении доступом в системах Linux. Правильная настройка polkit может предотвратить несанкционированные пользовательские действия и обеспечить безопасность системы. В вашем случае необходимо перепроверить настройку прав доступа к функции перезагрузки и, возможно, внести корректировки в существующие правила или их приоритеты. Правильная конфигурация и тщательное тестирование смогут гарантировать, что только администраторы системы смогут выполнять важные действия, такие как перезагрузка.