Aus Linux-Magazin 11/2020

Rechteverwaltung mit den Posix Capabilities

© Artur Szczybylo, 123RF

Mithilfe der sogenannten Posix-Capabilities lässt sich eine fein abgestufte Rechteverwaltung realisieren.

Die Rechte des allgewaltigen Users Root soll der Admin nur mit Bedacht nutzen, lautet eine Binsenweisheit. Schon ein Moment Unachtsamkeit kann großen Schaden anrichten, wenn es keine Schranken für die Befehlsgewalt gibt. Nicht zuletzt deshalb operieren normale Benutzer mit deutlich reduzierten Rechten, und auch Admins sollten das in der Regel tun. Was aber, wenn doch einmal erweiterte Berechtigungen unumgänglich sind? Ganz offensichtlich nötig ist das zum Beispiel, will man das Kommando »su« ausführen, das einem Nutzer die Identität eines anderen verleiht.

In solchen Fällen leistet oft ein unscheinbares Bit erste Hilfe, das sogenannte SetUID-Bit oder kurz SUID-Bit: Ist es bei einer Kommandodatei gesetzt, wird sie nicht wie üblich mit den Rechten des Ausführenden gestartet, sondern mit den Rechten des Dateieigentümers. Entsprechend gehört eine solche Datei normalerweise Root, was dem Benutzer Root-Rechte nur für dieses spezielle Kommando einräumt. Davon kann man sich leicht überzeugen (Listing 1).

Listing 1

SetUID finden und verwenden

# Die Kommandodatei gehört Root
$ ls -al /bin/su
-rwsr-xr-x 1 root root 67816 Apr 2 17:29 /bin/su
# Das SetUID-Bit ist gesetzt
$ stat -c "%a %A" /bin/su
4755 -rwsr-xr-x
# Ausführung
$ su
# im anderen Terminalfenster:
# tatsächlich führt Root aus
$ ps aux | grep su | grep -v grep
root   36365  0.0  0.0  11236  3716  pts/2  S+  11:51  0:00 su

Das ist allerdings immer noch recht grobschlächtig, billigt das SUID-Bit doch volle Root-Rechte zu, wenn auch nur für einzelne Kommandos. Es geht auch feiner abgestuft, nämlich mit den sogenannten Posix-Capabilities. Die verleihen dem Ausführenden einer Datei sehr spezielle zusätzliche Rechte, zum Beispiel jenes, beliebigen Prozessen Signale zu senden, privilegierte Ports zu verwenden, das System zu rebooten, Kernel-Module zu laden und so weiter. Eine umfassende Übersicht aller 33 übertragbaren Berechtigungen zeigt »man capabilities«.

Ein gutes Beispiel dafür, wie man die Posix-Capabilities verwendet, liefert das Kommando »ping«. Eigentlich müsste es ein SUID-Bit haben, denn es muss auf Netzwerk-Sockets zugreifen, was ein gewöhnlichen User nicht darf. Zumindest unter Ubuntu 20.04 fehlt aber das SUID-Bit. Warum »ping« aber dennoch funktioniert, das verrät folgender Aufruf:

$ getcap /bin/ping
/bin/ping = cap_net_raw+ep

Ping kommt also mit gesetzter Capability »NET_RAW«, die unter anderem die Verwendung von Raw- und Packet-Sockets erlaubt. Die Flags »e« und »p« stehen für “effective” und “permitted”, also eingeschaltet und erlaubt. Die Capabilities lassen sich nicht nur abfragen, sondern mit »setcap« auch setzen. Das nützt allerdings nicht in allen Fällen etwas, denn manche Linux-Kommandos (beispielsweise »mount«) prüfen, ob der Ausführende die User-ID 0 von Root hat und verweigern den Dienst, sollte das nicht so sein – ganz gleich, welche Capabilities gesetzt sind.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 1 HeftseitePreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben