Agent hardening

Agent не должен быть SSH с красивой кнопкой.

Если agent умеет запускать действия в инфраструктуре, относитесь к нему как к production access: отдельный пользователь, ограниченные команды, ротация токена и audit log.

Принципы

Systemd baseline

# /etc/systemd/system/nerve-agent.service
[Unit]
Description=Nerve remediation agent
After=network-online.target

[Service]
User=nerve-agent
Group=nerve-agent
EnvironmentFile=/etc/nerve/agent.env
ExecStart=/usr/local/bin/nerve-agent -server api.nerve.ink:443 -token ${NERVE_AGENT_TOKEN}
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=/var/lib/nerve-agent /run/nerve-actions

[Install]
WantedBy=multi-user.target

Wrapper вместо команды с телефона

Операционную логику лучше хранить в коротких скриптах, которые можно ревьюить, тестировать и версионировать. Действие agent должно вызывать имя wrapper, а не длинную команду, набранную во время аварии.

#!/bin/sh
# /usr/local/lib/nerve-actions/restart-api
set -eu
echo "action=restart-api host=$(hostname) start=$(date -Is)"
systemctl restart api.service
systemctl is-active --quiet api.service
echo "action=restart-api status=ok end=$(date -Is)"

Сначала диагностика, потом mutation

Начинайте с read-only действий: status сервиса, tail логов, disk usage, dependency health, current release SHA. Mutating actions вроде restart, rollback или cache clear должны быть редкими, явно названными и привязанными к runbook.

Sudoers scope

Если действию нужны повышенные права, выдавайте agent user доступ к конкретному wrapper path, а не к широкому shell. Такой wrapper должен проходить review как deploy script.

# /etc/sudoers.d/nerve-agent
nerve-agent ALL=(root) NOPASSWD: /usr/local/lib/nerve-actions/restart-api
nerve-agent ALL=(root) NOPASSWD: /usr/local/lib/nerve-actions/collect-api-diagnostics

Ротация и инциденты

Если agent token утек, остановите service, выпустите новый token, проверьте host и только потом перезапускайте agent. Не переносите token с машины, состояние которой уже неизвестно.

Похожие страницы