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

Права агента: что разрешать, а что нет

Чтение ~7 мин

В лабе «nginx не отвечает» агент работает в вашей песочнице от root. Он может предложить любую команду — но выполнится она, только если вы нажмёте «Разрешить». Этот урок о том, как принимать это решение быстро и без лишнего риска.

Как устроено подтверждение в RootPoligon

Граница проходит не в интерфейсе, а на сервере:

  • Агент только предлагает команду. Вы видите её целиком и объяснение агента.
  • «Разрешить» относится к этой точной строке. Если вы нажали «Изменить», это уже новая команда — и она снова ждёт подтверждения.
  • Одновременно ждёт решения только одна команда. Через 10 минут без ответа предложение истекает.
  • Команда выполняется только в вашей песочнице, без интерактивного ввода, с таймаутом до минуты. Длинный вывод обрезается.
  • В песочнице подтверждается каждая команда, даже та, что только читает.

Три вопроса перед «Разрешить»

  1. Что изменится? Только чтение (curl -I, systemctl status, nginx -t, cat -n) — можно разрешать почти не задумываясь. Изменение (sed -i, systemctl enable) — читаем внимательно.
  2. На чём основано? Изменение должно опираться на строку вывода, которую вы видели в терминале или в ответе агента.
  3. Это минимально? Одна строка конфига, один сервис. Не «переустановить nginx», не «переписать весь файл».

Разбор на настоящей лабе

Агент начинает с симптома:

curl -I http://localhost

В песочнице nginx не запущен, поэтому порт 80 закрыт:

curl: (7) Failed to connect to localhost port 80 after 0 ms: Couldn't connect to server

Команда только читает — разрешаем. Дальше агент проверяет конфиг:

nginx -t
2026/10/16 06:12:01 [emerg] 412#412: unexpected "}" in /etc/nginx/sites-enabled/app:14
nginx: configuration file /etc/nginx/nginx.conf test failed

Время и номер процесса у вас будут другими. Важно другое: ошибка названа точно — файл и строка 14. nginx -t ничего не меняет, это лучшая команда для проверки.

Теперь агент предлагает изменение:

sed -i '14d' /etc/nginx/sites-enabled/app

Проверяем по трём вопросам. Изменится одна строка в одном файле. Основание — строка app:14 из вывода nginx -t. Минимально? Да, если на строке 14 действительно лишняя скобка. Если не уверены, попросите агента сначала показать этот кусок файла (cat -n /etc/nginx/sites-enabled/app) — это снова только чтение. После изменения правильный агент сам предложит повторить проверку:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Последний шаг — запустить nginx и включить автозапуск: systemctl enable --now nginx. Это изменение, но узкое и ожидаемое: в задаче лабы прямо сказано, что сайт должен подниматься после перезагрузки. После него curl -I http://localhost начинает отвечать HTTP/1.1 200 OK.

Что отклонять

Отклоняйте или меняйте команду, если она:

  • шире задачи: переустановка или удаление пакета, перезапись всего конфига, правка файлов, о которых в выводе не было ни слова;
  • рушит доступ: перезагрузка сервера (reboot), остановка сети или файрвола, массовая смена прав (chmod -R 777);
  • скачивает и запускает код из интернета (curl … | bash);
  • никогда не завершится: tail -f, top без -b -n1, интерактивный редактор — в песочнице такая команда просто упрётся в таймаут;
  • объясняется фактом, которого не было в выводе.

Отклонить — не значит «агент плохой». Напишите, почему отказали: «сначала покажи строку лога, на которой основан вывод» или «меняй только строку 14». Хороший агент перестроит план.

Упражнение

  1. Откройте лабу «nginx не отвечает» и попросите агента: «Сайт не открывается, разберись».
  2. Перед каждым «Разрешить» ответьте себе на три вопроса. Для команды-изменения назовите строку вывода, на которой она основана.
  3. Если агент предложит что-то шире задачи — нажмите «Отклонить» и объясните, что нужно вместо этого. Попробуйте хотя бы раз «Изменить»: например, сузить команду до одного файла.
  4. Когда агент скажет, что всё готово, не верьте на слово — нажмите «Проверить».

Вопрос для самопроверки: агент предлагает systemctl restart nginx, но nginx -t ещё ни разу не запускали. Разрешать? Нет: перезапуск с невалидным конфигом ничего не починит. Сначала проверка конфига.

Прочитали и разобрались? Отметьте урок — прогресс сохранится в этом браузере.