Аудит и коды завершения
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(по умолчанию facilitylocal0).
Пример записи:
{"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-токен. Только метаданные операции.
Направьте 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.