Ein Schlüssel für Claude, mit engen Grenzen

Verfasst von

in

Bisher habe ich alle Texte selbst in WordPress eingetragen. Das geht schneller, wenn Claude, mein KI-Helfer, die Beiträge direkt anlegen darf. Dafür braucht er einen Zugang zum Server. Einen Generalschlüssel möchte ich ihm nicht geben.

Stattdessen bekommt Claude einen Schlüssel, der nur wenige Türen öffnet: ein kleines Skript. Es kennt eine Liste erlaubter Handgriffe, zum Beispiel „Beitrag anlegen“, „Beitrag lesen“ oder „Beitrag in den Papierkorb legen“. Alles andere lehnt es höflich ab. Auch Befehle, mit denen sich beliebiger Code ausführen ließe, bleiben draußen.

Zum Test habe ich eine Seite anlegen, ändern und in den Papierkorb legen lassen. Das hat funktioniert. Die verbotenen Befehle kamen mit einer klaren Meldung zurück. Neue Beiträge landen zuerst als Entwurf. Veröffentlicht wird, wenn ich es freigebe.

Zeig mir, wie es geht: Der Wrapper
  • Wrapper /usr/terruhn.it/sbin/kisp-wp (root:root, 755) startet docker compose -p kisp run --rm -T wpcli wp ….
  • Allowlist nach Unterbefehl-Paaren: post create|get|list|update|delete|exists, post meta get|list|add|update|delete, term …, menu …, menu item …, media import, option get.
  • Gesperrt: --exec, --require, --ssh, --http, --path, --config, --allow-root, --prompt, --user; Optionen vor dem Unterbefehl; alle nicht gelisteten Unterbefehle (eval, eval-file, shell, db, package, plugin, option update …).
  • sudo-Regel /etc/sudoers.d/kisp-wp: rene ALL=(root) NOPASSWD: /usr/terruhn.it/sbin/kisp-wp, geprüft mit visudo -cf.
  • Inhalt per STDIN: echo '…' | sudo -n /usr/terruhn.it/sbin/kisp-wp post create - --post_status=draft --porcelain.
  • Löschen ohne --force legt in den Papierkorb.

Ein eigener Name für Claude

Nach den ersten Beiträgen fiel mir etwas auf. Bei keinem Text stand, wer ihn angelegt hatte. Das Feld für den Autor war leer. Für eine Seite, die offen mit KI arbeitet, passt das nicht.

Claude hat deshalb ein eigenes Benutzerkonto in WordPress bekommen, mit dem Namen „Claude (KI)“. Das Skript meldet sich bei jedem Handgriff mit diesem Konto an. Einen anderen Namen kann Claude dabei nicht angeben. So trägt jeder Text, den Claude anlegt, diesen Autor. Die bisherigen Beiträge habe ich nachträglich umgestellt.

Das Konto darf Beiträge und Seiten schreiben. Plugins, Designs und andere Benutzer bleiben außer Reichweite.

Zeig mir, wie es geht: Der Benutzer claude
  • Benutzer anlegen (root, einmalig):
docker compose -p kisp run --rm wpcli wp user create claude claude@thekeepitsimpleproject.org --role=editor --display_name="Claude (KI)" --nickname="Claude (KI)" --porcelain
  • Wrapper 0.2 setzt --user=claude bei jedem Aufruf; --user vom Aufrufer wird abgelehnt.
  • Rolle Editor, weil Seiten erst ab dieser Rolle anlegbar sind. Keine Rechte für Plugins, Themes und Benutzer.
  • Bestehende Inhalte umgestellt:
sudo -n /usr/terruhn.it/sbin/kisp-wp post update 11 --post_author=3
  • Die E-Mail-Adresse ist ein Pflichtfeld. Das Konto dient nicht der Anmeldung im Browser.

Das zweite Schloss

Später habe ich Claude gebeten, zwei fertige Seiten zu veröffentlichen. Das Skript hätte es erlaubt. Der Befehl kam nicht durch, meine Zusage im Chat reichte nicht aus.

Claude Code, das Programm, in dem Claude bei mir arbeitet, hat eine eigene Rechteprüfung. Sie schaut sich jeden Befehl an, bevor er läuft. Etwas zu veröffentlichen wirkt nach außen. Das stuft sie als heikel ein und hält es an, auch wenn im Gespräch eine Freigabe steht.

Ich habe die beiden Seiten dann selbst veröffentlicht, mit zwei Klicks im Browser. Mir gefällt dieser Ablauf. Es liegen zwei Schlösser hintereinander: das Skript auf dem Server und die Prüfung in Claude Code. Den letzten Schritt mache ich selbst.

Zeig mir, wie es geht: Rechteprüfung in Claude Code
  • Abgelehnter Aufruf:
sudo -n /usr/terruhn.it/sbin/kisp-wp post update 27 29 --post_status=publish

Meldung: „Permission for this action was denied by the Claude Code auto mode classifier. Reason: [External System Writes]“.

  • Im Auto-Modus bewertet ein Klassifikator jeden Befehl. Schreibzugriffe auf Systeme außerhalb des Projektordners werden angehalten.
  • Eine Freigabe im Chat hebt das nicht auf. Dauerhaft erlauben lässt es sich über eine Berechtigungsregel für Bash in den Einstellungen von Claude Code.
  • Für KISP bleibt es dabei: Veröffentlichen per Browser oder per !-Befehl im Terminal von Claude Code.