Tvijo wiki
Каталог

Теми

Як дозволити агенту виконувати команди оболонки: пісочниця або відмова

Оболонка — найпотужніший інструмент, який можна віддати агенту. Загортайте кожну команду в пісочницю операційної системи, а якщо пісочниці немає — відмовляйтеся виконувати, а не запускайте без захисту. Небезпечний перемикач має бути явним, гучним і вимкненим за замовчуванням.

🎯 Для Розробник, який дає агенту інструмент оболонки або виконання коду

📚 Ви дізнаєтеся
  • Що ізолює мінімальна пісочниця для команд агента
  • Чому за замовчуванням має бути відмова, коли пісочниці немає
  • Як не дати аварійному виходу стати звичайним шляхом

🐚 Чому оболонка — це інше

Більшість інструментів роблять одну річ. Інструмент оболонки робить усе, що може зробити обліковий запис: читає ключі, видаляє каталог, відкриває мережеве з'єднання, запускає фоновий процес. Агент, який може виконувати команди, безпечний рівно настільки, наскільки безпечна оболонка навколо цих команд, бо його інструкції походять із тексту, який може містити текст, якому довіряти не варто.

🧱 Що робить наша пісочниця

Наш інструмент оболонки для агента ніколи не виконує команду напряму. Він загортає її в програму ізоляції: спершу bwrap, а firejail як альтернатива. З bwrap обгортка робить таке.

  • Починає з порожньої кореневої файлової системи в пам'яті, потім додає лише те, що потрібно команді, змонтоване тільки для читання: системні програми та бібліотеки.
  • Робить записуваними лише дозволені робочі теки й створює робочий каталог усередині них.
  • Ізолює список процесів, міжпроцесну взаємодію та ім'я хоста від решти машини.
  • Відрізає мережу, якщо виклик явно її не дозволяє.
  • Завершується разом із батьківським процесом, тож зависла команда не переживе агента.

Перелік дозволених робочих тек налаштовується, а шлях поза ним відхиляється ще до запуску обгортки.

🚫 Головне: немає пісочниці — немає запуску

Якщо жодної програми ізоляції не встановлено, інструмент не переходить до виконання команди без захисту. Він повертає помилку з назвою no_sandbox_available і нічого не робить. Саме це рішення зафіксоване в нашій проєктній нотатці від 23 травня 2026: безпечне замовчування, яке закривається при збої.

Аварійний вихід існує, бо на ноутбуці розробника може не бути програми ізоляції: змінна середовища, яка дозволяє команди без ізоляції. Її використання друкує попередження під час кожного запуску, а кожен виклик — дозволений чи відхилений — записується в аудит із зазначенням використаного ізолятора. Тримайте цей перемикач поза визначеннями служб. Сенс у самій формі: небезпечний режим потребує навмисної, видимої дії, а безпечний — жодної.

🛠️ Практика: загорніть власний інструмент оболонки

  1. Визначте, у які теки команда може писати, і запишіть їх в одному налаштуванні.
  2. Встановіть програму ізоляції на кожному хості, де працюють агенти. Перевірте скриптом, який друкує знайдену програму.
  3. Напишіть обгортку так, щоб список команд передавався програмі ізоляції як аргументи, а не як рядок для другої оболонки.
  4. Відрізайте мережу за замовчуванням. Додайте прапорець на рівні виклику для тих небагатьох команд, яким вона потрібна, і журналюйте кожне використання.
  5. Зробіть так, щоб інструмент повертав зрозумілу помилку, коли програму ізоляції не знайдено. Не додавайте тихого запасного шляху.
  6. Додайте один перемикач середовища для небезпечного режиму. Хай він друкує попередження щоразу, і тримайте його поза робочими юнітами.
  7. Напишіть тести: запис поза дозволеними теками зазнає невдачі, мережевий виклик зазнає невдачі, відсутня програма ізоляції дає відмову.

