Skip to main content
Glama

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+.

  • uv empfohlen.

  • MCP Python SDK 2.0.0.

  • sudo, wenn erhöhte Befehle ausgeführt werden sollen.

  • bubblewrap, wenn WORK_DIR konfiguriert ist.

Auf Debian/Ubuntu:

sudo apt update
sudo apt install -y bubblewrap

Related 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 sudo werden mit sudo -n ausgeführt und funktionieren nur, wenn bereits eine gültige zwischengespeicherte Anmeldeinformation vorhanden ist oder eine NOPASSWD-Regel konfiguriert ist.

  • Gesetzt: sudo wird mit -S ausgefü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. directory muss innerhalb von WORK_DIR aufgelöst werden, und jeder Prozess läuft in einem Bubblewrap-Mount-Namespace, in dem / schreibgeschützt ist, WORK_DIR lesend-schreibend eingehängt ist und /tmp und /run temporä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 sudo beginnt, wird die tatsächliche ausführbare Datei nach sudo validiert.

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 sync

Für die Entwicklung:

uv sync --extra dev

Manuelle Ausführung

uv run mcp-shell-sudo

Der 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 nicht shell=True.

  • command wird als explizites argv-Array übergeben.

  • Das sudo-Passwort erscheint niemals in argv, Protokollen oder der Umgebung des Kindprozesses.

  • Wenn PASSWORD_SUDO nicht konfiguriert ist, verhindert sudo -n, dass der Prozess hängt, während er auf eine interaktive Passworteingabe wartet.

  • ALLOW_COMMANDS validiert die tatsächliche ausführbare Datei nach einem einfachen sudo-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_DIR verwendet Bubblewrap und schlägt fehl, wenn die Isolation nicht bereitgestellt werden kann.

Wichtige Einschränkungen

  1. ALLOW_COMMANDS="" bedeutet die Ausführung beliebiger Befehle mit den Berechtigungen des Benutzers, der den MCP-Server ausführt. Wenn PASSWORD_SUDO ebenfalls konfiguriert ist, kann der MCP-Client Aktionen als root anfordern. Verwenden Sie diese Konfiguration nur mit einem Client und Modell, den Sie kontrollieren.

  2. Eine Whitelist für ausführbare Dateien validiert Befehlsparameter nicht semantisch. python, node, bash, sh, perl und ähnliche Werkzeuge sind praktisch gleichbedeutend mit der Erlaubnis beliebiger Codeausführung.

  3. WORK_DIR beschrä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.

  4. PASSWORD_SUDO, das in der MCP-Client-Konfiguration gespeichert ist, bleibt ein Geheimnis in dieser Datei. Beschränken Sie die Dateiberechtigungen mit chmod 600 und committen Sie es niemals in die Versionskontrolle.

Tests

uv run --extra dev pytest
uv run --extra dev ruff check .
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Related MCP Servers

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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