Aus Linux-Magazin 03/2021

Posix Capabilities: Mehr dürfen als gewöhnlich, aber nicht alles

© yarruta, 123RF

Nicht alles, was dem normalen User verboten ist, erfordert volle Root-Rechte. Posix-Capabilities erlauben es, Superuser-Rechte scheibchenweise zu vergeben.

Will ein Anwender, beispielsweise zu Testzwecken, einen Webserver unter seiner Benutzerkennung aus seinem Home-Verzeichnis heraus laufen lassen, dann sind die Vorarbeiten schnell erledigt: Er legt in seinem Home-Verzeichnis ein »ServerRoot«-Directory an, etwa »http_test/«, und erzeugt darin die Unterverzeichnisse »logs/«, »modules/« und »root/« als »DocumentRoot«. In das Modulverzeichnis gehören Kopien der beiden auch für eine Minimalkonfiguration notwendigen Module »mod_mpm_event.so« und »mod_authz_core.so«. In das »ServerRoot«-Verzeichnis legt er eine minimalistische Konfigurationsdatei nach dem Beispiel aus Listing 1. Dorthin gehört noch eine Kopie des Binarys »apache2«. Alle Files übereignet sich der Anwender selbst. Nun sollte es losgehen können.

Listing 1

Apache-Minimalkonfiguration

ServerName localhost
ServerAdmin jcb@localhost
ServerRoot /home/jcb/http_test
DocumentRoot /home/jcb/http_test/root
User jcb
Group jcb
PidFile /home/jcb/http_test/httpd.pid
ServerTokens Min
UseCanonicalName On
TraceEnable Off
Timeout 10
MaxRequestWorkers 100
Listen 127.0.0.1:80
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authz_core_module modules/mod_authz_core.so

Doch es kommt anders (Listing 2, erster Aufruf): Der Startversuch endet in einer Fehlermeldung, die daher rührt, dass der nicht privilegierte User keinen Port mit einer Nummer unter 1024 benutzen darf – hier wäre es standardmäßig der Port 80. Dieses Sicherheits-Feature wäre noch Anfang des Jahrtausends auch nicht zu umgehen gewesen: Das Recht, einen solchen Port zu benutzen, stand nur dem Superuser root zu. Das System unterschied die Berechtigungen nur anhand der UID und der GID, und nur Root durfte alles. Mancher Anwender gibt auch heute noch an dieser Stelle auf.

Listing 2

Verbotener Port

~/http_test$ ./apache2 -f /home/jcb/http_test/apache2.conf -D NO_DETACH
(13)Permission denied: AH00072: make_sock: could not bind to address 127.0.0.1:80
no listening sockets available, shutting down
~/http_test$ sudo setcap 'cap_net_bind_service=+ep' ./apache2

Das ist aber gar nicht notwendig. Seit Einführung der Posix-Capabilities im Kernel 2.6.24 Anfang 2008 bietet sich der Ausweg an, auch dann einzelne Superuser-Rechte zu gewähren, etwa die Benutzung von Ports mit niedriger Nummer, wenn das Binary von einem nicht privilegierten User gestartet wurde. Dieser Mechanismus wurde extra geschaffen um zu vermeiden, dass man immer die vollen Superuser-Rechte vergeben muss, wenn man nur einzelne Berechtigungen benötigt. Je sparsamer man mit den Rechten umgeht, desto geringer ist schließlich die Gefahr eines Missbrauchs.

Im konkreten Fall funktioniert das mit dem Befehl aus der letzten Zeile von Listing 2. Das »ep« im entsprechenden Befehl steht für “effective” und “permitted”; es gibt auch noch »i« für vererbbar (“inheritable”), wenn der fragliche Prozess die Berechtigung an seine Kinder durchreichen soll. Mit einem Minus- anstelle des Pluszeichens ließe sich die Berechtigung wieder entziehen.

Nach dem Aufruf des Kommandos lässt sich der Webserver im Home-Verzeichnis unter der Kennung des nicht privilegierten Nutzers starten und auf dem Standard-HTTP-Port 80 benutzen.

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
Nach oben