Политики для Linux настраиваются в домене → «Политики Linux» (право роли «Групповые политики»: просмотр — gpo.view, изменение — gpo.edit). Доставка идёт двумя путями:
| Что | Кто применяет на клиенте | Когда |
|---|---|---|
Sudo‑правила (объекты sudoRole) | Штатный SSSD (sudo_provider = ad) | При обновлении кэша SSSD (по умолчанию в течение нескольких минут) или сразу после sss_cache -E |
Политики машин и пользователей (объекты hopeLinuxPolicy): файлы, пакеты, cron, sysctl, общие папки SMB | Агент hopedc-agent.py по LDAPS (636) | Через 2 минуты после загрузки и каждые 10 минут (systemd‑таймер), или вручную |
Все объекты хранятся в служебном подразделении OU=Linux Policys,<домен> (создаётся автоматически при первом правиле, в «Структуре домена» скрыто). Это локальные объекты HopeDC: в домене‑зеркале они в MS AD не записываются. В кластере они реплицируются на все узлы.
Политики применяются к машинам, введённым в домен (Документ 10). Групповые политики Windows (раздел «Групповые политики») к Linux не применяются.
hopedc-agent.py (раздел 7) и замените файл на клиентах — настройки таймера менять не нужно.Агент находит объект своего компьютера по имени хоста (HOSTNAME$, первые 15 символов) и применяет политику, если выполняется любое из условий:
Как добавить компьютер в группу: «Структура домена» → компьютер → вкладка «Member Of» → найти группу → сохранить. Как поместить компьютер в OU при вводе: adcli join … --computer-ou="OU=Linux,DC=corp,DC=local" (Документ 10) или перенести объект в «Структуре домена».
Вкладка «Sudo‑правила» → «Создать правило»:
| Поле | Значение | Пример |
|---|---|---|
| Имя правила | Латиница, цифры, . _ - | linux-admins-all |
sudoUser | Пользователь или %группа домена | %linux-admins |
sudoCommand | Команды | ALL или /usr/bin/systemctl restart nginx |
sudoOption | Параметры sudo (необязательно) | !authenticate — без пароля |
Правило действует на всех машинах домена (sudoHost = ALL) от имени любого пользователя (sudoRunAsUser = ALL); привязка к группам машин и OU к sudo‑правилам не применяется. Группа в sudoUser должна иметь gidNumber (Документ 10, п. 2.1).
Проверка на клиенте:
sudo sss_cache -E # сбросить кэш SSSD, чтобы не ждать
sudo -l -U ivanov
Вкладка «Политики машин» → «Создать политику»: «Шаблон» (выбор окном каталога), «Применять к машинам (группа компьютеров)» (по умолчанию «Все машины»), «Имя политики», «Тип» и поля типа. Редкие поля — под ссылкой «Дополнительно». Над списком политик — поиск (по имени, типу, данным) и кнопка «Удалить найденные»: так удаляется, например, весь набор по префиксу имени.
Типы политик (v161, v163). Агент v163 выполняет 22 типа (v161 — 20, без «Защиты Astra» и «Параметра control»); агент более старой версии новые типы пропускает с записью «unknown type» — скачайте агент заново (вкладка «Агент» или скрипт ввода).
| Тип | Поля | Что делает агент / откат при снятии политики |
|---|---|---|
Файл (file) | Путь, права, содержимое; дополнительно: состояние (есть/удалить), команда при изменении, проверка | Записывает файл целиком (или удаляет). Откат — прежний файл из резервной копии или удаление созданного. |
Ключ в конфиге (kv) | Файл, ключ, значение, разделитель (пробел, «=», « = », табуляция, «: »), секция [ini], состояние; дополнительно: «вставлять до строки», создать файл, регистр ключа (для /etc/environment — важен), команда при изменении, проверка | Меняет одну строку «ключ значение», не трогая остальное (sshd_config, login.defs, journald.conf…). Новая строка ставится после закомментированного образца или до указанной строки (для sshd_config — до блоков Match). Откат — прежняя строка ключа. |
Строка в файле (line) | Файл, строка, состояние; дополнительно: заменять строку по выражению, вставлять до строки | Добавляет строку (или заменяет найденную) либо удаляет. Откат — прежняя строка. |
Права на файлы (perm) | Пути (шаблоны *), убрать биты (например 022 = go-w) или задать права, владелец, группа; рекурсивно; к файлам/каталогам | chmod/chown. Откат — прежние права. |
Параметр ядра (sysctl) | Параметр, значение | /etc/sysctl.d/90-hopedc.conf + sysctl -w. Неподдерживаемый ядром параметр — «пропущено». Откат — прежнее значение. |
Параметр загрузки ядра (grub) | Параметр (например init_on_alloc=1), состояние | GRUB_CMDLINE_LINUX в /etc/default/grub, update-grub или grub2-mkconfig, на РЕД ОС/RHEL также grubby. Действует после перезагрузки. Откат — прежний параметр. |
Модуль ядра (module) | Модули через пробел, запретить/разрешить | /etc/modprobe.d/hopedc-<модуль>.conf (install … /bin/false + blacklist), выгрузка модуля. Откат — файл удаляется. |
Служба (service) | Служба (несколько имён через «|» — первая найденная: ssh|sshd), состояние: включена, выключена, запрещена (mask), снять запрет, запустить, остановить, перезапустить | systemctl. Нет такой службы — «пропущено». Откат — прежнее состояние (включена/запущена). |
Пакеты (package) | Пакеты (вариант имени для разных ОС через «|»: auditd|audit), установить/удалить | apt-get / dnf / yum. При откате пакеты не удаляются. |
Задание по расписанию (cron) | Расписание, пользователь, команда | /etc/cron.d/hopedc-<имя>. Откат — файл удаляется. |
Скрипт (script) | Скрипт, интерпретатор, когда (один раз / при каждом запуске); дополнительно: таймаут, скрипт отката | «Один раз» — повторно только при изменении текста. Последняя строка вывода попадает в отчёт. Откат — скрипт отката, если задан. |
Монтирование (mount) | Новая точка (что, куда, тип, параметры) или параметры существующей точки (nodev, nosuid, noexec) | Запись в /etc/fstab (с меткой) и монтирование; для существующей точки — добавление параметров и mount -o remount. Если точка — не отдельный раздел, «пропущено». Откат — прежняя запись. |
USB-накопители (usb) | Запретить / только чтение / разрешить; разрешённые устройства VID:PID | Правила udev /etc/udev/rules.d/90-hopedc-usb.rules. Откат — правила удаляются. |
Принтер (printer) | Имя, адрес (ipp://, socket://, smb://…), драйвер (по умолчанию IPP Everywhere), расположение, по умолчанию, общий доступ; дополнительно: параметры -o (например auth-info-required=negotiate для печати через Windows по Kerberos) | lpadmin (CUPS ставится при необходимости). Откат — принтер удаляется. |
Доверенный сертификат (cert) | Корневой ЦС домена или вставленный PEM | update-ca-certificates / update-ca-trust. «ЦС домена» — если агент работает в режиме проверки по ЦС. Откат — сертификат удаляется. |
Межсетевой экран (firewall) | Разрешить/запретить порт или службу (с источником), включить экран, входящие по умолчанию — запрещены | firewalld или ufw (что установлено). Откат — правило снимается. |
Рабочий стол (dconf) | Ключ dconf, значение (GVariant), запрет изменения; дополнительно: база — сеансы пользователей или экран входа (GDM) | Файлы /etc/dconf/db/local.d (или gdm.d) и locks, профиль dconf, dconf update (GNOME/MATE/Cinnamon). Откат — удаляются. |
Браузер (browser) | Firefox / Chromium / Chrome / Яндекс Браузер, политики JSON | Firefox — политики разных политик HopeDC объединяются в policies.json; Chromium/Chrome/Яндекс — managed-файл в каталоге политик браузера. Откат — удаляются. |
Защита Astra Linux SE (astra, v163) | Переключатель astra-safepolicy (30 штук: astra-ptrace-lock, astra-mount-lock, astra-digsig-control, astra-mic-control …), включить/выключить; дополнительно — параметр (уровень для astra-mic-control, пользователь для astra-autologin-control) | Состояние — <переключатель> is-enabled, изменение — enable/disable. Нет переключателя (не Astra SE) — пропуск. Для ЗПС, МКЦ, hardened, LKRG и др. в отчёт пишется «действует после перезагрузки». Откат — прежнее состояние (кроме строгого режима МКЦ: его отключение не поддерживается). |
Параметр control (control, v163) | Параметр и состояние (su wheelonly, sudo restricted, ping netadmin …) | ALT Linux: control <параметр> <состояние>. Нет control или параметра — пропуск; недопустимое состояние — ошибка без изменений. Откат — прежнее состояние. |
Несколько действий (steps) | JSON-список действий разных типов | Выполняет по порядку (например: пакет → файл → служба). Откат — в обратном порядке. |
Общая папка (smb) | «Имя шары», «Путь на сервере», «Доступ группе (домен)», «Доступ», «Гостевой доступ», «Описание» | Ставит Samba, режим члена домена с idmap через SSSD (старый файл — smb.conf.hopedc-bak), каталог с setgid и ACL группы, шара для @группа. Откат — блок шары удаляется. |
Проверка перед применением и команда при изменении. У файлов, ключей и строк можно задать «Проверку» (например sshd -t, visudo -c): если она не прошла, изменение отменяется и политика получает статус «ошибка» — так ошибочная настройка не ломает службу. «Команда при изменении» (например systemctl reload ssh) выполняется, только если файл действительно изменился.
Только для ОС. Поле «Только для ОС» (в «Дополнительно») ограничивает политику: astra, astra17, astra18, astra-se, redos, redos7, redos8, alt, debian, ubuntu, rhel, deb (Debian-подобные), rpm (RPM-системы); через запятую — любая из; «!» — кроме (!alt). Определяется по /etc/os-release.
Общая папка SMB. С Windows папка открывается как \\<linux-хост>\<шара> по билету Kerberos текущего пользователя; доступ — по членству в группе. SPN cifs/<хост> HopeDC добавляет к объекту компьютера сам при вводе.
Вкладка «Политики пользователей» — файлы окружения и лимитов для доменной группы пользователей: «Шаблон», «Группа пользователей», «Развернуть на машинах» (группа компьютеров или все), «Имя политики», «Путь файла», права, «Содержимое». Подстановка %USERGROUP% заменяется именем группы при создании политики.
Это файловая политика: агент записывает файл на выбранные машины, а действие на членов группы обеспечивает сам файл (например, строка @%USERGROUP% hard nofile 65535 в /etc/security/limits.d/). Шаблоны: «Лимит открытых файлов (nofile)», «Лимит процессов (nproc)», «umask 027 для группы», «Приветствие при входе», «Переменные окружения для группы». Такие политики можно удалить, но не изменить — для правки создайте новую.
Вкладка «Связи (OU)» → «Привязать политику к OU»: выберите одну или несколько политик и OU. Политика применится ко всем Linux‑машинам, объекты которых лежат в выбранных OU, включая вложенные, — аналог связей GPO в Windows. Связь дополняет группу компьютеров: политика применяется, если подходит любое условие (раздел 2).
Вкладка «Каталог шаблонов» — список всех шаблонов политик: встроенные и свои. Свои шаблоны — объекты каталога домена в служебной OU «Linux Policys»: реплицируются на все узлы кластера и входят в резервную копию. Каталог рассчитан на тысячи шаблонов:
Из главного меню (v160). Тот же каталог открывается пунктом «Каталог шаблонов» главного меню (под «Домены», право gpo.view) — без входа в домен. Сверху выбирается домен: свои шаблоны хранятся в каталоге домена; выбор запоминается. Кнопка «Политика» у шаблона открывает форму политики этого домена.
{"templates":[{"name":"…","category":"…","scope":"machine|user","type":"file|package|cron|sysctl|smb","description":"…","data":{…}}]} — поля data как в форме политики. Шаблон с тем же названием и областью обновляется, остальные добавляются. Проверено импортом 1200 шаблонов.Выбор шаблона в форме политики. Поле «Шаблон» открывает окно каталога: строка поиска сразу в фокусе, категории слева, только шаблоны своей области (машины или пользователи). Клавиши: ↑ ↓ — выбор, Enter — применить, Esc — закрыть; «Без шаблона» — очистить.
Встроенные шаблоны (v163) — 600 для машин и 13 для пользователей.
control (su, sudo, sudowheel, sudoers, ping, FUSE, mount, NFS, newgrp, gpasswd, crontab, at, write, postqueue, sftp, pam_mktemp, passwdqc-enforce, вход root по SSH, system-auth sss), роли libnss-role (Domain Admins → wheel, Domain Users → users/audio/video), SSH в /etc/openssh/sshd_config, обновление системы и ядра (update-kernel), удаление старых ядер, отчёт о репозиториях.Шаблоны с адресами-примерами (fs.<домен>, proxy.<домен>, portal.<домен>) — замените адреса своими после выбора шаблона.
Подстановки. В любых полях политики можно писать %DOMAIN% (DNS-имя домена), %REALM%, %NETBIOS%, %DC% (контроллер, к которому подключается агент), %HOST% (имя машины) — агент подставляет значения на каждой машине. Так одна политика «Время — с контроллера домена» или «SSO по Kerberos» подходит для любого домена.
Наборы (23). Кнопка «Наборы» в каталоге: ФСТЭК 2022 (без пунктов, требующих проверки / все), наборы для классов защищённости 3, 2 и 1, базовое усиление сервера и рабочей станции (CIS), усиление SSH, полный аудит, сетевые параметры; рабочая станция GNOME (блокировка и приватность), рабочая станция KDE, базовая настройка Firefox, Chromium и Яндекс Браузера, «Домен: время, вход и SSO», службы сервера; v163: Astra Linux SE — базовая и усиленная защита (ЗПС, МКЦ, LKRG), РЕД ОС — базовая настройка, ALT Linux — базовая настройка, «Обслуживание: журналы, очистка, обновления», «Отчёты о машине в панель». «Применить…» — выбор машин (группа компьютеров или все), префикса имён и состава (можно снять отдельные шаблоны); создаётся по политике на каждый шаблон, имена — <префикс>001-<шаблон>, порядок применения — по номеру. Повторное применение обновляет политики набора. Убрать набор — поиск по префиксу на вкладке «Политики машин» и «Удалить найденные» (агенты откатят изменения).
| Режим | Как настроить |
|---|---|
| Пароль (по умолчанию) | «Агент» → «Создать сервисную учётку»: svc-hopedc-agent без административных прав, только чтение. Пароль показывается один раз и встраивается в агент. Без сервисной учётки агент входит как администратор домена по паролю из поля «Пароль bind‑учётки» — не рекомендуется. |
| Сертификат (mTLS) | Сначала сервисная учётка, затем «Аутентификация агента» → «Сертификат (mTLS)» → «Выдать сертификат агента». Нужен корневой ЦС домена («Центр сертификации»). Клиентский сертификат (EC P‑256, 825 дней) кладётся в /etc/hopedc/agent.crt и agent.key; агент входит по LDAPS через SASL EXTERNAL, пароль не хранится. Сертификат можно отозвать в «Центре сертификации». |
Вариант A — вместе с вводом в домен: sudo bash join-hopedc.sh (Документ 10).
Вариант B — на уже введённом хосте: скачайте hopedc-agent.py на вкладке «Агент» и выполните:
sudo apt install -y python3-ldap3 # РЕД ОС: dnf install -y python3-ldap3; ALT: apt-get install -y python3-module-ldap3
sudo install -m 0755 hopedc-agent.py /usr/local/bin/hopedc-agent.py
printf '[Service]\nType=oneshot\nExecStart=/usr/local/bin/hopedc-agent.py\n' | sudo tee /etc/systemd/system/hopedc-agent.service
printf '[Timer]\nOnBootSec=2min\nOnUnitActiveSec=10min\n[Install]\nWantedBy=timers.target\n' | sudo tee /etc/systemd/system/hopedc-agent.timer
sudo systemctl daemon-reload && sudo systemctl enable --now hopedc-agent.timer
Для режима mTLS в варианте B скопируйте также /etc/hopedc/agent.crt и agent.key (права 600) — проще использовать вариант A.
Агент выполняет политики от root, поэтому подлинность контроллера проверяется строго. Способ определяется при скачивании агента (вкладка «Агент»):
ldap_uri = ldaps://<домен>, ldap_tls_reqcert = demand, ЦС — /etc/hopedc/domain-ca.pem.Агенты, установленные до v158, работают как прежде (без строгой проверки); скачайте и установите агент заново.
sudo /usr/local/bin/hopedc-agent.py # применить сейчас
systemctl list-timers hopedc-agent.timer # когда следующий запуск
journalctl -u hopedc-agent.service -n 50 # что применилось
Строки журнала начинаются с [hopedc-agent]: хост и число его групп, «policies: N», применённые file/pkg/cron/sysctl/smb, ошибки получения политик.
Агент 163 после каждого запуска отправляет отчёт в панель — расширенной операцией LDAP по тому же LDAPS-соединению и той же учётке (отдельный порт и права записи в каталог не нужны). Отчёт принимается от сервисной учётки агента (за компьютер своего домена по имени хоста) или от учётки самого компьютера (только за себя); от остальных — отказ. Сервер хранит отчёт на объекте компьютера (реплицируется в кластере); неизменившийся отчёт перезаписывается не чаще раза в 6 часов.
Вкладка «Отчёты машин»: машины домена с ОС, версией агента, временем последнего отчёта и числом применённых, пропущенных политик и ошибок; фильтры «С ошибками», «Нет отчёта больше суток», «Приостановлены», «Без отчёта». Строка открывает отчёт: сведения о машине (ОС и версия Astra / РЕД ОС / ALT, ядро, процессоры, память, диск, время работы) и все политики с состоянием и сообщением — ошибки первыми; для проверочных и отчётных скриптов — их итог.
Приостановить политики (право gpo.edit) — при следующем запуске агент откатывает всё, что применил, и не применяет новые политики, в отчёте — «приостановлена». «Возобновить политики» — следующий запуск применяет их снова. Так машину можно быстро вернуть в исходное состояние для разбора проблемы, не трогая группы и политики.
С контроллером до v163 агент 163 работает как прежде (без отчёта в панель). Объекта компьютера нет — в журнале агента «отчёт в панель не принят: доступ: компьютер … не найден в домене».
Изменённая политика применяется при следующем запуске агента: агент v161 сначала возвращает прежнее состояние (откат старой версии), затем применяет новую. Политику сняли — удалили, машина вышла из группы или OU, политика стала не для этой ОС — агент сам возвращает как было (см. «Откат» в таблице типов): восстанавливает файлы из резервных копий (/var/lib/hopedc-agent/backup), прежние строки ключей, параметры ядра и загрузки, состояние служб. Если две политики меняли одно и то же, откат идёт в обратном порядке применения. Пакеты при откате не удаляются.
Политики, применённые агентом до v161, отката не имеют — их следы убираются вручную или политикой с состоянием «удалить»: файл (/etc/cron.d/hopedc-<имя>), строка в /etc/sysctl.d/90-hopedc.conf, блок шары в /etc/samba/hopedc-shares.conf.
Отменить все политики на машине (например, перед выводом из домена): sudo hopedc-agent.py --undo-all или «Приостановить политики» в отчёте машины (раздел 7.4). Sudo‑правило перестаёт действовать после обновления кэша SSSD (sss_cache -E).
Отчёт о применении. sudo hopedc-agent.py --report показывает итог последнего запуска: для каждой политики — ok, skipped (не для этой ОС, нет службы или программы, не отдельный раздел), error (с причиной) или removed (откат), а для проверочных скриптов — их итог (например «файлов с SUID/SGID: 23 (список: …)»). Отчёт — /var/lib/hopedc-agent/report.json, состояние — /var/lib/hopedc-agent/state.json.
Инвентаризация (агент v179+). Вместе с отчётом агент отправляет сведения о машине — ОС, оборудование, диски, сеть, вошедшие пользователи, установленные пакеты (dpkg/rpm) — при изменениях и не реже раза в 12 часов. Они видны в разделе панели «Инвентаризация» (Документ 2, «Инвентаризация компьютеров»). Посмотреть, что будет отправлено: sudo hopedc-agent.py --inventory.
| Симптом | Причина и решение |
|---|---|
Журнал агента: invalidCredentials | Неверный пароль сервисной учётки (её пересоздали) или учётка удалена — пересоздайте и обновите агент. |
| Журнал агента: «объект компьютера … не найден» | Хост не введён в домен или его имя отличается от объекта; применяются только политики для всех машин. |
| Политика для группы не применяется | Компьютер не состоит в группе (вкладка «Member Of» компьютера) или агент до v150 — обновите агент. |
| «policies: 0», хотя политики есть | Политики заданы в другом домене, либо агент до v150. |
| Ошибка TLS/соединения | Закрыт порт 636 или клиент не в списке «Сетевой доступ → Клиенты домена». |
| sudo не работает | Нет sudo_provider в sssd.conf; у группы нет gidNumber; кэш — sss_cache -E; sudo -l -U пользователь. |
| Журнал агента: «отчёт в панель не принят: доступ: …» | Агент входит не сервисной учёткой агента (например, администратором) или в домене нет объекта компьютера с именем хоста (первые 15 символов) — создайте сервисную учётку, скачайте агент заново, проверьте ввод в домен. |
| Машины нет в «Отчётах машин» | Агент старше 163, ещё не запускался или контроллер до v163 — фильтр «Без отчёта». |
| Пакеты не ставятся | Нет доступа клиента к репозиториям — агент лишь запускает apt-get/dnf. |
control и fly-dm — на стенде заказчика (нет переключателя или файла — шаблон пропускается, а не ломает систему).