mcp-shell-sudo
mcp-shell-sudo
Servidor MCP para Linux escrito en Python que ejecuta comandos locales usando argv, soporta sudo no interactivo mediante PASSWORD_SUDO, proporciona una lista de comandos permitidos opcional mediante ALLOW_COMMANDS, y puede confinar las escrituras del sistema de archivos a WORK_DIR usando Bubblewrap.
Requisitos
Linux.
Python 3.11+.
uvrecomendado.MCP Python SDK 2.0.0.
sudosi se ejecutarán comandos elevados.bubblewrapsiWORK_DIRestá configurado.
En Debian/Ubuntu:
sudo apt update
sudo apt install -y bubblewrapRelated MCP server: MCP Process Server
Variables de Entorno
PASSWORD_SUDO
Contraseña del usuario que ejecuta el servidor MCP.
Vacía o sin configurar: el servidor nunca inventa ni solicita interactivamente una contraseña. Los comandos con prefijo
sudose ejecutan usandosudo -ny solo funcionarán si ya existe una credencial en caché válida o si está configurada una reglaNOPASSWD.Configurada:
sudose ejecuta con-S, y la contraseña se proporciona a través de stdin, nunca a través de argv o registros.
Ejemplo:
"PASSWORD_SUDO": "my-password"La forma admitida es:
["sudo", "id"]Las banderas personalizadas de sudo como sudo -u postgres ... no se aceptan. Esto evita que la capa de políticas tenga que interpretar la gramática completa del comando sudo.
WORK_DIR
Directorio de trabajo opcional.
Vacío o sin configurar: el servidor MCP puede trabajar desde cualquier directorio existente especificado en la llamada a la herramienta.
Configurado: el servidor entra en modo estricto.
directorydebe resolverse dentro deWORK_DIR, y cada proceso se ejecuta dentro de un espacio de nombres de montaje de Bubblewrap donde/es de solo lectura,WORK_DIRestá montado de lectura-escritura, y/tmpy/runson temporales.
Usar cwd solo no sería suficiente para garantizar este aislamiento. Un proceso aún podría escribir en /etc, /home/..., o seguir enlaces simbólicos fuera del proyecto. Por esta razón, el servidor falla al inicio si WORK_DIR está configurado pero bwrap no está disponible.
En este modo, sudo se rechaza porque la elevación de privilegios a nivel de host sería incompatible con la garantía de que las escrituras del sistema de archivos permanezcan confinadas al espacio de trabajo.
ALLOW_COMMANDS
Lista de nombres de ejecutables separados por comas.
"ALLOW_COMMANDS": "git,ls,cat,grep,python,node,pnpm"Vacío o sin configurar: todos los ejecutables están permitidos.
Configurado: solo se permiten nombres de ejecutables exactos de la lista, y deben invocarse por nombre en lugar de mediante rutas como
/usr/bin/git.Si el comando comienza con
sudo, se valida el ejecutable real que sigue asudo.
La lista de permitidos se aplica a ejecutables, no a argumentos. Permitir bash, python, node, env u otra herramienta capaz de ejecutar procesos expande significativamente lo que el cliente MCP puede hacer.
Instalación
uv syncPara desarrollo:
uv sync --extra devEjecución Manual
uv run mcp-shell-sudoEl transporte es stdio. Los registros nunca se escriben en stdout para evitar corromper los mensajes JSON-RPC; los registros se escriben en stderr.
Configuración de MCP
Ejemplo con comandos sin restricciones y sudo habilitado:
{
"mcpServers": {
"shell": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/mcp-shell-sudo",
"run",
"mcp-shell-sudo"
],
"env": {
"PASSWORD_SUDO": "YOUR_PASSWORD",
"WORK_DIR": "",
"ALLOW_COMMANDS": ""
}
}
}
}Ejemplo confinado a un proyecto específico:
{
"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"
}
}
}
}Herramienta shell_execute
Entrada básica:
{
"command": ["ls", "-la"]
}Con un directorio de trabajo:
{
"command": ["git", "status"],
"directory": "backend"
}Con stdin:
{
"command": ["cat"],
"stdin": "hello\n"
}Con sudo:
{
"command": ["sudo", "id"]
}Respuesta:
{
"stdout": "uid=0(root) gid=0(root) groups=0(root)\n",
"stderr": "",
"status": 0,
"execution_time": 0.031,
"timed_out": false,
"output_limited": false
}Herramienta shell_config
Devuelve la configuración efectiva no secreta.
Nunca devuelve PASSWORD_SUDO; solo indica si se ha configurado una contraseña de sudo.
Medidas de Seguridad Implementadas
Usa
create_subprocess_exec; no usashell=True.commandse pasa como un array argv explícito.La contraseña de sudo nunca aparece en argv, respuestas, registros ni en el entorno del proceso hijo.
Si
PASSWORD_SUDOno está configurado,sudo -nevita que el proceso se cuelgue esperando un prompt interactivo de contraseña.ALLOW_COMMANDSvalida el ejecutable real que sigue a una invocación simple desudo.Usa un
PATHfijo y reducido para evitar resolver ejecutables desde.o rutas heredadas arbitrarias.Usa un entorno hijo reducido en lugar de heredar todo el entorno del servidor MCP.
Tiempo de espera por llamada: 60 segundos por defecto, con un máximo de 600 segundos.
Límite de salida: 2 MiB por flujo. Si se supera el límite, se termina todo el grupo de procesos.
Los procesos se ejecutan en una nueva sesión y todo el grupo de procesos se termina al agotarse el tiempo de espera.
WORK_DIRusa Bubblewrap y falla de forma segura si no se puede proporcionar aislamiento.
Limitaciones Importantes
ALLOW_COMMANDS=""significa ejecución arbitraria de comandos con los permisos del usuario que ejecuta el servidor MCP. SiPASSWORD_SUDOtambién está configurado, el cliente MCP puede solicitar acciones como root. Use esta configuración solo con un cliente y modelo que usted controle.Una lista de permitidos de ejecutables no valida semánticamente los argumentos de los comandos.
python,node,bash,sh,perly herramientas similares son efectivamente equivalentes a permitir la ejecución de código arbitrario.WORK_DIRconfina las ubicaciones del sistema de archivos que son escribibles, pero no está diseñado para comportarse como una VM o un sandbox de red. Un comando con acceso a red aún puede modificar recursos remotos para los que tenga credenciales válidas.PASSWORD_SUDOalmacenado en la configuración del cliente MCP sigue siendo un secreto almacenado en ese archivo. Restrinja los permisos del archivo conchmod 600y nunca lo envíe al control de versiones.
Pruebas
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