SSD Nodes Learn
Посібники Matt ConnorВід Matt Connor · Оновлено 2026-07-24

Як безпечно запустити Claude Code на сервері

Дізнайтеся, як обмежити зону ризику при використанні прапора --yes та налаштувати ізоляцію через sandbox або VPS для безпечної роботи Claude Code.

Що означає безпечне використання Claude Code на сервері

Щоб безпечно запускати Claude Code на сервері, увімкніть запити на підтвердження прав, запускайте його від імені виділеного непривілейованого користувача та забезпечте для автономної роботи реальні межі замість простої довіри: вбудовану пісочницю (sandbox), контейнер або тимчасовий VPS, на якому немає нічого важливого. Прапор --dangerously-skip-permissions видаляє етап підтвердження між моделлю та вашою shell. Ця компроміса може бути виправданою для автономної роботи, але тільки всередині межі, яка обмежує область дії однієї помилкової команди. Цей посібник пояснює, що саме змінює цей прапор і як побудувати ці межі за допомогою рівнів ізоляції.

Що Claude Code може зробити на вашому пристрої

Claude Code — це агент для програмування, який працює у вашому терміналі. Він читає файли, записує файли та виконує shell-команди від імені користувача, який його запустив. У цьому полягає вся цінність інструменту: він може клонувати репозиторій, редагувати код, запускати тести, читати помилки та виправляти код у циклі без необхідності вводити кожну команду вручну. Якщо ви ще не налаштували його на сервері, запуск Claude Code на VPS з tmux описує встановлення та керування сесіями. Ця сторінка описує можливості, які ви надаєте агенту після налаштування.