✅ Перевірте себе

  • Виконайте команду, яка пише у вашу домашню теку. Вона зазнає невдачі.
  • Виконайте команду, яка відкриває мережеве з'єднання. Вона зазнає невдачі, якщо виклик не дозволив мережу.
  • Приберіть програму ізоляції на тестовому хості. Інструмент відмовляє з названою помилкою.
  • Пошукайте небезпечний перемикач у своїх визначеннях служб. Його там немає.

🚧 Коли це не працює

  • Втечі через дозволені теки. Усе, що ви зробили доступним для запису, агент може змінити. Не додавайте до переліку корінь репозиторію, вашу домашню теку чи теку з ключами.
  • Мережа ввімкнена. Якщо команді потрібна мережа, вона може надіслати все, що здатна прочитати. Дозволяйте її лише для названих команд.
  • Помилки на рівні ядра. Пісочниця зменшує ризик і не є гарантією. Тримайте хост з оновленнями й не запускайте її від найпривілейованішого облікового запису.
  • Повільні команди. Ізоляція додає час на запуск. Не пропускайте її, щоб зекономити мілісекунди.
  • Контейнери приховують проблему. Якщо агент уже працює в одноразовому контейнері, другий шар може додати мало. Вирішіть це явно й запишіть.

📊 Докази

3 листопада 2026, 21:53 UTC інструмент оболонки перелічував у своєму коді дві програми ізоляції. На хості, який створив цю сторінку, bwrap було встановлено, а firejail не було встановлено. Файл тестів пісочниці оболонки містив 14 тестів, а загальний файл тестів інструментів — 11.

Що ми міряли Варіанти ізоляції в коді інструмента, їхня наявність на цьому хості та кількість тестів
Коли 3 листопада 2026, 21:53 UTC
Артефакт Модуль інструмента оболонки, його файл тестів пісочниці та проєктна нотатка від 23 травня 2026 у нашому приватному репозиторії
Обмеження Кількості показують, що поведінка покрита тестами, а не те, що втечі не існує

➡️ Далі

Прочитайте, чого агент може торкатися, у Дозволи та потік даних, а також рішення в Доступ агента до оболонки: розвилки рішень.

Джерела

Зв’язки опублікованих статей. Виберіть вузол, щоб відкрити статтю біля заголовка.

100%
→ Пов'язані статті← Посилаються сюди⋯ Та сама тема
Зв’язки статей · клавіатура / текст

💬 Коментарі

Коментарі публічні та модеруються. Не публікуйте персональні дані.
  • Коментарів ще немає. Будьте першим!

Наступні кроки

AI agents and MCP explained

Векторна база — це мапа, а не джерело: що ми з'ясували про пошук

Векторна база знаходить уривки, близькі за змістом до вашого запиту. Вона не знає, які з них правдиві чи актуальні. Сприймайте кожен результат як вказівник: відкрийте названий файл, перевірте хеш і беріть числа з артефакту, а не зі знайденого абзацу.

AI agents and MCP explained

Коли невідомо, скільки коштував виклик моделі: заморожування, потім звіряння

Іноді виклик моделі перевищує час очікування, і ви не знаєте, чи провайдер списав кошти. Ніколи не записуйте це як нуль. Позначте витрату як непевну, зупиніть нові платні виклики й доручте названій людині звірити її з випискою провайдера. Виняток — відмови, що сталися до генерації.

AI agents and MCP explained

Розбиття великого завдання для дешевої моделі: урок про 24 000 байтів

Дешева модель добре дає раду з однією невеликою чітко окресленою роботою, але погано з великим нагромадженням. Ми обмежуємо завдання 24 000 байтами і відмовляємо більшим ще до виклику моделі. Діліть на одиниці — один файл або одна країна на завдання — і перевіряйте розмір до початку.

AI agents and MCP explained

Навички, інструменти MCP і правила: три способи дати агенту можливості

Агенти отримують можливості по-різному. Правило обмежує те, що вони роблять, навичка підказує, як виконати роботу, а інструмент MCP дозволяє викликати функцію. Кожен із трьох має власний ризик, тож фіксуйте всі три в реєстрі й перевіряйте тестом, що нічого не існує поза ним.