mcp-shell-sudo
mcp-shell-sudo
MCP-Server für Linux, geschrieben in Python, der lokale Befehle über argv ausführt, nicht-interaktives sudo über PASSWORD_SUDO unterstützt, eine optionale Befehls-Whitelist über ALLOW_COMMANDS bereitstellt und Dateisystem-Schreibvorgänge mit Bubblewrap auf WORK_DIR beschränken kann.
Requirements
Linux.
Python 3.11+.
uvempfohlen.MCP Python SDK 2.0.0.
sudo, wenn erhöhte Befehle ausgeführt werden sollen.bubblewrap, wennWORK_DIRkonfiguriert ist.
Auf Debian/Ubuntu:
sudo apt update
sudo apt install -y bubblewrapRelated MCP server: MCP Process Server
Environment Variables
PASSWORD_SUDO
Passwort des Benutzers, der den MCP-Server ausführt.
Leer oder nicht gesetzt: Der Server erfindet niemals ein Passwort und fragt auch nicht interaktiv danach. Befehle mit dem Präfix
sudowerden mitsudo -nausgeführt und funktionieren nur, wenn bereits eine gültige zwischengespeicherte Anmeldeinformation vorhanden ist oder eineNOPASSWD-Regel konfiguriert ist.Gesetzt:
sudowird mit-Sausgeführt, und das Passwort wird über stdin bereitgestellt, niemals über argv oder Protokolle.
Beispiel:
"PASSWORD_SUDO": "my-password"Die unterstützte Form ist:
["sudo", "id"]Benutzerdefinierte sudo-Flags wie sudo -u postgres ... werden nicht akzeptiert. Dadurch muss die Richtlinienebene nicht die vollständige sudo-Befehlsgrammatik interpretieren.
WORK_DIR
Optionales Arbeitsverzeichnis.
Leer oder nicht gesetzt: Der MCP-Server kann von jedem vorhandenen Verzeichnis aus arbeiten, das im Tool-Aufruf angegeben ist.
Gesetzt: Der Server wechselt in den strikten Modus.
directorymuss innerhalb vonWORK_DIRaufgelöst werden, und jeder Prozess läuft in einem Bubblewrap-Mount-Namespace, in dem/schreibgeschützt ist,WORK_DIRlesend-schreibend eingehängt ist und/tmpund/runtemporär sind.
Die alleinige Verwendung von cwd wäre nicht ausreichend, um diese Isolation zu gewährleisten. Ein Prozess könnte weiterhin in /etc, /home/... schreiben oder Symlinks außerhalb des Projekts folgen. Aus diesem Grund startet der Server nicht, wenn WORK_DIR konfiguriert ist, aber bwrap nicht verfügbar ist.
In diesem Modus wird sudo abgelehnt, da eine Rechteausweitung auf Host-Ebene mit der Garantie, dass Dateisystem-Schreibvorgänge auf den Arbeitsbereich beschränkt bleiben, nicht vereinbar wäre.
ALLOW_COMMANDS
Kommagetrennte Liste von ausführbaren Dateinamen.
"ALLOW_COMMANDS": "git,ls,cat,grep,python,node,pnpm"Leer oder nicht gesetzt: Alle ausführbaren Dateien sind erlaubt.
Gesetzt: Nur exakte ausführbare Dateinamen aus der Liste sind erlaubt, und sie müssen über ihren Namen aufgerufen werden, nicht über Pfade wie
/usr/bin/git.Wenn der Befehl mit
sudobeginnt, wird die tatsächliche ausführbare Datei nachsudovalidiert.
Die Whitelist gilt für ausführbare Dateien, nicht für Argumente. Das Zulassen von bash, python, node, env oder einem anderen Werkzeug, das Prozesse ausführen kann, erweitert die Möglichkeiten des MCP-Clients erheblich.
Installation
uv syncFür die Entwicklung:
uv sync --extra devManuelle Ausführung
uv run mcp-shell-sudoDer Transport ist stdio. Protokollierung wird niemals auf stdout geschrieben, um JSON-RPC-Nachrichten nicht zu beschädigen; Protokolle werden stattdessen auf stderr geschrieben.
MCP-Konfiguration
Beispiel mit uneingeschränkten Befehlen und aktiviertem 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": ""
}
}
}
}Beispiel beschränkt auf ein bestimmtes Projekt:
{
"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 Tool
Grundlegende Eingabe:
{
"command": ["ls", "-la"]
}Mit einem Arbeitsverzeichnis:
{
"command": ["git", "status"],
"directory": "backend"
}Mit stdin:
{
"command": ["cat"],
"stdin": "hello\n"
}Mit sudo:
{
"command": ["sudo", "id"]
}Antwort:
{
"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 Tool
Gibt die effektive nicht-geheime Konfiguration zurück.
Es gibt niemals PASSWORD_SUDO zurück; es zeigt nur an, ob ein sudo-Passwort konfiguriert wurde.
Implementierte Sicherheitsmaßnahmen
Verwendet
create_subprocess_exec; es verwendet nichtshell=True.commandwird als explizites argv-Array übergeben.Das sudo-Passwort erscheint niemals in argv, Protokollen oder der Umgebung des Kindprozesses.
Wenn
PASSWORD_SUDOnicht konfiguriert ist, verhindertsudo -n, dass der Prozess hängt, während er auf eine interaktive Passworteingabe wartet.ALLOW_COMMANDSvalidiert die tatsächliche ausführbare Datei nach einem einfachensudo-Aufruf.Verwendet einen festen und reduzierten
PATH, um die Auflösung von ausführbaren Dateien aus.oder beliebigen geerbten Pfaden zu vermeiden.Verwendet eine reduzierte Kindumgebung, anstatt die gesamte MCP-Server-Umgebung zu erben.
Zeitlimit pro Aufruf: 60 Sekunden standardmäßig, mit einem Maximum von 600 Sekunden.
Ausgabelimit: 2 MiB pro Stream. Wenn das Limit überschritten wird, wird die gesamte Prozessgruppe beendet.
Prozesse laufen in einer neuen Sitzung, und die gesamte Prozessgruppe wird bei Zeitüberschreitung beendet.
WORK_DIRverwendet Bubblewrap und schlägt fehl, wenn die Isolation nicht bereitgestellt werden kann.
Wichtige Einschränkungen
ALLOW_COMMANDS=""bedeutet die Ausführung beliebiger Befehle mit den Berechtigungen des Benutzers, der den MCP-Server ausführt. WennPASSWORD_SUDOebenfalls konfiguriert ist, kann der MCP-Client Aktionen als root anfordern. Verwenden Sie diese Konfiguration nur mit einem Client und Modell, den Sie kontrollieren.Eine Whitelist für ausführbare Dateien validiert Befehlsparameter nicht semantisch.
python,node,bash,sh,perlund ähnliche Werkzeuge sind praktisch gleichbedeutend mit der Erlaubnis beliebiger Codeausführung.WORK_DIRbeschränkt die beschreibbaren Dateisystempfade, ist aber nicht als VM- oder Netzwerk-Sandbox gedacht. Ein Befehl mit Netzwerkzugriff kann weiterhin entfernte Ressourcen ändern, für die er gültige Anmeldeinformationen besitzt.PASSWORD_SUDO, das in der MCP-Client-Konfiguration gespeichert ist, bleibt ein Geheimnis in dieser Datei. Beschränken Sie die Dateiberechtigungen mitchmod 600und committen Sie es niemals in die Versionskontrolle.
Tests
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