Перейти к содержимому

Типовая конфигурация: банкоматы

Этот раздел показывает, как Tessera разворачивается на парке банкоматов и кто из инженеров что сможет делать на устройстве. Адресован инженерам сопровождения и специалистам по безопасности банка: после прочтения видно устройство доступа, роли и границы прав ещё до пилота.

Конкретные значения (роли, сроки, группы) — пример одного безопасного профиля, а не единственно возможный. Полный справочник параметров — configuration.md; режимы входа — pam-integration.md; мандатный контроль на Astra — mac-integrity.md.

Банкомат — устройство без управляющей сети (zero-egress): в момент входа инженера обращение к серверу невозможно. Поэтому вся проверка доступа — локальная, на самом устройстве.

На банкомате:

  • Tessera Engine — проверяет удостоверение и применяет права (enforcement);
  • Tessera Login (PAM-модуль) — точка входа в ОС;
  • monitord — следит за носителем (извлекли флешку — сессия закрывается);
  • локальная база ролей в /var/lib/tessera/roles/;
  • корневой сертификат удостоверяющего центра в /etc/tessera/.

Инженер приносит удостоверение с собой — сертификат на USB-носителе под PIN или на аппаратном токене (Rutoken, JaCarta). Сервер (Tessera Control) при наличии связи доставляет обновления ролей и списков отзыва, но в момент входа не нужен.

«Роль» в Tessera — именованный набор прав ОС, активируемый на сессию при входе. Людей называем по должности; роль — это про права, не про человека. Один инженер может входить под разными ролями, если они разрешены его удостоверением.

Типовой профиль банкоматного парка — три роли:

  • oper — оператор: повседневное обслуживание (замена кассет, просмотр журналов, перезагрузка). Минимум прав.
  • serv — сервисный инженер: наладка, диагностика, доступ к служебным командам через sudo, повышенные лимиты ресурсов.
  • admin — администратор (на Astra — с мандатным контролем целостности): высокий уровень доступа, короткий срок сессии.

Что каждая роль разрешает на банкомате. «✓» — разрешено правами роли, «—» — недоступно. Прикладное ПО банкомата (драйвер устройства выдачи, терминальное приложение, служба мониторинга) Tessera не заменяет: роль выдаёт сессии группы и sudo-правила, по которым ОС пускает инженера к этому ПО и его служебным операциям.

Операцияoperservadmin
Вход на устройство по удостоверению
Просмотр журналов и состояния
Обслуживание кассет, расходники
Перезагрузка устройства
Доступ к служебным операциям прикладного ПО
Команды наладки через sudo
Изменение системной конфигурации
Управление учётными правами на устройстве
Отключение защитных рубежей (ЗПС, МКЦ, контроль запуска ПО)
Срок сессии (TTL)8 ч4 ч2 ч

TTL — верхняя граница сессии: по истечении инженер входит заново. Чем выше права, тем короче сессия.

Сертификат — не просто пропуск «свой/чужой». В нём зашиты:

  • личность инженера — субъект сертификата; попадает в каждую запись журнала;
  • привязка к устройству (host-binding) — сертификат выписан на конкретный банкомат; украденная флешка бесполезна на соседнем устройстве парка;
  • разрешённые роли — под какими ролями инженеру можно войти;
  • срок жизни (TTL) — часы или смена, не бессрочно.

Проверка всех четырёх — на устройстве, без сети.

  1. Инженер вставляет носитель, вводит PIN, выбирает роль.
  2. Engine проверяет локально: подпись сертификата по цепочке доверия → host-binding (это устройство) → срок → разрешена ли запрошенная роль.
  3. При успехе открывается сессия на запрошенной роли по принципу наименьших привилегий — даже если сертификат разрешает больше.
  4. monitord следит за носителем. Извлекли флешку — сессия завершается (для банкоматов: немедленно).
  5. По истечении TTL вход нужно повторить.

Ключи приведены как в /etc/tessera/config.toml; полное описание каждого — в configuration.md. Принцип профиля — fail-closed: при сомнении доступ закрывается.

