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

Администрирование

Админ-консоль открывается по адресу /admin в кабинете и доступна операторам с ролью admin и owner. Роль owner дополнительно может создавать и удалять организации и видеть все организации; admin ограничен своей. Роли operator и viewer в админку не попадают.

Раздел Что здесь делают
Организации Создание организации (slug и название), удаление. Только для owner.
Операторы Создание оператора, роль, включение/отключение, удаление, локальный Unix-пользователь для терминалов («Терминал → юзер»), категории подтверждения команд («Апрув: категории»).
Агенты Регистрация машины (логин, hostname, отображаемое имя), токены подключения, теги, реле, режим доступа (Управляемый / Только по коду), канал и политика обновлений, выдача root воркеру на время, панель Скилы, управляемые туннели, ссылка на установщик для Windows.
NX endpoints Регистрация NX-эндпоинтов (только self-hosted), канал и политика обновлений. См. NX-эндпоинты.
Релизы Ключи подписи и список опубликованных релизов агента и NX с переводом между каналами и отзывом.
Audit log Журнал событий с фильтрами.
Заявки Заявки на закрытое тестирование с публичной формы: статусы «новая», «связались», «принята», «отклонена».

Создание. В разделе Операторы заполните email, пароль и роль; поле «Организация» пустое — оператор попадёт в вашу организацию. Тот же результат даёт CLI на хосте control plane:

Окно терминала
nythronix-server admin create-operator \
--email new@example.com --password "…" --role admin
nythronix-server admin list operators

Отключение. Кнопка Отключить в списке или nythronix-server admin disable operators --id <operator-id>. Оба пути немедленно отзывают сессии оператора и пишут admin.operator.disabled в аудит.

Сброс пароля. В интерфейсе смены пароля нет — на странице настроек оператор видит примечание «Смена пароля выполняется администратором». Сброс делается через CLI с тем же pepper, что и у сервера:

Окно терминала
nythronix-server admin \
--password-pepper "$NYTHRONIX_PASSWORD_PEPPER" \
reset-password --email admin@example.com --password "$(openssl rand -base64 24)"

Активные сессии оператора отзываются, в аудит попадает auth.password_changed с operator_id=cli. В compose-стеке команду выполняют внутри контейнера: docker compose exec control-plane /app/nythronix-server admin ….

Пароли агентов и NX-эндпоинтов сбрасываются командами admin reset-agent-password и admin reset-nx-endpoint-password; после этого обновите учётные данные на машине.

Публикация релиза агента и авто-обновление

Заголовок раздела «Публикация релиза агента и авто-обновление»

Релизы подписываются ключом Ed25519, а агенты проверяют подпись по закреплённому публичному ключу — control plane не может подменить бинарник.

  1. Ключ подписи. На машине сборки выполните nythronix-release init --out ~/keys/nyx.hex; команда печатает публичную часть. В разделе Релизы нажмите Зарегистрировать ключ подписи, укажите имя и публичный ключ в hex. Если оставить поле пустым, ключ сгенерируется на сервере, и приватная часть будет показана один раз.

  2. Доверие на машинах. Агенты, подключённые через токен (enroll), получают закреплённые ключи автоматически и хранят их в /etc/nythronix/agent.json. Для ручной установки задайте NYTHRONIX_TRUSTED_KEYS=<hex> в /etc/nythronix-agent/agent.env. Без ключей агент принимает обновления с проверкой только SHA-256 и пишет предупреждение.

  3. Публикация. На машине сборки (не на control plane — сборка тяжёлая):

    Окно терминала
    NYTHRONIX_SERVER=https://cp.example.com \
    NYTHRONIX_ADMIN_EMAIL=admin@example.com NYTHRONIX_ADMIN_PASSWORD=… \
    NYX_SIGN_KEY=~/keys/nyx.hex \
    scripts/release.sh 0.1.5

    Скрипт поднимает версию, собирает агент, NX-эндпоинт и CLI nx, подписывает и публикует их в канал stable (переменная CHANNEL задаёт другой).

  4. Каналы и политика. У каждого агента в разделе Агенты есть Канал (stable / canary) и Update policy: manual (по умолчанию — агент только подтверждает получение предложения), disabled, auto (применить сразу) и auto_idle_only (применить, когда на машине нет активных сессий). Агент получает предложение при следующем переподключении или по запросу POST /api/admin/agents/<id>/update-trigger, проверяет SHA-256 и подпись и перезапускается в новый бинарник; результат приходит в аудит как endpoint.update.ack.

  5. Управление релизами. В списке можно перевести релиз в stable или canary и Отозвать — отозванный релиз перестаёт предлагаться. Ключ подписи можно отключить; после этого новые публикации этим ключом не пройдут проверку.

Раздел Audit log показывает события с фильтрами по префиксу action (например auth или admin.operator), severity, operator id, типу цели и диапазону дат в формате RFC3339; страницы подгружаются кнопкой Загрузить ещё. Действия из CLI записываются с operator_id=cli.

Полезные имена событий:

  • auth.login, auth.login_failed, auth.password_changed;
  • admin.operator.*, admin.agent.*, admin.enroll_token.*, admin.release.*;
  • admin.agent.sudo_policy_set, admin.agent.mcp_config_set — выдача root воркеру и изменение скиллов;
  • agent.cmd_exec — каждая команда воркера на машине, с текстом и сведениями о подтверждении;
  • agent.mcp.call — каждый выполненный MCP-инструмент;
  • chat.approval.decided — решение оператора по карточке подтверждения;
  • security.unauthorized_access, security.signature_failure, endpoint.auth_failed — события с severity security.

При JSON-хранилище журнал лежит в audit.jsonl в каталоге состояния, и его удобно читать с хоста:

Окно терминала
jq -c 'select(.severity=="security")' /var/lib/nythronix/audit.jsonl | tail -50

По умолчанию состояние control plane — файлы в NYTHRONIX_STATE_DIR (в compose это том nythronix_state, смонтированный в /var/lib/nythronix). Резервная копия — архив каталога:

Окно терминала
tar -czf nythronix-state-$(date -u +%Y%m%dT%H%M%S).tgz -C "$NYTHRONIX_STATE_DIR" .

Восстановление выполняется на остановленном control plane:

Окно терминала
systemctl stop nythronix-server # или: docker compose stop control-plane
rm -rf "$NYTHRONIX_STATE_DIR" && mkdir -p "$NYTHRONIX_STATE_DIR"
tar -xzf nythronix-state-XXX.tgz -C "$NYTHRONIX_STATE_DIR"
systemctl start nythronix-server

После восстановления сверьте последние события в /admin/audit и список операторов через nythronix-server admin list operators. Вместе с состоянием храните NYTHRONIX_PASSWORD_PEPPER и приватный ключ подписи релизов — без них восстановленная копия непригодна. Если вы включили NYTHRONIX_STORAGE=postgres, резервируйте базу штатными средствами Postgres (pg_dump).