Клиент LSUS
Агент обновлений на управляемом хосте: регистрация на сервере, heartbeat, получение политик и команд, проверка и установка обновлений. Для администратора это конечная точка системы — через неё становятся заметны ошибки политики, проблемы связи с сервером, сбои TLS.
Клиент поддерживает Astra Linux, Debian, Ubuntu, РЕД ОС, Oracle Linux 8/9/10, ALT и другие RHEL-совместимые системы. Эта страница — установка, конфигурация и диагностика клиента на Linux. Серверная часть — Развёртывание серверов. Быстрая установка — Быстрый старт.
Пакеты клиента#
Клиент поставляется двумя пакетами:
| Пакет | Назначение | Когда нужен |
|---|---|---|
lsus-client |
Фоновый сервис (systemd + D-Bus), CLI lsus-client-ctl, бизнес-логика, связь с сервером |
на всех машинах (серверы, рабочие станции, терминалы) |
lsus-client-gui |
Графический клиент для системного трея (PyQt5), иконка, desktop-файл | только на рабочих станциях с графикой |
На серверах без графики достаточно lsus-client. Пакет lsus-client-gui зависит от lsus-client и python3-pyqt5.
Установка#
Astra / Debian / Ubuntu (.deb)#
cd /opt/lsus-pkgs
# Базовый пакет (обязателен на всех машинах)
sudo apt install ./lsus-client_<версия>_all.deb
# GUI (только для рабочих станций с графикой)
sudo apt install ./lsus-client-gui_<версия>_all.deb
РЕД ОС / Oracle Linux (.rpm)#
cd /opt/lsus-pkgs
sudo dnf install ./lsus-client-<версия>-1.noarch.rpm
sudo dnf install ./lsus-client-gui-<версия>-1.noarch.rpm # опционально
ALT Linux (.rpm, apt-rpm)#
Установка — только через apt-get от root (su -, без sudo): зависимости ALT называются python3-module-*, и разрешить их может только apt-get — команда rpm -Uvh оставит пакет без требуемых модулей.
$ cd /opt/lsus-pkgs
$ su -
# apt-get install ./lsus-client-<версия>-1.noarch.rpm
# apt-get install ./lsus-client-gui-<версия>-1.noarch.rpm # опционально
Зависимости#
Клиент работает на системном Python 3.6+ — отдельная версия Python не нужна даже на старых ОС (например, Oracle Linux 8 с python3.6).
| Зависимость | Назначение | Обязательность |
|---|---|---|
python3-requests |
HTTP-клиент для связи с сервером | обязательно |
python3-dbus |
связь сервиса с GUI | обязательно |
python3-gi |
GObject Introspection (D-Bus) | обязательно |
lvm2 |
создание снимков перед установкой обновлений | обязательно |
python3-dnspython |
DNS TXT/SRV (не обязателен: есть встроенный резолвер) | рекомендуется (deb) / обязательно (ALT) |
python3-pyqt5 |
GUI-трей | только для lsus-client-gui |
Подключение к серверу#
Клиент может находить сервер по прямому URL или через DNS (TXT, запас — SRV).
Способ 1. Прямой URL#
Укажите адрес сервера в /etc/lsus-client/lsus-client-common.conf:
[server]
# порт 443 по умолчанию; указывайте явно при нестандартном порте
server_url = https://master.example.com
Явно указывайте порт
Если сервер слушает на нестандартном порту (не 443), обязательно укажите его в URL: server_url = https://master.example.com:9443. Без явного порта клиент использует значение по умолчанию, которое может не совпасть с настройкой сервера.
Способ 2. DNS TXT / SRV (автообнаружение)#
Если создана DNS-запись, укажите домен вместо URL:
[server]
server_discovery_domain = example.com
# dns_discovery = false # отключить поиск в закрытом контуре
Как клиент выбирает сервер
Приоритет источников адреса:
1. Назначенный сервер (assigned_server_url);
2. DNS TXT _lsus.<домен>;
3. DNS SRV _lsus._tcp.<домен>;
4. Значение server_url из конфига.
Если DNS не настроен — достаточно server_url. Подробнее — в Требованиях.
Пока мастер недоступен, агент остаётся на своём сайте, шлёт туда heartbeat по сохранённому токену и держит последнюю политику (/etc/lsus-client/lsus-settings-cache.json). Команды и отчёты начнутся после регистрации, когда мастер ответит. Файл политики сбрасывается при отзыве токена, переустановке ОС, смене сервера (set-server) и новом идентификаторе хоста.
Самообновление и доустановка пакетов агента берут файлы только с сайта хоста: мастер таким хостам в файлах клиента отказывает, задание не выдаётся раньше назначенного срока, а ответ сайта «повторите позже» агент ждёт в рамках той же команды и докачивает файл. В подсети с галочкой «Обязательный сайт» (см. Администрирование → Подсети) это действует всегда, включая режимы «сайт, затем мастер» и failover: недоступный сайт хост ждёт, на мастер не переключается. Установить клиент на новую машину по SSH можно из Центра отладки — файл машина получит с сайта своей подсети, либо используйте политику установки.
Запуск службы#
sudo systemctl enable --now lsus-client.service
Проверка, что хост зарегистрировался:
lsus-client-ctl status
На вкладке «Хосты» и для привязки к сайту по подсети клиент сообщает IPv4 интерфейса с маршрутом по умолчанию (тот же адрес, что в карточке хоста на вкладке сети). Доступ в интернет для этого не нужен.
Конфигурация#
Файлы конфигурации (приоритет от высокого к низкому):
| Файл | Кто создаёт | Назначение |
|---|---|---|
/etc/lsus-client/lsus-client.conf |
пакет (шаблон) | системный конфиг, защищён от изменений пользователем |
/etc/lsus-client/lsus-client-common.conf |
сервис (D-Bus) | применяет политики сервера; меняется автоматически |
~/.config/lsus_client.conf |
пользователь | пользовательские настройки (только если разрешено политикой) |
Ключевые параметры lsus-client.conf#
| Секция | Ключ | По умолчанию | Назначение |
|---|---|---|---|
[server] |
server_url |
— | адрес сервера (fallback, если DNS не сработал) |
[server] |
server_discovery_domain |
автоопределение по FQDN хоста | домен для TXT _lsus.<домен> и SRV _lsus._tcp.<домен> |
[server] |
dns_discovery |
true |
false отключает DNS-поиск |
[server] |
server_ca_cert |
/etc/lsus-client/ca.crt |
путь к CA-сертификату сервера |
[server] |
verify_ssl |
true |
проверка TLS-сертификата сервера |
[system] |
check_interval_minutes |
15 |
интервал проверки обновлений |
[system] |
reminder_interval_days |
1 |
интервал напоминания о доступных обновлениях |
[system] |
policies_priority |
True |
приоритет серверных политик над локальными |
[system] |
boot_min_free_mib |
100 |
минимум свободного места в /boot, МБ |
[system] |
lvm_snapshot_min_free_mib |
512 |
минимум в VG для снимка, МБ |
Где задавать адрес сервера
Адрес сервера (server_url или server_discovery_domain) задавайте в /etc/lsus-client/lsus-client-common.conf — этот файл сервис обновляет автоматически, и он сохраняется между перезапусками. lsus-client.conf — системный шаблон, его лучше не редактировать напрямую (обновление пакета может его перезаписать).
Параметры, приходящие с сервера
Большинство эксплуатационных настроек (интервал heartbeat, окна установки, hold-пакеты, флаги disable_*) приходят централизованно с сервера как политика и применяются в lsus-client-common.conf в секции [policy]. Их не нужно задавать вручную на каждом клиенте. Подробнее о полях политики — в SERVER_INTEGRATION.md в каталоге клиента.
CLI lsus-client-ctl#
Утилита диагностики и управления клиентом. Входит в пакет lsus-client и после установки вызывается как lsus-client-ctl (файл /usr/bin/lsus-client-ctl).
Проверка и установка обновлений идут через службу lsus-client. Если служба не запущена, эти команды сообщают об ошибке. status при этом всё равно печатает адрес сервера и наличие файлов.
| Команда | Назначение | Нужен root |
|---|---|---|
version |
версия агента | нет |
status |
URL, токен, UUID, сертификат, состояние службы и число найденных обновлений | нет |
test-connection |
проверка связи с сервером | нет |
diagnose |
конфиг, файлы и доступность сервера | нет |
register |
принудительная регистрация | да |
set-server <url> |
записать адрес сервера, сбросить назначение на Site и переподключиться | да |
clear-assigned-server |
сбросить назначение на сайт | да |
reset-cert |
заново получить сертификат сервера | да |
reset-identity |
новый идентификатор хоста и регистрация | да |
full-reset |
удалить токен и сертификат, затем зарегистрироваться | да |
check |
проверить обновления. Код 0 и когда пакеты найдены | нет |
updates |
показать уже найденные обновления, без новой проверки | нет |
update [--yes] [--reboot] |
установить обновления. Без --yes установка не начинается |
да |
cancel |
прервать текущую установку. Если установки нет, это не ошибка; если отмену запрещает политика, установка продолжается | нет |
log [--lines N] |
журнал клиента, по умолчанию 50 записей. Если служба не запущена — читается файловый журнал | нет |
inventory [--json] [--send] |
сводка оборудования и ПО. --send отправляет на сервер только изменившиеся секции; без изменений отправка пропускается |
--send |
snapshots |
список снимков корня. Без подкоманды — то же, что snapshots list |
нет |
snapshots create [--size-mb N] |
создать снимок. Только если корень на LVM. После создания список снимков уходит на сервер | да |
snapshots remove <имя> |
удалить снимок с именем lsus-snap-… и обновить список на сервере |
да |
config get РАЗДЕЛ КЛЮЧ |
прочитать настройку. Секрет (токен, пароль) не печатается | нет |
diagnose-archive [--output КАТАЛОГ] [--no-journal] [--no-system] [--no-lsus] |
собрать архив диагностики на диске и напечатать путь. На сервер архив сам не уходит | да |
Если корень не на LVM, snapshots сообщает, что снимки недоступны, и ничего не создаёт.
Подтверждение установки
update без --yes в неинтерактивном запуске завершается с ошибкой и не ставит пакеты. --reboot перезагружает систему только после успешной установки.
Типовые сценарии CLI#
Проверить связь с сервером:
lsus-client-ctl test-connection
Сменить адрес сервера:
sudo lsus-client-ctl set-server https://site.example.com
Посмотреть найденные обновления и поставить их:
lsus-client-ctl updates
sudo lsus-client-ctl update --yes
Журнал клиента:
lsus-client-ctl log --lines 50
Отправить инвентаризацию:
sudo lsus-client-ctl inventory --send
Собрать архив диагностики (путь печатается в конце):
sudo lsus-client-ctl diagnose-archive --output /tmp
Если на компьютере установлены служба конфигураций или контроль USB, в тот же архив попадают их настройки и журналы. Пароли в этих настройках скрываются так же, как в настройках клиента.
Диагностика#
Системная служба#
# статус службы
systemctl status lsus-client
# журнал службы (systemd)
journalctl -u lsus-client.service -n 50 --no-pager
# журнал в реальном времени
journalctl -u lsus-client.service -f
Файловый лог#
tail -f /var/log/lsus-client.log | grep server
Логи установки пакетов: /var/log/lsus-client/updates/. Файл ротируется (10 МБ, 5 резервных копий).
Типичные ошибки в логах#
| Сообщение | Значение | Что делать |
|---|---|---|
Ошибка отправки heartbeat |
транспортная ошибка отправки heartbeat | проверьте сеть и доступность сервера |
SSL-ошибка при heartbeat |
сертификат сервера недоверенный/устаревший | lsus-client-ctl reset-cert, проверьте server_ca_cert |
HTTP 401 при heartbeat |
токен устарел/отозван | lsus-client-ctl register (клиент повторяет автоматически) |
повторная выдача токена запрещена |
строгий /register без Bearer и без окна |
в портале: меню хоста «Разрешить перерегистрацию», затем lsus-client-ctl register |
HTTP 503 от сервера |
сервер перегружен (backpressure) | клиент уважает Retry-After, подождите |
Чек-лист «клиент не появляется на сервере»#
systemctl status lsus-client— служба активна?lsus-client-ctl status— конфиг и адрес корректны?lsus-client-ctl test-connection— сервер достижим по HTTPS?lsus-client-ctl diagnose— полная проверка;- Сетевой доступ: исходящий HTTPS до сервера (порт 443 по умолчанию), firewall;
- Доверие сертификату:
verify_sslиserver_ca_cert; - Зависимости:
python3-dnspythonне обязателен (встроенный резолвер TXT/SRV).
Признаки исправной работы#
Клиент работает корректно, если:
- служба
lsus-client.serviceактивна; - хост появился в админке Master/Site;
- heartbeat обновляется (видно по времени последнего связи);
lsus-client-ctl statusпоказывает корректный URL и UUID;- политики с сервера применяются.
GUI-клиент (рабочие станции)#
При установленном lsus-client-gui:
- значок в трее показывает состояние обновлений;
- левый клик — планирование установки;
- правый клик — сокращённое меню;
Ctrl+Alt + левый клик— расширенное меню.
GUI общается со службой через D-Bus, поэтому lsus-client (служба) должен быть установлен и запущен.
Окно «Идёт установка обновлений» открывается и для установки по команде сервера и закрывается, когда установка закончилась — в том числе с ошибкой. Если к назначенному времени обновлять нечего, клиент закрывает задание на сервере, а не оставляет его в ожидании.
Установленные пакеты lsus-client, lsus-config-agent, lsus-client-gui и lsus-usb-control клиент удерживает от обычного обновления системы. Их обновляет отдельная команда сервера. Так сбой настройки агента конфигураций не обрывает установку остальных пакетов.
D-Bus: аудит и блокирующий режим#
Служба проверяет UID вызывающего и флаги политики disable_* на входе D-Bus-методов (установка обновлений, журнал, USB-заявки, вложения тестирования).
По умолчанию включён аудит (LSUS_CLIENT_DBUS_ENFORCE=0): вызовы не отклоняются, в журнал пишутся строки dbus_audit. Так GUI остаётся работоспособным, даже если loginctl не видит сессию (XRDP без seat, нестандартный display manager).
Блокирующий режим включают осознанно, после разбора журнала на стенде:
sudo systemctl edit lsus-client
В drop-in:
[Service]
Environment=LSUS_CLIENT_DBUS_ENFORCE=1
Затем sudo systemctl daemon-reload && sudo systemctl restart lsus-client.
Откат — удалить drop-in или поставить LSUS_CLIENT_DBUS_ENFORCE=0 и перезапустить службу.
Дополнительно:
| Переменная | По умолчанию | Назначение |
|---|---|---|
LSUS_CLIENT_DBUS_ENFORCE |
0 |
1 — отказ постороннему UID и при disable_* |
LSUS_CLIENT_DBUS_AUDIT_VERBOSE |
0 |
В enforce писать в журнал и разрешённые вызовы (отказы пишутся всегда) |
Если множество активных сессий пусто, служба не отказывает (fail-open) и пишет причину unknown_session.
Windows-клиент#
Для управления хостами Windows используется отдельный агент — .NET-приложение (требует .NET Framework 4.6.2+). Поставка — MSI-пакет и ZIP-архив с PowerShell-скриптами установки (Install-LsusAgent.ps1 / Uninstall-LsusAgent.ps1). Агент использует Windows Update API (Microsoft.Update.Session, wusa.exe).
Подробная инструкция по установке на Windows — в комплекте поставки агента (docs/install.md). Управление обновлениями KB на стороне сервера описано в Windows.
Безопасность клиента#
Клиент LSUS реализует многоуровневую защиту от подмены сервера, перехвата трафика и несанкционированного доступа. Все механизмы работают автоматически — администратору не нужно настраивать их вручную.
TLS Certificate Pinning (TOFU + pin)#
Основная защита от подмены сервера — модель Trust On First Use с последующим закреплением сертификата:
- Первое подключение — клиент скачивает сертификат сервера с
/api/v1/server-settings/repo-cert(без проверки TLS) и сохраняет в/etc/lsus-client/ca.crt. - Закрепление — все последующие соединения проверяются по этому закреплённому сертификату.
- Проверка fingerprint — при каждом соединении вычисляется SHA-256 fingerprint реального TLS-сертификата и сравнивается с сохранённым. При несовпадении — диагностика и логирование, соединение отклоняется.
Что если сертификат сервера сменился
При плановой замене сертификата на сервере нужно обновить ca.crt на клиентах. Команда lsus-client-ctl reset-cert скачивает новый сертификат. Если сертификат сменился без ведома администратора — клиент заблокирует подключение и запишет ошибку в лог.
Проверка TLS#
| Параметр | Значение по умолчанию | Где |
|---|---|---|
verify_ssl |
true |
/etc/lsus-client/lsus-client.conf |
| CA-сертификат | путь к /etc/lsus-client/ca.crt |
server_ca_cert |
| Защита конфига | только root (системный конфиг) | lsus-client.conf |
При verify_ssl = true все HTTPS-запросы проверяются по цепочке CA. Системный конфиг защищён от изменения пользователем.
Валидация цепочки сертификатов#
- Выбор leaf-сертификата по SAN/hostname — клиент определяет, какой сертификат из bundle соответствует серверу.
- Для корпоративного CA — leaf + intermediate из TLS handshake.
- Различение самоподписанных и CA-сертификатов — корректная обработка обоих случаев.
Очистка trust store#
Клиент автоматически удаляет неизвестные и чужие сертификаты из локального bundle (ca.crt). В нём остаются только сертификаты известных серверов LSUS (Master + назначенный Site). Это защищает от накопления «левых» сертификатов и подмены.
Интеграция с системным CA-хранилищем#
Установленный сертификат LSUS регистрируется в системном trust store ОС:
| Семейство ОС | Путь | Команда обновления |
|---|---|---|
| Debian/Ubuntu/Astra | /usr/local/share/ca-certificates/ |
update-ca-certificates |
| RHEL/РЕД ОС/CentOS | /etc/pki/ca-trust/source/anchors/ |
update-ca-trust |
| SUSE/ALT | /etc/pki/trust/anchors/ |
update-ca-trust |
Благодаря этому пакетные менеджеры (apt/dnf) тоже доверяют репозиториям LSUS — не нужно отключать проверку GPG или TLS при работе с локальными репозиториями.
Аутентификация (Bearer token)#
После регистрации сервер выдаёт клиенту уникальный api_token:
- Хранится в
/etc/lsus-client/.api_tokenс правами0600(только root). - Каждый запрос к серверу содержит заголовок
Authorization: Bearer <token>. - При компрометации токен можно отозвать на сервере — клиент перерегистрируется и получит новый.
Идентификация клиента#
| Механизм | Что защищает |
|---|---|
client_uuid в /etc/lsus-client/client-id |
Уникальный идентификатор хоста. Привязан к ОС. |
os_install_id |
Обнаружение переустановки ОС — сервер сбрасывает привязку при смене идентификатора. |
| Детекция клонов ВМ | Если сервер обнаруживает два хоста с одинаковым UUID (клонирование диска) — выдаёт новому клону другой UUID. |
Kerberos / SPNEGO (доменные машины)#
В доменной среде (AD/FreeIPA/ALD Pro) клиент может использовать взаимную аутентификацию через Kerberos (SPNEGO). Это защищает от подмены сервера: для успешного обмена нужен валидный TGT от доменного KDC, который подменяющий сервер получить не может.
DNS TXT/SRV с health-probe#
При автообнаружении сервера клиент не доверяет записи слепо:
- Читает TXT
_lsus.<домен>и отбирает строки по своим IPv4 иcidr. - Если TXT нет или не подошла — SRV
_lsus._tcp.<домен>. - Зондирует выбранные цели через
GET /api/v1/health. - Предпочитает более узкий cidr / меньший prio / меньший RTT.
Многоуровневая защита
Клиент LSUS защищён на нескольких уровнях одновременно: TLS pinning (защита от подмены сертификата), Bearer-токен (аутентификация), Kerberos (взаимная проверка в домене), DNS health-probe (защита от подмены записи). Даже при компрометации одного уровня остальные продолжают работать.
Связанные страницы#
- Развёртывание серверов — установка серверных ролей.
- Требования и подготовка — firewall, DNS TXT/SRV.
- Обновление системы — обновление клиента.
- USB Control — контроль сменных носителей.
- Антивирус и установка обновлений — исключения антивируса для Linux-агента.