Überblick
Das Berechtigungskonzept moderner Linux-Systeme bricht das traditionelle, monolithische Root-Monopol auf: Mittels Kernel-Capabilities lassen sich privilegierte Operationen maßgeschneidert an Prozesse zuweisen. Als ideales Werkzeug zur Untersuchung, Verifikation und Isolation solcher Berechtigungen fungiert capsh (Capability Shell Wrapper). Dieser Leitfaden demonstriert Schritt für Schritt den Praxiseinsatz unter Ubuntu – von der Bereitstellung der Binärdateien über die Statusabfrage und Bitmasken-Konvertierung bis hin zur gezielten Rechteentziehung sowie dem Betrieb unprivilegierter Benutzer mit minimalen Sonderrechten.
Installation von libcap2-bin und Diagnose des Prozessstatus (–print)
Um capsh im System verfügbar zu machen, wird zunächst das Paket libcap2-bin über das APT-Paketmanagement bezogen.

Der Aufruf von capsh --print liefert eine vollständige Bestandsaufnahme der aktuellen Prozessumgebung. Die Ausgabe schlüsselt sämtliche Capability-Mengen (wie Effective, Permitted oder Bounding) sowie Sicherheitsmerkmale wie Securebits, UID und GID transparent auf.
Dadurch lässt sich sofort feststellen, welcher Handlungsspielraum dem jeweiligen Shell-Kontext tatsächlich eingeräumt ist.
⚙️ [Wichtige Parameter im Überblick]
--print : Gibt die aktuellen Capability-Sätze, Benutzer- und Gruppen-IDs sowie gesetzte Securebits auf der Konsole aus.--drop : Entfernt die definierten Berechtigungen unwiderruflich aus dem Bounding-Set des Prozesses.--caps : Konfiguriert die gewünschten Capability-Flags manuell für den Zielprozess.--user : Führt nachfolgende Aktionen unter der Identität des angegebenen Benutzer- und Gruppenkontos aus.--inh : Legt den Satz vererbbarer (Inheritable) Capabilities fest.--addamb : Fügt Flags zur Ambient-Menge hinzu, damit diese auch über execve() hinweg erhalten bleiben.--secbits : Justiert Kernel-Sicherheitsflags (Securebits), um Modifikationen an den Rechten einzuschränken.--chroot : Isoliert den Prozess, indem das Wurzelverzeichnis auf einen alternativen Pfad umgebogen wird.

Kernel-Kompatibilität prüfen und Bitmasken decodieren (–supports, –decode)
Über das Flag --supports lässt sich überprüfen, ob der aktive Linux-Kernel eine spezifische Berechtigung nativ versteht. Der Befehl capsh --supports=cap_net_raw signalisiert die Verfügbarkeit der Raw-Socket-Funktionalität bei Erfolg geräuschlos über den Rückgabewert 0.

In gleicher Weise wird mit capsh --supports=cap_sys_admin validiert, ob der Kernel das weitreichende Administrationsflag cap_sys_admin bereitstellt.
Bleibt eine Fehlermeldung aus, ist das Flag einsatzbereit – ein Verhalten, das sich hervorragend für Pre-Flight-Checks in Automatisierungsskripten eignet.

Statusdateien wie /proc/[PID]/status geben Berechtigungsmuster häufig als unleserliche Hexadezimalwerte aus. Hier schafft capsh --decode=0x000001ffffffffff Abhilfe: Das Tool übersetzt die Maske in Klartextbezeichnungen.
Die resultierende Auflistung offenbart unverzüglich alle im Bitmuster enthaltenen Flags wie cap_chown, cap_sys_admin oder cap_bpf.

Rechtebeschneidung im Bounding-Set und Prozesshärtung (–drop)
Mit dem Aufruf capsh --drop=cap_chown,cap_setuid --print wird demonstriert, wie sich potenziell riskante Berechtigungen aus dem Bounding-Set verbannen lassen.
Beim Blick auf die Abschnitte Bounding set und Current IAB fällt auf, dass cap_chown sowie cap_setuid vollständig fehlen – das Prinzip der geringsten Rechte (Least Privilege) greift unmittelbar.

Um nachzuweisen, dass diese Einschränkung auch an abgeleitete Prozesse vererbt wird, startet capsh --drop=cap_chown -- -c "capsh --print | grep 'Bounding set'" eine untergeordnete Subshell.
Das gefilterte Ergebnis belegt zweifelsfrei: Auch im Kindprozess bleibt cap_chown im Bounding-Set dauerhaft gesperrt.

Herabstufung auf unprivilegierte Benutzer mit dedizierten Rechten (–user, –caps)
Der Parameter --user erlaubt den kontrollierten Wechsel des Sicherheitskontexts. Führt man capsh --user=nobody --print aus, wechselt der Wrapper zur Identität von nobody (UID/GID 65534) und zeigt die resultierenden Standardprivilegien eines regulären Systemkontos.

Das volle Potenzial moderner Härtungsstrategien zeigt sich bei Kombination von Benutzerwechsel und punktueller Rechtevergabe: capsh --user=nobody --caps="cap_net_bind_service+ep cap_setpcap-ep" stattet das unprivilegierte Konto gezielt mit cap_net_bind_service in den Mengen Effective und Permitted aus.
Der Eintrag cap_net_bind_service=ep unter Current bestätigt die Zuweisung. Damit kann ein Daemon privilegierte Low-Ports binden, ohne dass dafür gefährliche administrative Vollzugriffsrechte nötig wären.

Mit capsh steht Linux-Administratoren ein mächtiges Diagnose- und Testwerkzeug zur Verfügung, um Prozessprivilegien transparent zu steuern. Durch das konsequente Kappen überflüssiger Root-Rechte und die granulare Vergabe einzelner Capabilities lässt sich die Angriffsoberfläche von Serverdiensten nachhaltig minimieren.