Перейти к основному содержимому
Версия: 7.0

Аудит и коды завершения

Этот раздел — про автоматизированный вариант

Fail-closed журнал и коды завершения ниже относятся к командам users create-service-account и recovery grant-admin — то есть к варианту на сервисном аккаунте (Настройка сервисного аккаунта). У упрощённого варианта на обычном пользователе своего локального журнала нет — см. примечание в конце страницы.

Два уровня аудита

Продуктовый журнал аудита Пассворка (История действий, в API — Activity Log) фиксирует итог операции — выдачу доступа уровня Администратор от имени сервисного аккаунта, — но ничего не знает о самой церемонии Шамира: сколько долей собрано, из порога M из N, кто именно был держателем. Эти сведения существуют только вне продукта — в локальном журнале, который ведёт passwork-cli.

История действий ПассворкаЛокальный журнал восстановления
Что фиксируетФакт выдачи доступа (actor, target, vault, время)Кворум (M, N), участников операции, результат, код завершения
Где хранитсяНа сервере ПассворкаНа машине оператора, файл JSONL
Как связаныПо activity_log_correlation_id, если сервер доступенСсылается на запись Истории действий через тот же идентификатор

Формат и расположение локального журнала

Журнал — файл в формате JSONL (одна JSON-запись на строку), пополняется только через дозапись (append-only).

  • Путь по умолчанию: ~/.passwork/recovery-audit.log (или $XDG_DATA_HOME/passwork/recovery-audit.log, если задана переменная XDG_DATA_HOME).
  • Переопределяется переменной PASSWORK_RECOVERY_AUDIT_LOG или флагом --audit-file.
  • Дополнительно можно включить дублирование в syslog флагом --syslog (по умолчанию facility local0).

Пример записи:

{"timestamp":"2026-07-24T13:20:05.123456Z","event":"grant_admin","contour":"service_account","operator_identity":"65f1a2b3c4d5e6f7a8b9c0d1","result":"ok","cli_version":"0.2.0","vault_id":"vault-123","target_user_id":"user-456","m":3,"n":5,"shares_used":3,"activity_log_correlation_id":"al-789","operation_id":"3fa2c1e0-..."}

В журнал никогда не попадают сами секреты: ни мастер-ключ, ни доли, ни API-токен. Только метаданные операции.

Экспорт в SIEM

Направьте JSONL-файл или syslog-поток passwork-cli во внешнюю систему мониторинга — это единственный способ увидеть в SIEM детали церемонии Шамира, которых нет в Истории действий.

Fail-closed: без записи в журнал операция не выполняется

Перед выдачей прав recovery grant-admin проверяет, что журнал восстановления доступен для записи. Если журнал недоступен — в том числе если путь оказался символической ссылкой, — команда завершается с кодом 9, и права никому не выдаются. Это намеренное ограничение: операция без следа в аудите не выполняется вовсе.

Права доступа к файлам

ЧтоПраваПравило
Доли, ключи держателей, токены, восстановленные секреты0600Записывать в файл через --out-dir / --out-file / --token-file, не выводить в терминал
Каталоги с этими файлами0700Создаются автоматически CLI
Журнал восстановления0600Символические ссылки на его месте отклоняются
Вывод секретов в терминалТолько по флагу --stdoutСопровождается предупреждением в поток ошибок; не использовать в CI и общих терминалах

Коды завершения команд

КодЗначениеВ каких командах встречается
0Успехвсе
1Прочая ошибкавсе
2Ошибка чтения или записи файлаshamir, rsa, users create-service-account, recovery grant-admin
4Неверные аргументы командыshamir, users create-service-account, recovery grant-admin
5Ошибка криптографииshamir split, rsa, users create-service-account
6Долей недостаточно для порога или они несовместимы друг с другомshamir recover, recovery grant-admin
7Клиентское шифрование выключено на сервереusers create-service-account, recovery grant-admin
8Ошибка аутентификации, расшифровки или доступа к сейфу (в том числе поддельные доли) — сервер не изменяетсяrecovery grant-admin
9Журнал восстановления недоступен для записи — выдача прав не выполняетсяrecovery grant-admin
10Лицензия не позволяет использовать сервисные аккаунтыusers create-service-account

При любом ненулевом коде, кроме 9, локальная запись в журнале восстановления всё равно делается — фиксируется и неудачная попытка, чтобы у неё был след в аудите.

Упрощённый вариант: аудита по умолчанию нет

Команды shamir split/recover, которые использует упрощённый вариант без сервисных аккаунтов, не принимают --audit-file/--syslog и не пишут ничего в ~/.passwork/recovery-audit.log — fail-closed журнал есть только у create-service-account и grant-admin. Единственный след в продукте — обычная запись в Истории действий о выдаче доступа, которую сделает оператор вручную через UI/API; деталей самой церемонии Шамира (кворум, держатели) там не будет. Если это важно, ведите отдельный журнал церемонии вручную или собственной обвязкой поверх CLI.