← Назад к «Клиент»

Клиент 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

lightbulbЯвно указывайте порт

Если сервер слушает на нестандартном порту (не 443), обязательно укажите его в URL: server_url = https://master.example.com:9443. Без явного порта клиент использует значение по умолчанию, которое может не совпасть с настройкой сервера.

Способ 2. DNS TXT / SRV (автообнаружение)#

Если создана DNS-запись, укажите домен вместо URL:

[server]
server_discovery_domain = example.com
# dns_discovery = false   # отключить поиск в закрытом контуре

infoКак клиент выбирает сервер

Приоритет источников адреса:
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 для снимка, МБ

lightbulbГде задавать адрес сервера

Адрес сервера (server_url или server_discovery_domain) задавайте в /etc/lsus-client/lsus-client-common.conf — этот файл сервис обновляет автоматически, и он сохраняется между перезапусками. lsus-client.conf — системный шаблон, его лучше не редактировать напрямую (обновление пакета может его перезаписать).

infoПараметры, приходящие с сервера

Большинство эксплуатационных настроек (интервал 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 сообщает, что снимки недоступны, и ничего не создаёт.

warningПодтверждение установки

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, подождите

Чек-лист «клиент не появляется на сервере»#

  1. systemctl status lsus-client — служба активна?
  2. lsus-client-ctl status — конфиг и адрес корректны?
  3. lsus-client-ctl test-connection — сервер достижим по HTTPS?
  4. lsus-client-ctl diagnose — полная проверка;
  5. Сетевой доступ: исходящий HTTPS до сервера (порт 443 по умолчанию), firewall;
  6. Доверие сертификату: verify_ssl и server_ca_cert;
  7. Зависимости: 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 с последующим закреплением сертификата:

  1. Первое подключение — клиент скачивает сертификат сервера с /api/v1/server-settings/repo-cert (без проверки TLS) и сохраняет в /etc/lsus-client/ca.crt.
  2. Закрепление — все последующие соединения проверяются по этому закреплённому сертификату.
  3. Проверка fingerprint — при каждом соединении вычисляется SHA-256 fingerprint реального TLS-сертификата и сравнивается с сохранённым. При несовпадении — диагностика и логирование, соединение отклоняется.

infoЧто если сертификат сервера сменился

При плановой замене сертификата на сервере нужно обновить 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#

При автообнаружении сервера клиент не доверяет записи слепо:

  1. Читает TXT _lsus.<домен> и отбирает строки по своим IPv4 и cidr.
  2. Если TXT нет или не подошла — SRV _lsus._tcp.<домен>.
  3. Зондирует выбранные цели через GET /api/v1/health.
  4. Предпочитает более узкий cidr / меньший prio / меньший RTT.

lightbulbМногоуровневая защита

Клиент LSUS защищён на нескольких уровнях одновременно: TLS pinning (защита от подмены сертификата), Bearer-токен (аутентификация), Kerberos (взаимная проверка в домене), DNS health-probe (защита от подмены записи). Даже при компрометации одного уровня остальные продолжают работать.

Связанные страницы#