Клиент 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 # опционально
Зависимости¶
| Зависимость | Назначение | Обязательность |
|---|---|---|
python3-requests |
HTTP-клиент для связи с сервером | обязательно |
python3-dbus |
связь сервиса с GUI | обязательно |
python3-gi |
GObject Introspection (D-Bus) | обязательно |
lvm2 |
создание снимков перед установкой обновлений | обязательно |
python3-dnspython |
DNS SRV-обнаружение сервера | рекомендуется (deb) / обязательно (ALT) |
python3-pyqt5 |
GUI-трей | только для lsus-client-gui |
Подключение к серверу¶
Клиент может находить сервер двумя способами: прямой URL или DNS 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 SRV (автообнаружение)¶
Если создана DNS SRV-запись, укажите домен вместо URL:
[server]
server_discovery_domain = example.com
Как клиент выбирает сервер
Приоритет источников адреса:
1. Назначенный сервер (после первого успешного запроса через SRV сервер может назначить клиенту конкретный Site);
2. DNS SRV-запись _lsus._tcp.<домен>;
3. Значение server_url из конфига.
Если SRV не настроен — достаточно server_url. Подробнее о DNS SRV — в Требованиях.
Запуск службы¶
sudo systemctl enable --now lsus-client.service
Проверка, что хост зарегистрировался:
lsus-client-ctl status
Конфигурация¶
Файлы конфигурации (приоритет от высокого к низкому):
| Файл | Кто создаёт | Назначение |
|---|---|---|
/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, если SRV не сработал) |
[server] |
server_discovery_domain |
автоопределение по FQDN хоста | домен для DNS SRV _lsus._tcp.<домен>. Если не задан — клиент берёт домен из FQDN машины автоматически |
[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.
| Команда | Назначение | Нужен root |
|---|---|---|
status |
показать URL сервера, токен, UUID, сертификат, наличие конфига | нет |
test-connection |
health-probe сервера (GET /api/v1/clients/health) |
нет |
diagnose |
полная диагностика: конфиг + файлы + эндпоинты /health и /clients/settings |
нет |
register |
принудительная регистрация на сервере | да |
set-server <url> |
задать server_url, сбросить назначенный сервер, переподключиться |
да |
clear-assigned-server |
сбросить assigned_server_url (вернуться к server_url) |
да |
reset-cert |
перезагрузить сертификат сервера | да |
reset-identity |
удалить UUID, сгенерировать новый, перерегистрироваться | да |
full-reset |
полный сброс (токен + CA), затем bootstrap + регистрация | да |
Типовые сценарии CLI¶
Проверить состояние клиента:
lsus-client-ctl status
Проверить связь с сервером (без аутентификации):
lsus-client-ctl test-connection
Полная диагностика (рекомендуется при проблемах):
lsus-client-ctl diagnose
Сменить адрес сервера:
sudo lsus-client-ctl set-server https://site.example.com
Принудительно перерегистрироваться:
sudo lsus-client-ctl register
Диагностика¶
Системная служба¶
# статус службы
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установлен (если используете SRV).
Признаки исправной работы¶
Клиент работает корректно, если:
- служба
lsus-client.serviceактивна; - хост появился в админке Master/Site;
- heartbeat обновляется (видно по времени последнего связи);
lsus-client-ctl statusпоказывает корректный URL и UUID;- политики с сервера применяются.
GUI-клиент (рабочие станции)¶
При установленном lsus-client-gui:
- значок в трее показывает состояние обновлений;
- левый клик — планирование установки;
- правый клик — сокращённое меню;
Ctrl+Alt + левый клик— расширенное меню.
GUI общается со службой через D-Bus, поэтому lsus-client (служба) должен быть установлен и запущен.
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 SRV с health-probe¶
При автообнаружении сервера через DNS SRV (_lsus._tcp.<домен>) клиент не доверяет записи слепо:
- Находит серверы по SRV-записи.
- Зондирует каждый через
GET /api/v1/health(замеряя время отклика). - Предпочитает серверы в той же подсети (
/24). - Выбирает сервер с минимальным RTT.
Многоуровневая защита
Клиент LSUS защищён на нескольких уровнях одновременно: TLS pinning (защита от подмены сертификата), Bearer-токен (аутентификация), Kerberos (взаимная проверка в домене), DNS health-probe (защита от подмены SRV-записи). Даже при компрометации одного уровня остальные продолжают работать.
Связанные страницы¶
- Развёртывание серверов — установка серверных ролей.
- Требования и подготовка — firewall, DNS SRV.
- Обновление системы — обновление клиента.
- USB Control — контроль сменных носителей.