Гайд: Права на выключение времени для доменных пользователей в Astra Linux: Polkit и sudoers
В Astra Linux нет встроенного графического «редактора времени отключения питания» для обычных пользователей. В Linux планирование выключения реализуется через shutdown, systemd-timer, cron или корпоративные системы управления. Для предоставления доменным пользователям права на выключение/перезагрузку (в том числе по расписанию) необходимо настроить механизм контроля доступа.
Ниже приведён подробный, проверенный на Astra Linux SE/Common Edition 1.7–1.8 гайд по безопасному предоставлению таких прав.
1. Уточнение: что именно нужно разрешить?
В Astra Linux управление питанием делегировано systemd-logind. За действия отвечают PolicyKit (Polkit):
org.freedesktop.login1.power-off– выключениеorg.freedesktop.login1.power-off-multiple-sessions– выключение при активных сеансах других пользователейorg.freedesktop.login1.reboot– перезагрузка
Если в вашей организации используется специфичная утилита Astra (например, fly-admin), её Polkit-действия можно посмотреть командой:
pkaction | grep -iE "shutdown|power|reboot|fly"
В гайде ниже используется стандартный набор действий freedesktop.login1, который покрывает 95% сценариев.
2. Подготовка
- Убедитесь, что хост присоединён к домену (SSSD/Winbind) и доменные пользователи входят в систему.
- Проверьте доступ к
rootили учётной записи с правамиsudo.
3. Убедитесь, что установлен и активен polkit:
systemctl is-active polkit
3. Способ 1: Настройка через Polkit (рекомендуется для GUI и systemd)
Polkit позволяет гибко управлять правами без предоставления полного root.
3.1. Создайте локальную группу для доменных пользователей
sudo groupadd -r domain-shutdown-users
Добавьте нужных доменных пользователей (или целую AD-группу, если SSSD настроен на маппинг):
sudo usermod -aG domain-shutdown-users DOMAIN\ivanov
# или
sudo groupmems -a domainuser1 -g domain-shutdown-users
Проверьте вхождение:
id DOMAIN\ivanov | grep domain-shutdown-users
3.2. Создайте правило Polkit
sudo nano /etc/polkit-1/rules.d/10-domain-shutdown.rules
Вставьте содержимое:
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.login1.power-off" ||
action.id == "org.freedesktop.login1.power-off-multiple-sessions" ||
action.id == "org.freedesktop.login1.reboot") {
if (subject.isInGroup("domain-shutdown-users")) {
return polkit.Result.YES;
}
}
});
Важно:
В Astra Linux SE с включённым MAC (Parsec/astra-mac) Polkit может не применяться к privileged-действиям. Если правило не срабатывает, потребуется настройка доверенных программ в MAC или переход к Способу 2.
Перезапустите Polkit:
sudo systemctl restart polkit
4. Способ 2: Настройка через sudoers (для CLI и скриптов)
Если доменным пользователям нужно планировать выключение из терминала или cron, настройте sudo без пароля для конкретных команд.
sudo visudo -f /etc/sudoers.d/domain-shutdown
Вставьте:
%domain-shutdown-users ALL=(root) NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/reboot, /usr/bin/systemctl poweroff, /usr/bin/systemctl reboot
Проверьте синтаксис:
sudo visudo -c
Предупреждение:
Никогда не редактируйте /etc/sudoers напрямую через обычный текстовый редактор.
5. Как реализовать «редактор времени отключения»
Поскольку нативного GUI-планировщика выключения в Linux нет, используйте один из вариантов:
Вариант A: at (одноразовое задание)
echo "sudo /sbin/shutdown -h now" | at 23:00
Требует, чтобы пользователь был в группе domain-shutdown-users и имел права на sudo shutdown (Способ 2).
Вариант B: systemd-timer (рекомендуется)
Создайте юнит от имени root, но разрешите запуск через Polkit или sudo.
# /etc/systemd/system/scheduled-poweroff.service
[Unit]
Description=Scheduled Power Off
[Service]
Type=oneshot
ExecStart=/sbin/shutdown -h now
# /etc/systemd/system/scheduled-poweroff.timer
[Unit]
Description=Timer for scheduled power off
[Timer]
OnCalendar=*-*-* 23:00:00
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl enable --now scheduled-poweroff.timer
Доменные пользователи могут управлять таймером через Polkit или sudo systemctl.
Вариант C: GUI-планировщик (Astra-specific)
В некоторых сборках Astra Common Edition присутствует fly-admin-schedule или astra-control. Если он установлен, права на него также регулируются через Polkit.
Проверьте доступные действия:
pkaction | grep fly.admin
И создайте правило аналогично п.3.2.
6. Тестирование
- Войдите под доменным пользователем.
2. Проверьте Polkit:
pkcheck --action-id org.freedesktop.login1.power-off --process $$
Должно вернуть authorized.
3. Попробуйте выключить систему из GUI или через systemctl poweroff.
4. Для CLI: sudo shutdown -h +5
Если действие блокируется, проверьте логи:
journalctl -u polkit --since "5 min ago"
journalctl -t sudo --since "5 min ago"
7. Особенности Astra Linux (SE / Common Edition)
| Аспект | Примечание |
|---|---|
| MAC (Parsec / astra-mac) | В SE-версии обязательный контроль доступа может переопределять Polkit. Для работы в MAC требуется добавить пользователя/группу в доверенные или настроить метки безопасности. Без этого polkit.Result.YES может игнорироваться. |
| Сертификация ФСТЭК | Изменение polkit или sudoers может нарушить конфигурацию ИС, прошедшую сертификацию. Фиксируйте изменения в журнале ИБ и согласуйте с ответственным за безопасность. |
| Доменная интеграция | SSSD по умолчанию не маппит AD-группы в локальные. Если вы используете AD-группу напрямую, убедитесь, что в /etc/sssd/sssd.conf есть ad_gpo_map_interactive = +domain-shutdown-users или используйте локальную группу как в гайде. |
| Обновления | При обновлении Astra файлы в /etc/polkit-1/rules.d/ и /etc/sudoers.d/ сохраняются, но после мажорных апгрейдов проверяйте совместимость синтаксиса. |
Важные рекомендации
- Не давайте
NOPASSWD: ALL– только конкретные команды. - Ведите учёт изменений – в сертифицированных ИС любые правки
sudoers/polkitдолжны проходить процедуру согласования. - Для централизованного управления используйте Ansible, SCCM, Zabbix или GPO-скрипты, если доменная инфраструктура поддерживает Linux.
- Если нужен именно GUI-планировщик – рассмотрите развёртывание
kshutdown,gnome-scheduleили корпоративный RMM, адаптированный под Astra.