# Удостоверение на аппаратном токене (Rutoken/JaCarta). Для контейнера
# на флешке — mode = "pkcs12".
crypto_backend = "openssl"
mode = "pkcs11"
pkcs11_module = "/usr/lib/librtpkcs11ecp.so"
# Реакция на извлечение носителя. Для банкомата — закрыть сессию сразу.
on_usb_removed = "logout" # или "shutdown" — обесточить хост
usb_removed_grace_seconds = 0 # без отсрочки
# Отказ демона мониторинга трактуется как отказ в доступе.
monitor_fail_mode = "strict"
[trust]
# Корневой сертификат удостоверяющего центра. Минимум один.
anchors = ["/etc/tessera/ca/bundle.pem"]
[trust.revocation]
# "none" — отзыв по сроку жизни сертификата (TTL-backstop);
# "crl" — плюс локальный список отзыва, обновляемый при наличии связи.
mode = "crl"
crl_paths = ["/var/lib/tessera/crl/parkruntime.crl"]
crl_max_age_hours = 24
[host_identity]
# Источник идентичности устройства (machine-id, серийники DMI).
# fallback = "deny" — если идентичность не подтверждена, вход закрыт.
fallback = "deny"

Минимальные права файлов: корневой сертификат — 0640 root:root, каталог ролей /var/lib/tessera/roles/0755 root:root, срезы ролей — 0644.

Для банкоматов рекомендуется режим cert-only — сертификат единственный фактор, без отхода на пароль. Потеря или блокировка токена означает полную недоступность входа — это осознанный выбор для необслуживаемого устройства (чек-лист перед раскаткой — operations.md).

PAM-сниппет (/etc/pam.d/tessera-only):

auth [success=done default=die] pam_tessera.so
account required pam_tessera.so

Подключается скриптом, который ставит строки в правильном порядке и добавляет фазу сессии после common-session:

Окно терминала
sudo /usr/share/tessera/integrate-pam.sh --mode=cert-only /etc/pam.d/login
sudo /usr/share/tessera/integrate-pam.sh --mode=cert-only /etc/pam.d/sudo

Роль — это файл-срез в каталоге базы ролей. База — для одной ОС: срезы Linux и Astra не смешивают в одном каталоге. Срезы проверяются перед раскаткой: tessera role lint --dir /var/lib/tessera/roles --os linux.

Права выдаются через стандартные механизмы ОС: дополнительные группы, sudo-роли, лимиты systemd на сессию. Группы Engine выставляет сам (не через pam_group) — чтобы права нельзя было обойти через DBus или sudo.

Оператор — минимальный профиль:

role = "oper"
version = 1
os = "linux"
name = "Operator"
level = 1
[payload]
groups = ["operators"] # членство в группе на сессию
[session]
max_ttl_seconds = 28800 # 8 ч

Сервисный инженер — sudo и повышенные лимиты:

role = "serv"
version = 1
os = "linux"
name = "Service Engineer"
level = 5
[payload]
groups = ["service", "wheel"]
sudo_role = "service" # правило sudoers, действующее в сессии
[payload.limits]
nofile = 4096 # лимит открытых файлов
[session]
max_ttl_seconds = 14400 # 4 ч
memory_max = "2G" # systemd MemoryMax — жёсткий потолок памяти
tasks_max = 512 # systemd TasksMax

Доступ инженера к служебным операциям прикладного ПО банкомата задаётся именно так: группа и sudo-правило в роли определяют, какие команды и службы устройства инженеру доступны. Где лежит и как устроено само прикладное ПО — определяет его поставщик; Tessera управляет только правами доступа к нему.

8.2. На Astra с мандатным контролем целостности (МКЦ)

Заголовок раздела «8.2. На Astra с мандатным контролем целостности (МКЦ)»

На Astra Linux SE роль дополнительно несёт потолок уровня целостности (МКЦ). Сертификат инженера задаёт максимальный уровень, роль — битовую маску; эффективный уровень сессии = минимум из потолка сертификата и маски роли.

role = "admin"
version = 1
os = "astra"
name = "Administrator"
level = 63 # отражает уровень МКЦ на Astra
[payload]
mac_mask = "0x3f" # битовая маска МКЦ
[session]
max_ttl_seconds = 7200 # 2 ч

