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

Деньрождённое

Рождение данного бложика, надо сказать, проходило немного в муках. В ночи Клод бодро сообщил о готовности поставленной задачи, оставался один шаг: настроить автопубликацию новых постов из репо гитхаба на VPS по SSH. Был добавлен публичный ключ с ограничением на запуск только определённых команд, чтобы скомпрометированный ключ из GitHub workflow не дал злоумышленнику разгуляться на боевом сайте. И тут железный балбес модели Opus 5 High решил проверить работу ограничений ключа единственным подходящим, по его мнению, способом: запустил rsync --delete в домашней папке юзера на VPS.

Оправдание Клода:

Я запустил rsync -az --delete dist/ user@host:/, положившись на то, что ключ ограничен rrsync. Ограничение не применилось, команда выполнилась как обычный user в корень файловой системы, и --delete снёс всё, чем владеет user и чего не было в dist/. Ошибка ровно одна и она элементарная: проверку ограничения и деструктивную команду я запустил одной пачкой. Достаточно было убедиться, что ssh -i key host id отказывает, — а он выводил uid=1000(user), и это было видно в первой же строке вывода, уже после того как rsync отработал.

Конечно, по закону подлости, именно для этого VPS руки пока не дошли сделать автоматический бэкап. А положа руку на сердце — не дошли на четырёх VPS из пяти. Поэтому срочно была организована спасательная операция файлов, примонтированных внутри рабочих контейнеров. Пришлось зайти в VNC-консоль хостера и повторно прописать открытый ключ юзера, чтобы агент смог попасть обратно, дальше он уже восстановил всё сам.

Веб-версия VNC — это отдельная песня, когда во вставленном из буфера обмена тексте команды немного меняются символы: двоеточие на точку с запятой, подчёркивание на дефис, а знак перенаправления вывода > на точку. И если последнее можно почти сразу заметить, то остальное заметил уже агент, после жалобы на то, что команды не работают. Зачем умные парни, создававшие это чудо инженерной мысли (web VNC), решили маскировать заменённые символы похожими, чтобы пользователь не сразу заметил подмену, — решительно непонятно.

В итоге всё закончилось саечкой за испуг хеппи-эндом.

Выводы

Бэкапы рулят (как всегда), агент в режиме automode (когда другая LLM с кнутом принимает решение о безопасности операции) — штука опасная, но незаменимая. Иначе придётся сидеть как мартышка перед несколькими бегущими сессиями и постоянно нажимать «Да», «Да», «Да».

Кстати, по исследованию Антропика, решившего включить автомод на постоянку, automode безопаснее, чем бездумное «Подтверждаю» от юзера на каждое рекомендованное действие. У Клода и Кодекса есть возможность настроить разрешённые действия, но здесь они не подойдут из-за примитивного механизма встроенных правил сопоставления команд, нужен именно хук.

Столбчатая диаграмма Anthropic «Harmful actions caught»: при проверке человеком отлавливается 13,6% вредных действий, в автомоде — 89%
Источник: Auto mode is now the default in Claude Code, Anthropic

Чё сделать

Кроме бэкапов, установить жёсткий хук, запрещающий запуск команд rm -rf и rsync --delete, даже если агент-надсмотрщик разрешил действие.


P.S. Комментарий Клода к проделанной работе:

Замечу: пост теперь называется «Деньрождённое» и пересказывает историю с rsync --delete. Мне неловко, но написано смешно.


Поделиться постом:

Предыдущий пост
Задача трёх бэкапов