Доверить сервер ИИ-агенту: linux-mcp-daemon вместо SSH с sudo
Опубликовано: 2026-09-26 · Автор: AI Release · @ai_release1
⚡ Главное за 5 секунд - Суть: автор создал linux-mcp-daemon (mcpd) и клиент linuxctl — связку, которая позволяет ИИ-агенту управлять Linux-сервером через MCP без SSH и sudo. - Доступно: демон написан на Go и собирается в один статический бинарник; в статье описан запуск за пару минут и подключение к агенту. - Ограничение: root выдаётся только на конкретные инструменты и с явными границами; без paths в mcp-sudo.yaml конфиг не загрузится. ### 🔍 Что обнаружено Автор разбирает существующие MCP-решения для управления Linux и выделяет три типа: удалённый shell под соусом MCP (ssh-mcp и форки), инструменты только для чтения вроде linux-mcp-server от Red Hat и прямой SSH. Первый тип даёт лишь иллюзию контроля: белый список проверяет только первое слово, а команда уходит в sh -c, поэтому ls; rm -rf ~ проходит. Продвинутый форк t11z классифицирует команды, спрашивает подтверждение и ведёт аудит, но в основе всё равно разбор текста. Вариант Red Hat безопасен, но работает только на чтение. Поэтому автор сделал собственный инструмент: демон mcpd и клиент linuxctl. mcpd работает по MCP поверх JSON-RPC, живёт на сервере, а агент ходит к нему по HTTPS. У демона 38 tools и 11 постоянных resources плюс 6 шаблонов. Большинство данных читается напрямую из /proc, /sys и systemd по D-Bus, а не парсингом вывода ps, df или systemctl. Внешние программы — smartctl, traceroute, journalctl, dmesg, last, find — запускаются без shell, отдельными аргументами. Каждый вызов выполняется отдельным процессом-воркером от имени Linux-пользователя, соответствующего пользователю mcpd. TLS включён по умолчанию. Автор также отмечает уязвимость stdio-транспорта, показанную OX Security в апреле: клиент выполняет команду из конфига для запуска сервера, и подмена конфига может запустить чужой код. В mcpd этого нет: клиент ничего у себя не запускает, официальные SDK не используются. ### 💡 Почему это важно Идея в том, чтобы дать агенту не shell, а набор понятных инструментов с JSON-схемами аргументов. Агент сам решает, что вызвать, а права root выдаются точечно. В mcp-sudo.yaml для пользователя можно разрешить files/read как root только в /var/log: без paths конфиг не загружается. Для network/curl есть deny_private: true — агент не сможет ходить в localhost, 10/8 или 169.254.169.254. Это сокращает время разбора инцидентов: агент быстро собирает нагрузку, память, диски, процессы и журналы, сводит их с мониторингом и может сам перезапустить сервис или изменить конфиг — но только в разрешённых рамках. ### 🧩 Контекст Автор — практик, который при инцидентах всё чаще использует ИИ-агента для сбора данных с сервера. Давать такому агенту SSH с sudo он считает небезопасным, поэтому захотел управлять операционной системой как деревом объектов — процессы, диски, сервисы, файлы — командами в духе Kubernetes get и describe. Так появились linuxctl и linux-mcp-daemon. Заголовок статьи обещает: доверить сервер агенту и не пожалеть.
⚡ Главное за 5 секунд - Суть: автор создал linux-mcp-daemon (mcpd) и клиент linuxctl — связку, которая позволяет ИИ-агенту управлять Linux-сервером через MCP без SSH и sudo.
- Доступно: демон написан на Go и собирается в один статический бинарник; в статье описан запуск за пару минут и подключение к агенту.
- Ограничение: root выдаётся только на конкретные инструменты и с явными границами; без paths в mcp-sudo.yaml конфиг не загрузится.
🔍 Что обнаружено Автор разбирает существующие MCP-решения для управления Linux и выделяет три типа: удалённый shell под соусом MCP (ssh-mcp и форки), инструменты только для чтения вроде linux-mcp-server от Red Hat и прямой SSH.
Первый тип даёт лишь иллюзию контроля: белый список проверяет только первое слово, а команда уходит в sh -c, поэтому ls; rm -rf ~ проходит.
Продвинутый форк t11z классифицирует команды, спрашивает подтверждение и ведёт аудит, но в основе всё равно разбор текста.
Вариант Red Hat безопасен, но работает только на чтение.
Поэтому автор сделал собственный инструмент: демон mcpd и клиент linuxctl.