Ризик полягає в тому, що одна помилка може призвести до катастрофи. Процес, який виконує shell-команди від імені вашого користувача, може робити все те саме, що і ваш користувач. Він може читати ~/.ssh/id_ed25519, ~/.aws/credentials та кожен .env файл, який може відкрити ваш користувач. Він може запускати curl і надсилати дані на будь-який хост, до якого має доступ сервер. Він може запускати git push --force. Агент не має власних намірів. Небезпека полягає в тому, що завдання може піти не так, або текст, який він прочитав під час роботи, містить інструкції, написані кимось іншим: веб-сторінка, яку він завантажив, або коментар у issue, яке йому було наказано виправити. Другий випадок називається prompt injection (ін'єкція промпту), і саме тому твердження «модель зазвичай розсудлива» не є планом безпеки. Плануйте на випадок помилкового виконання, а не на випадок середнього.

Система дозволів простими словами

За замовчуванням Claude Code запитує підтвердження перед дією. Читання файлів у межах проєкту відбувається без запитів, але редагування файлу або виконання shell-команди спочатку показує вам точне редагування або команду і чекає на підтвердження (yes). Ви можете схвалити одну дію або схвалити цей тип дій на весь час сесії. Ці підтвердження діють лише в межах сесії: якщо вийдете з CLI, наступна сесія знову почнеться з режиму запитів. Для правил, які ви хочете зберегти, файл налаштувань містить постійні списки дозволених (allow), запитуваних (ask) та заборонених (deny) дій. Наприклад: allow git status, ask на git push, deny читання .env. Правила deny завжди мають пріоритет.

Такий дизайн передбачає, що термінал спостерігає людина, і на ноутбуці це правда. На сервері ж часто буває так, що ніхто не спостерігає. Ви запускаєте тривале завдання всередині tmux і лягаєте спати, а агент, який зупиняється, щоб поставити запитання о 2-й годині ночі, не просунеться вперед до ранку. Пауза коштує як часу, так і грошей, оскільки порожня сесія Claude Code втрачає теплий кеш промптів і наступний крок потребуватиме витрат на його відновлення. Це справжня причина, чому люди використовують прапор пропуску (skip flag) на серверах, і ця проблема є реальною. Решта цього посібника присвячена тому, як вирішити її, не відмовляючись від усіх засобів захисту.

Що змінює --dangerously-skip-permissions

claude --dangerously-skip-permissions вимикає етап підтвердження. Редагування відбуваються без запитів. Shell-команди виконуються без запитів. Перевірки захищених шляхів (protected-path checks), які зазвичай охороняють чутливі локації, також пропускаються. Ваші явні правила deny все ще діють, і деякі критичні дії все одно зупиняться для запиту, але загальний підсумок такий: все, що модель вирішить запустити, буде запущено.

На сервері важливі два факти про цей прапор. По-перше, він заблокований, якщо Claude Code запущено від імені root або через sudo на Linux та macOS, оскільки root без запитів може змінити будь-який файл або службу на машині. Агенту все одно потрібен власний непривілейований обліковий запис, і цей прапор це забезпечує. По-друге, прапор ніяк не змінює поведінку моделі. Він лише прибирає людину з циклу керування, але не змінює нічого іншого, тому кожна помилка, яку міг би виявити запит підтвердження, тепер буде виконана.

Ось чесний розрахунок. Якщо ви пропускаєте підтвердження, питання безпеки змінюється з «чи зробить агент щось погане» на «яку шкоду може завдати одна помилкова дія». Ви перестаєте намагатися контролювати кожне рішення і починаєте контролювати радіус ураження (blast radius). Контейнмент (локалізація) — це відповідь, і він реалізується поетапно.

Вбудована пісочниця Claude Code

Перш ніж переходити до етапів, знайте, що Claude Code тепер постачається з OS-level пісочницею для команд, які він виконує, що усуває більшість причин використання прапора skip. На Linux вона використовує bubblewrap для ізоляції файлової системи, а також socat для маршрутизації мережевого трафіку через проксі. Всередині пісочниці команда може писати лише в директорію проєкту та тимчасову директорію сесії, а доступ до мережі можливий лише через проксі, який перевіряє кожен домен за списком дозволених. Коли команда вперше хоче отримати доступ до нового домену, Claude Code запитає вас.

Увімкніть її командою /sandbox всередині сесії. На Ubuntu та Debian спочатку встановіть два необхідні пакети:

sudo apt install bubblewrap socat

На Ubuntu 24.04 та новіших версіях стандартна політика AppArmor заважає bubblewrap створювати необхідні user namespaces. Панель пісочниці повідомить вам про відсутність компонентів, а в документації Claude Code щодо пісочниці є короткий AppArmor profile, який це виправляє.

Пісочниця має режим авто-дозволу (auto-allow): команди в пісочниці виконуються без запитів, оскільки встановлена межа тепер виконує ту роботу, яку раніше виконував запит. Команди, які не можуть працювати в пісочниці, перемикаються на звичайний цикл дозволів, тому дійсно нетипові дії все одно потребуватимуть підтвердження. Для більшості серверних робочих процесів це правильна заміна прапора skip, оскільки ви отримуєте набагато менше запитань завдяки межі на рівні ОС замість їх повної відсутності.

Будьте чесними щодо її обмежень. За замовчуванням команда в пісочниці все ще може читати більшу частину файлової системи, включаючи файли облікових даних, якщо ви не забороните ці шляхи; налаштування sandbox.credentials створене саме для цього. Мережевий проксі перевіряє доменні імена, але не інспектує сам трафік, тому широкий дозвіл, як-от github.com, все одно залишає можливість для виведення даних. Docker не працює всередині неї. Пісочниця значно підвищує рівень безпеки. Це не повна ізоляція, тому наступні етапи все ще важливі.

Сходи локалізації

Три етапи у порядку зростання ізоляції. Оберіть найнижчий етап, який відповідає іншим службам на вашому пристрої.

Етап 1: виділений непривілейований користувач. Агент отримує власний обліковий запис, власну домашню директорію, власну директорію проєкту та не має прав sudo:

sudo adduser --disabled-password --gecos "" agent

Межа облікового запису захищає ваші файли від агента: ваші SSH-ключі та всі інші проєкти на машині. Це також робить використання прапора skip можливим, оскільки прапор забороняє запуск від root. Це той самий принцип, що й запуск кожної служби від імені непривілейованого користувача, застосований до агента. Що не обмежує перший етап: мережа та все, що на машині доступно для читання всім користувачам.

Етап 2: контейнер. Anthropic публікує референсний devcontainer, який запускає Claude Code як не-root користувача з правилами firewall, що обмежують доступ агента до хостів; ви можете створити власний контейнер з аналогічними налаштуваннями. Файлова система звужується до монтованих томів (volumes), а вихідний трафік — до того, що дозволяють правила контейнера. Це правильний середній етап, якщо сервер хостить інші важливі для вас сервіси. Його обмеження полягає в тому, що контейнери використовують ядро хоста, і один помилковий монтаж скасовує ізоляцію; надайте контейнеру /var/run/docker.sock, і він зможе отримати доступ до всього хоста.

Етап 3: виділений VPS. Найсильніший етап — найпростіший: надайте агенту цілу машину, на якій немає нічого важливого для вас. Невеликий VPS коштує кілька доларів на місяць. Налаштуйте його за допомогою руководства: перші десять хвилин на новому VPS, зробіть snapshot чистого стану і дозвольте агенту працювати. Більше нічого там не живе. Жодних особистих SSH-ключів, лише deploy key з доступом до одного репозиторію. Жодних хмарних облікових даних, жодних продуктивних даних. Якщо виконання піде не так або якщо вам просто потрібен чистий стан, відновіть snapshot або видаліть і перестворіть машину за лічені хвилини. Радіус ураження — це вартість оренди. Це налаштування, де --dangerously-skip-permissions перестає бути лякаючим, оскільки найгіршим реальним наслідком буде перестворена машина та один анульований токен.

Етапи накопичуються. Агент у пісочниці, що працює від імені непривілейованого користувача на тимчасовому VPS, коштує майже стільки ж, але робить історії про помилки не такими критичними. Відсутність критичних наслідків — це мета.

Захистіть облікові дані

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

Надайте API-ключ тільки агенту і нікому іншому. Покладіть його у файл, що належить користувачу агента, з правами 600, і завантажуйте його під час запуску shell:

install -m 600 /dev/null /home/agent/claude.env
echo 'export ANTHROPIC_API_KEY=your-key-here' >> /home/agent/claude.env
echo 'source ~/claude.env' >> /home/agent/.bashrc

Потім закрийте інший напрямок. На Debian та Ubuntu домашні директорії часто створюються доступними для читання всім користувачам на машині, тому посильте власну: chmod 750 /home/youruser. Перевірте за допомогою ls -ld /home/* і виправте все, що може переглядати обліковий запис агента.

Обмежуйте кожен токен. Токен GitHub з тонкими налаштуваннями (fine-grained), обмежений одним репозиторієм, або deploy key для одного репозиторію означає, що витік облікових даних призведе до втрати одного проєкту, а не всього вашого облікового запису. Якщо ви використовуєте пісочницю, додайте її налаштування облікових даних, щоб ~/.ssh та ~/.aws були заборонені навіть для читання. І тримайте продуктивні облікові дані взагалі поза межами машини, оскільки агент не зможе викрасти секрет, якого там ніколи не було.

Git — це страховка

Кожна зміна, яку робить агент, має бути доступною для перегляду та відкату, і git забезпечує це безкоштовно, якщо агент працює у гілці (branch):

git switch -c agent/refactor-auth

Перегляньте результат роботи після завершення за допомогою git diff main...agent/refactor-auth, злийте (merge) вдалі зміни та видаліть гілку, якщо робота не принесла результату. Захистіть основну гілку (main branch) на стороні сервісу (forge), щоб токен агента не міг робити в неї push і не міг робити force-push будь-де. Історія комітів слугує журналом аудиту того, що відбувалося, поки ви спали, що цінніше за будь-який лог термінала.

Мережа — це частина радіуса ураження

Агент може виконати curl. Це речення описує всю проблему вихідного трафіку: все, що агент може прочитати, він також може кудись відправити, і агент, підданий prompt injection, може це зробити. Звичайний непривілейований користувач ніяк це не обмежує, оскільки будь-який користувач може дістатися всього, до чого має доступ сервер. Пісочниця обмежує це за доменами через свій проксі. Контейнер може обмежити це власними правилами firewall. Виділений VPS обмежує те, що взагалі можна викрасти, що є найбільш надійним рішенням з трьох.

Не намагайтеся вирішити проблему вихідного трафіку лише за допомогою ufw. ufw за замовчуванням дозволяє весь вихідний трафік, а написання правил, які дозволяють apt, npm, git та Claude API, — це складна робота, яка може непомітно зламатися. Замість цього оберіть межу на рівні пісочниці, контейнера або машини, де список дозволених доменів або чиста машина виконують ту саму роботу надійно.

Якщо ви створюєте власного агента через API, а не запускаєте Claude Code, ті ж самі принципи залишаються незмінними. Створення AI-агента з Claude на VPS описує цей шлях, і такий агент заслуговує на того ж самого виділеного користувача, ті ж обмежені токени та ту саму тимчасову машину.

Спочатку захистіть машину

Який би етап ви не обрали, сама машина все одно потребує базових налаштувань перед тим, як агент почне роботу: тільки SSH-ключі, заборона входу під root, firewall за принципом default-deny, автоматичні оновлення безпеки. Складіть свій чек-лист тут і виконайте його один раз:

ToolHarden the box before the agent moves in

FAQ

Чи безпечно використовувати --dangerously-skip-permissions на сервері?

Не сам по собі. Цей прапор видаляє всі запити на підтвердження, тому перша помилкова команда буде виконана в момент її створення моделлю. Це стає прийнятним компромісом, коли радіус ураження обмежений: як мінімум, виділений непривілейований користувач, а для повністю автономної роботи — контейнер або тимчасовий VPS, на якому є лише один проєкт і один обмежений токен. Ніколи не використовуйте його на машині, де зберігаються продуктивні облікові дані або дані, які ви не можете втратити.

Чи має Claude Code пісочницю?

Так. Claude Code постачається з вбудованою пісочницею для shell-команд, яка вмикається командою /sandbox. Вона використовує bubblewrap на Linux та Seatbelt на macOS, обмежує запис у директорію проєкту та маршрутизує мережевий доступ через проксі, який дозволяє лише схвалені домени. Її режим auto-allow виконує команди в пісочниці без запитів, що зменшує кількість переривань так само, як прапор skip, але зберігає межу на рівні ОС. Це не повна ізоляція, тому поєднуйте її з виділеним користувачем або виділеною машиною для автономної роботи.

Чому прапор skip відмовляється працювати під root?

Оскільки root без запитів на підтвердження може змінити будь-який файл і будь-яку службу в системі, Claude Code блокує --dangerously-skip-permissions, якщо він запущений під root або через sudo на Linux та macOS. Рішенням є не боротьба з цією перевіркою, а створення окремого непривілейованого користувача для агента та запуск його там; межа облікового запису — це перший і найдешевший рівень локалізації.

Чи може Claude Code читати мої SSH-ключі та файли .env?

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

Який найбезпечніший спосіб автономного запуску Claude Code?

Дешевий виділений VPS, що використовується тільки для роботи агента: захищений за 10 хвилин, з чистим snapshot, Claude Code під непривілейованим користувачем із увімкненою пісочницею, файл з API-ключем з правами 600, deploy key для одного репозиторію та вся робота у гілках, які ви перевіряєте перед злиттям. Якщо виконання піде не так, ви анулюєте один токен і відновлюєте snapshot, і ніщо інше, що ви маєте, не постраждає.