Важно. В открытой сборке Tessera маска mac_mask разбирается, но не применяется: адаптер enforcement через МКЦ — коммерческое расширение. На открытой сборке срез роли с mac_mask отклоняется в момент входа. Подробнее о механизме — mac-integrity.md.

Tessera управляет доступом: кто вошёл, под какой ролью, какие группы и sudo-правила действуют в сессии. Она не управляет защитными рубежами устройства и не выдаёт прав на их отключение. Эти рубежи — отдельный слой, действует независимо от того, кто и под какой ролью вошёл. Роль admin — высокие права в рамках ОС, но не «выключатель» защиты.

Независимые рубежи на банкомате:

  • Замкнутая программная среда (ЗПС / DIGSIG на Astra) — ядро запускает только подписанные исполняемые файлы; неподписанный бинарь отвергается на execve/mmap. Запуск постороннего ПО невозможен независимо от роли. То же относится к иным модулям контроля запуска, если они установлены.
  • Мандатный контроль целостности (МКЦ) — механизм ядра PARSEC. Высокая маска целостности в роли задаёт уровень в рамках МКЦ, но не право отключить МКЦ.
  • Контроль целостности самой Tessera — бинарники Engine и PAM-модуля подписаны и охраняются ЗПС; инженер с ролью admin не может подменить их или конфигурацию, обойдя проверку.

Ключевой принцип безопасного профиля: роль не должна нести sudo-правил, позволяющих перевести ЗПС или МКЦ в режим без enforcement, остановить их службы или подменить ключи подписи. Переключение этих подсистем — не рядовая операция инженера, а изменение доверенного состояния устройства; оно выполняется вне обычного входа и по отдельному регламенту. Tessera здесь — не последний рубеж, а слой доступа поверх уже неизменяемой среды.

Доступ инженера прекращается двумя путями:

  • По команде (нужна связь с устройством): список отзыва (CRL) и завершение живых сессий, карантин устройства. Доходит до банкомата при очередном сеансе связи.
  • По сроку (работает всегда, без сети): сертификат протухает по TTL — часы или смена. Это backstop: даже на полностью изолированном банкомате отозванный инженер теряет доступ после истечения срока.

Профиль с mode = "crl" сочетает оба: при связи список отзыва свежий, без связи держит TTL. На парке без связи допустим mode = "none" с опорой только на TTL.

СобытиеПоведение
Инженер вынул флешкуСессия завершается (по профилю — сразу)
Истёк TTL сессииТребуется повторный вход
Сервер недоступенВход по действующим сертификатам работает; истёкшие не продлеваются
Отзыв не доставлен (нет связи)Сертификат всё равно протухнет по TTL
Демон мониторинга отказалmonitor_fail_mode = "strict" → вход закрывается
Идентичность устройства не подтвержденаfallback = "deny" → вход закрывается

Отказ серверного компонента не открывает дверь и не запирает валидного инженера с действующим сертификатом. Безопасность одинакова с сервером и без — сервер добавляет масштаб и свежесть данных, не безопасность.

  • Корневой сертификат на устройстве, права 0640 root:root.
  • host_identity.fallback = "deny".
  • monitor_fail_mode = "strict".
  • on_usb_removed = logout или shutdown, usb_removed_grace_seconds = 0.
  • Режим входа cert-only подключён к нужным сервисам (login, sudo, графический вход).
  • Срезы ролей прошли tessera role lint.
  • TTL ролей соответствует риску (выше права — короче сессия).
  • Для Astra с МКЦ — установлен коммерческий адаптер enforcement.
  • ЗПС (DIGSIG) в режиме enforce; бинарники Tessera подписаны.
  • Ни одна роль не содержит sudo-прав на управление ЗПС, МКЦ или ключами подписи.
  • Список отзыва (если mode = "crl") обновляется не реже раза в смену.
  • Проверен сценарий потери токена и порядок аварийного доступа.
  • configuration.md — полный справочник config.toml.
  • pam-integration.md — режимы входа и интеграция в PAM.
  • cert-issuance.md — выпуск удостоверений и расширения сертификата.
  • mac-integrity.md — мандатный контроль целостности на Astra.
  • operations.md — эксплуатация, чек-лист перед раскаткой.