Безопасный запуск Claude Code на сервере
Узнайте, как безопасно использовать Claude Code. Разбираем работу флага --skip-permissions, риски выполнения команд и методы изоляции через контейнеры или одноразовые VPS.
Что означает безопасный запуск Claude Code на сервере
Для безопасного запуска Claude Code на сервере не отключайте запросы на подтверждение действий, запускайте его от имени отдельного непривилегированного пользователя и ограничивайте автоматизированные сессии реальными барьерами вместо доверия: используйте встроенную песочницу, контейнер или одноразовый VPS, на котором нет критически важных данных. Флаг --dangerously-skip-permissions отключает этап подтверждения между моделью и вашей оболочкой. Этот компромисс может быть оправдан при выполнении фоновых задач, но только внутри изолированной среды, ограничивающей область действия потенциально опасной команды. В этом руководстве объясняется, что именно меняет данный флаг и как выстроить такую защиту с помощью уровней изоляции.
Что 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 на одном сервере могут отправлять текст друг другу, и сообщение от соседней сессии — это просто очередной текст, который считывает принимающий агент. Планируйте свои действия исходя из сценария сбоя, а не из сценария штатной работы.
Система разрешений простыми словами
По умолчанию Claude Code запрашивает подтверждение перед выполнением действий. Чтение файлов внутри проекта происходит без уведомлений, но перед редактированием файла или запуском команды оболочки инструмент показывает точный текст изменений или команду и ожидает ответа «да». Вы можете одобрить одно действие или разрешить выполнение подобных действий до конца сессии. Эти одобрения действуют только в рамках текущей сессии: после выхода из CLI следующая сессия снова начинается в осторожном режиме. Для правил, которые должны сохраняться постоянно, в файле настроек предусмотрены списки разрешений (allow), запросов (ask) и запретов (deny). Например: разрешить git status, запрашивать подтверждение для git push, запретить чтение .env. Правила запрета всегда имеют приоритет. Эта базовая конфигурация меняется, так как с 14 августа 2026 года автоматический режим становится стандартным, поэтому стоит изучить что именно разрешает каждый режим доступа, прежде чем выбирать настройки для сервера, за которым вы не можете наблюдать.
Такая архитектура предполагает, что человек следит за терминалом, что справедливо для ноутбука. На сервере же часто подразумевается, что за ним никто не наблюдает. Вы запускаете длительную задачу внутри tmux и уходите спать, а агент, который останавливается для вопроса в 2 часа ночи, не продвигается в работе до утра. Эта пауза стоит денег и времени, так как неактивная сессия Claude Code теряет прогретый кэш промптов, и следующий запрос требует оплаты за его повторное создание. Это реальная причина, по которой пользователи применяют флаг пропуска (skip) на серверах, и проблема, которую он решает, существует на самом деле. Остальная часть этого руководства посвящена тому, как решить эту задачу, не отказываясь от всех механизмов защиты.
Что меняет флаг --dangerously-skip-permissions
claude --dangerously-skip-permissions отключает этап подтверждения действий. Редактирование файлов происходит без запроса. Команды оболочки выполняются без подтверждения. Проверки защищенных путей, которые обычно оберегают критически важные системные области, также пропускаются. Ваши явные правила запрета (deny rules) продолжают действовать, и некоторые критические операции всё еще требуют подтверждения, но общий принцип прост: всё, что решит выполнить модель, будет выполнено.
При работе на сервере важны два факта об этом флаге. Во-первых, он блокируется, если Claude Code запущен от имени root или через sudo в Linux и macOS, так как root без запросов подтверждения может изменить любой файл или сервис в системе. Агенту в любом случае требуется собственная непривилегированная учетная запись, и этот флаг принудительно это обеспечивает. Во-вторых, флаг никак не меняет поведение модели. Он просто исключает человека из цикла согласования, поэтому любая ошибка, которую можно было бы заметить при ручном подтверждении, теперь будет исполнена.
Таким образом, расчет рисков выглядит следующим образом. Если вы пропускаете проверку разрешений, вопрос безопасности меняется с «сделает ли агент что-то плохое» на «какой ущерб может нанести одно ошибочное действие». Вы перестаете пытаться контролировать каждое решение и начинаете ограничивать радиус поражения. Решением является изоляция, которая реализуется поэтапно.
Встроенная песочница Claude Code
Перед переходом к уровням защиты учтите, что Claude Code теперь поставляется со встроенной песочницей уровня ОС для выполняемых команд, что устраняет большинство причин, по которым пользователи прибегали к флагу пропуска. В Linux она использует bubblewrap для изоляции файловой системы, а также socat для маршрутизации сетевого трафика через прокси. Внутри песочницы команда может записывать данные только в директорию проекта и временную директорию сессии, а доступ к сети возможен только через прокси, который проверяет каждый домен по списку разрешённых. При первой попытке команды обратиться к новому домену Claude Code запрашивает ваше подтверждение.
Включите её с помощью команды /sandbox внутри сессии. В Ubuntu и Debian сначала установите два необходимых пакета:
sudo apt install bubblewrap socatВ Ubuntu 24.04 и более поздних версиях политика AppArmor по умолчанию блокирует создание пространств имён пользователей, необходимых для bubblewrap. Панель песочницы сообщит вам, если чего-то не хватает, а в документации по песочнице Claude Code приведён краткий профиль AppArmor, который решает эту проблему.
В песочнице есть режим автоматического разрешения: команды в песочнице выполняются без запросов, так как принудительное ограничение теперь выполняет ту работу, которую раньше делал запрос. Команды, которые не могут быть выполнены внутри песочницы, возвращаются к обычному процессу подтверждения разрешений, поэтому для действительно необычных действий запрос всё равно появится. Для большинства серверных рабочих процессов это правильная замена флагу пропуска, так как вы получаете гораздо меньше вопросов при использовании принудительного ограничения на уровне ОС, вместо полного отсутствия контроля.
Будьте реалистичны в отношении её ограничений. По умолчанию команда в песочнице всё ещё может читать большую часть файловой системы, включая файлы с учётными данными, если вы не запретите доступ к этим путям; настройка sandbox.credentials существует именно для этого. Сетевой прокси проверяет доменные имена, но не инспектирует сам трафик, поэтому широкое разрешение, такое как github.com, всё ещё оставляет возможность для передачи данных наружу. Docker внутри неё не работает. Песочница значительно повышает уровень безопасности. Она не является границей полной изоляции, поэтому уровни защиты, описанные ниже, по-прежнему важны.
Лестница изоляции
Три ступени, расположенные в порядке возрастания уровня изоляции. Выберите минимально достаточный уровень, исходя из того, какие еще задачи выполняет сервер.
Ступень 1: выделенный непривилегированный пользователь. Агент получает собственную учетную запись, домашний каталог, рабочую директорию проекта и отсутствие прав sudo:
sudo adduser --disabled-password --gecos "" agentГраница учетной записи защищает ваши файлы от агента: ваши SSH-ключи и все остальные проекты на машине остаются в безопасности. Это также делает возможным использование флага skip, так как он запрещает запуск от имени root. Это тот же принцип, что и запуск каждого сервиса от имени непривилегированного пользователя, примененный к агенту. Что не ограничивает ступень 1: сеть и любые файлы на сервере, доступные для чтения всем пользователям.
Ступень 2: контейнер. Anthropic публикует эталонный devcontainer, в котором Claude Code запускается от имени пользователя без прав root, с правилами firewall, ограничивающими доступ агента к хостам. Контейнер, который вы собираете самостоятельно, выполняет ту же задачу. Файловая система сокращается до подключенных томов, а исходящий трафик — до разрешенного правилами контейнера. Это оптимальная средняя ступень, если на сервере работают другие важные для вас сервисы. Ограничение заключается в том, что контейнеры используют общее ядро хоста, и одно неосторожное монтирование сводит изоляцию на нет; предоставьте контейнеру /var/run/docker.sock, и он получит доступ ко всему хосту.
Ступень 3: выделенный VPS. Самая надежная и простая ступень: предоставьте агенту целую машину, на которой нет ничего ценного. Небольшой VPS стоит несколько долларов в месяц. Настройте его согласно руководству по первичной настройке нового VPS, сделайте снимок (snapshot) чистого состояния и позвольте агенту работать. Там больше ничего нет. Никаких личных SSH-ключей, только deploy key с доступом к одному репозиторию. Никаких облачных учетных данных, никаких производственных данных. Если что-то пошло не так или вы просто хотите начать с чистого листа, восстановите снимок или удалите и пересоздайте сервер за несколько минут. Радиус поражения ограничен стоимостью аренды. В такой конфигурации --dangerously-skip-permissions перестает пугать, так как худший реалистичный сценарий — это переустановка сервера и отзыв одного токена.
Ступени можно комбинировать. Изолированный агент, работающий от имени непривилегированного пользователя на одноразовом VPS, практически не требует дополнительных затрат и делает истории об ошибках скучными. Скука — это и есть цель.
Защита учетных данных
Правило, которое обеспечивает безопасность всего остального: пользователь агента не должен иметь возможность читать секреты, принадлежащие другим объектам.
Предоставьте API-ключ только агенту и никому больше. Поместите его в файл, владельцем которого является пользователь агента, установите права доступа 600 и загружайте его при запуске оболочки:
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 token), ограниченный одним репозиторием, или ключ развертывания (deploy key) для конкретного репозитория означают, что в случае утечки пострадает только один проект, а не вся ваша учетная запись. Если вы используете песочницу (sandbox), добавьте настройки учетных данных так, чтобы ~/.ssh и ~/.aws были запрещены даже для операций чтения. И вообще не храните производственные учетные данные на этом сервере, так как агент не может допустить утечку секрета, которого там никогда не было. Если эти секреты хранятся в самостоятельно развернутом менеджере паролей, разместите его на другом сервере, отличном от сервера агента, и уделите ему отдельное внимание, поскольку слабыми местами Vaultwarden являются токен администратора и файл резервной копии, а не само зашифрованное хранилище.
Git как страховочный механизм
Любое изменение, вносимое агентом, должно быть доступно для проверки и отката. Git предоставляет обе эти возможности бесплатно, если агент работает в отдельной ветке:
git switch -c agent/refactor-authПроверяйте результат выполнения с помощью git diff main...agent/refactor-auth, объединяйте (merge) удачные изменения и удаляйте ветку, если работа не принесла результата. Изменения, затронувшие три файла, гораздо проще просмотреть за завтраком, чем результат переписывания половины модуля. Это практическое обоснование для навыка ограничения агента минимально необходимыми изменениями. Защитите основную ветку на стороне Git-сервера: токен агента не должен иметь прав на push в неё или на принудительную отправку (force-push) куда-либо. История коммитов служит аудиторским журналом всех действий, выполненных за время вашего отсутствия, что гораздо ценнее любого объема прокрутки терминала.
Сеть является частью радиуса поражения
Агент может выполнять curl. Это предложение полностью описывает проблему исходящего трафика: всё, что агент может прочитать, он может куда-либо отправить, и агент, подвергшийся prompt injection, может это сделать. Обычный непривилегированный пользователь никак не ограничивает этот процесс, так как любой пользователь может получить доступ ко всему, к чему имеет доступ сервер. Песочница ограничивает это по доменам через свой прокси-сервер. Контейнер может ограничить это собственными правилами межсетевого экрана. Выделенный VPS ограничивает то, что вообще может быть скомпрометировано, и это наиболее надежное решение из трех.
Не пытайтесь решить проблему исходящего трафика только с помощью ufw. По умолчанию ufw разрешает весь исходящий трафик, а создание правил для исходящих соединений, которые при этом разрешают работу apt, npm, git и Claude API, — это кропотливая работа, которая при сбоях не выдает явных ошибок. Вместо этого выбирайте границу на уровне песочницы, контейнера или машины, где список разрешенных доменов или «чистая» машина выполняют ту же задачу более аккуратно.
Если вы создаете собственного агента для работы с API, а не используете Claude Code, эти же принципы остаются в силе. В Создание ИИ-агента с использованием Claude на VPS рассматривается этот путь, и такой агент заслуживает того же выделенного пользователя, тех же ограниченных токенов и того же одноразового окружения.
Первоначальная настройка безопасности сервера
Независимо от выбранного уровня, перед установкой агента необходимо обеспечить базовую защиту системы: использование только SSH-ключей, запрет входа для root, настройка межсетевого экрана с политикой default-deny и автоматическая установка обновлений безопасности. Составьте контрольный список и последовательно выполните все пункты:
FAQ
Безопасно ли использовать --dangerously-skip-permissions на сервере?
Сама по себе — нет. Этот флаг отключает все запросы на подтверждение, поэтому любая ошибочная команда будет выполнена сразу после того, как модель её сгенерирует. Использование флага становится оправданным, если область поражения ограничена: как минимум, следует использовать отдельного непривилегированного пользователя, а для полностью автоматизированной работы — контейнер или временный VPS, содержащий только один проект и ограниченный токен. Никогда не используйте этот флаг на машине, где хранятся рабочие учетные данные или важные данные, которые нельзя потерять.
Есть ли у Claude Code песочница?
Да. Claude Code поставляется со встроенной песочницей для выполнения команд оболочки, которая открывается командой /sandbox. Она использует bubblewrap в Linux и Seatbelt в macOS, ограничивает запись в директорию проекта и направляет сетевой трафик через прокси, разрешающий доступ только к одобренным доменам. Режим автоматического подтверждения (auto-allow) выполняет команды в песочнице без дополнительных запросов, что позволяет избежать прерываний так же, как и при использовании флага пропуска, но при этом сохраняет границы, установленные операционной системой. Это не является полной изоляцией, поэтому для автоматизированных запусков используйте отдельного пользователя или выделенную машину.
Почему флаг пропуска запрещает запуск от имени root?
Поскольку root без запросов на подтверждение может изменить любой файл и любой сервис в системе, Claude Code блокирует --dangerously-skip-permissions при запуске от имени root или через sudo в Linux и macOS. Не пытайтесь обойти эту проверку. Создайте непривилегированного пользователя для агента и запускайте его от этого имени; границы учетной записи — это первый и самый доступный уровень защиты.
Может ли Claude Code читать мои SSH-ключи и файлы .env?
Агент может читать всё, к чему имеет доступ пользователь, от имени которого он запущен. Даже политика песочницы по умолчанию разрешает чтение путей с учетными данными, пока вы их не запретите. Поэтому запускайте агента от имени отдельного пользователя, установите права доступа к своей домашней директории не выше 750, запретите пути к учетным данным в настройках песочницы и вообще не храните рабочие секреты на этой машине. Секрет, который никогда не попадал в песочницу, невозможно прочитать или скомпрометировать.
Какой самый безопасный способ запускать Claude Code без присмотра?
Использовать недорогой выделенный VPS, предназначенный только для работы агента: настроить его за десять минут, сделать чистый снимок (snapshot), запустить Claude Code от имени непривилегированного пользователя с включенной песочницей, хранить API-ключ в файле с правами 600, использовать ключ развертывания (deploy key) для каждого репозитория и выполнять всю работу в ветках, которые вы проверяете перед слиянием. Если что-то пойдет не так, вы просто отзовете один токен и восстановите снимок системы, при этом остальное ваше имущество не пострадает.