mcp-shell-sudo
mcp-shell-sudo
MCP-сервер для Linux, написанный на Python, который выполняет локальные команды через argv, поддерживает неинтерактивный sudo через PASSWORD_SUDO, предоставляет опциональный список разрешённых команд через ALLOW_COMMANDS и может ограничивать запись в файловую систему с помощью WORK_DIR и Bubblewrap.
Требования
Linux.
Python 3.11+.
Рекомендуется
uv.MCP Python SDK 2.0.0.
sudo, если будут выполняться команды с повышенными привилегиями.bubblewrap, если настроенWORK_DIR.
В Debian/Ubuntu:
sudo apt update
sudo apt install -y bubblewrapRelated MCP server: MCP Process Server
Переменные окружения
PASSWORD_SUDO
Пароль пользователя, запускающего MCP-сервер.
Пусто или не задано: сервер никогда не изобретает и не запрашивает пароль интерактивно. Команды с префиксом
sudoвыполняются с использованиемsudo -nи будут работать только при наличии действительного кэшированного удостоверения или правилаNOPASSWD.Задано:
sudoвыполняется с-S, и пароль передаётся через stdin, никогда через argv или журналы.
Пример:
"PASSWORD_SUDO": "my-password"Поддерживаемая форма:
["sudo", "id"]Пользовательские флаги sudo, такие как sudo -u postgres ..., не принимаются. Это предотвращает необходимость интерпретации полной грамматики команды sudo на уровне политики.
WORK_DIR
Необязательная рабочая директория.
Пусто или не задано: MCP-сервер может работать из любой существующей директории, указанной в вызове инструмента.
Задано: сервер переходит в строгий режим.
directoryдолжен разрешаться внутриWORK_DIR, и каждый процесс запускается в пространстве имён монтирования Bubblewrap, где/доступен только для чтения,WORK_DIRсмонтирован для чтения и записи, а/tmpи/runявляются временными.
Использование только cwd не было бы достаточным для гарантии такой изоляции. Процесс всё ещё мог бы записывать в /etc, /home/... или следовать по символическим ссылкам за пределы проекта. По этой причине сервер завершается с ошибкой при запуске, если WORK_DIR настроен, но bwrap недоступен.
В этом режиме sudo отклоняется, поскольку повышение привилегий на уровне хоста было бы несовместимо с гарантией того, что записи в файловую систему остаются ограниченными рабочим пространством.
ALLOW_COMMANDS
Список имён исполняемых файлов, разделённых запятыми.
"ALLOW_COMMANDS": "git,ls,cat,grep,python,node,pnpm"Пусто или не задано: разрешены все исполняемые файлы.
Задано: разрешены только точные имена исполняемых файлов из списка, и они должны вызываться по имени, а не через пути, такие как
/usr/bin/git.Если команда начинается с
sudo, проверяется фактический исполняемый файл, следующий заsudo.
Список разрешённых применяется к исполняемым файлам, а не к аргументам. Разрешение bash, python, node, env или другого инструмента, способного выполнять процессы, значительно расширяет возможности MCP-клиента.
Установка
uv syncДля разработки:
uv sync --extra devРучной запуск
uv run mcp-shell-sudoТранспорт — stdio. Журналирование никогда не записывается в stdout, чтобы не повредить JSON-RPC сообщения; журналы записываются в stderr.
Конфигурация MCP
Пример с неограниченными командами и включённым sudo:
{
"mcpServers": {
"shell": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/mcp-shell-sudo",
"run",
"mcp-shell-sudo"
],
"env": {
"PASSWORD_SUDO": "YOUR_PASSWORD",
"WORK_DIR": "",
"ALLOW_COMMANDS": ""
}
}
}
}Пример, ограниченный конкретным проектом:
{
"mcpServers": {
"shell-project": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/mcp-shell-sudo",
"run",
"mcp-shell-sudo"
],
"env": {
"PASSWORD_SUDO": "",
"WORK_DIR": "/home/user/projects/app",
"ALLOW_COMMANDS": "git,ls,cat,grep,find,python,node,pnpm"
}
}
}
}Инструмент shell_execute
Базовый ввод:
{
"command": ["ls", "-la"]
}С рабочей директорией:
{
"command": ["git", "status"],
"directory": "backend"
}Со stdin:
{
"command": ["cat"],
"stdin": "hello\n"
}С sudo:
{
"command": ["sudo", "id"]
}Ответ:
{
"stdout": "uid=0(root) gid=0(root) groups=0(root)\n",
"stderr": "",
"status": 0,
"execution_time": 0.031,
"timed_out": false,
"output_limited": false
}Инструмент shell_config
Возвращает действующую несекретную конфигурацию.
Он никогда не возвращает PASSWORD_SUDO; он только указывает, был ли настроен пароль sudo.
Реализованные меры безопасности
Использует
create_subprocess_exec; не используетshell=True.commandпередаётся как явный массив argv.Пароль sudo никогда не появляется в argv, ответах, журналах или окружении дочернего процесса.
Если
PASSWORD_SUDOне настроен,sudo -nпредотвращает зависание процесса в ожидании интерактивного запроса пароля.ALLOW_COMMANDSпроверяет фактический исполняемый файл после простого вызоваsudo.Использует фиксированный и сокращённый
PATH, чтобы избежать поиска исполняемых файлов из.или произвольных унаследованных путей.Использует сокращённое окружение дочернего процесса вместо наследования всего окружения MCP-сервера.
Тайм-аут на вызов: 60 секунд по умолчанию, максимум 600 секунд.
Лимит вывода: 2 МиБ на поток. При превышении лимита вся группа процессов завершается.
Процессы запускаются в новой сессии, и вся группа процессов завершается по тайм-ауту.
WORK_DIRиспользует Bubblewrap и завершается с ошибкой, если изоляция не может быть обеспечена.
Важные ограничения
ALLOW_COMMANDS=""означает произвольное выполнение команд с правами пользователя, запускающего MCP-сервер. Если также настроенPASSWORD_SUDO, MCP-клиент может запрашивать действия от имени root. Используйте эту конфигурацию только с клиентом и моделью, которыми вы управляете.Список разрешённых исполняемых файлов не проверяет семантически аргументы команд.
python,node,bash,sh,perlи подобные инструменты фактически эквивалентны разрешению произвольного выполнения кода.WORK_DIRограничивает записываемые расположения файловой системы, но не предназначен для работы как виртуальная машина или сетевой песочница. Команда с доступом к сети может по-прежнему изменять удалённые ресурсы, для которых у неё есть действительные учётные данные.PASSWORD_SUDO, хранящийся в конфигурации MCP-клиента, остаётся секретом, хранящимся в этом файле. Ограничьте права доступа к файлу с помощьюchmod 600и никогда не сохраняйте его в системе контроля версий.
Тесты
uv run --extra dev pytest
uv run --extra dev ruff check .Maintenance
Tools
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to securely execute shell commands on local machines through an SSH interface with session management, command execution, and sudo support.1
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to launch and manage system processes with strict security controls through executable allowlists, resource monitoring, and output capture capabilities.761MIT
- AlicenseNot gradedqualityCmaintenanceEnables secure execution of shell commands through a dynamic approval system that prompts for user authorization on first use, with persistent command storage and comprehensive audit logging.Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables AI models to safely execute pre-defined Linux shell commands with a whitelist mechanism, restricting execution to allowed commands only.1
Related MCP Connectors
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi
Runtime permission, approval, and audit layer for AI agent tool execution.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/eaangrino/mcp-shell-sudo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server