Wie stelle ich Funktionen mit dem Befehl setcap ein?

10

Ich möchte wpa_supplicant und openvpn so einrichten , dass sie als Nicht-Root-Benutzer ausgeführt werden, wie das empfohlene Setup für wireshark . Ich kann keine Dokumentation finden für das, was +eipin diesem Beispiel bedeutet:

sudo setcap cap_net_raw,cap_net_admin,cap_dac_override+eip /usr/bin/dumpcap
T0m4t0s4uc3
quelle
4
Die einzige Antwort, die diese Frage bisher hat, ist sehr schwer zu verstehen. Ich denke, eine zusätzliche Antwort ist noch erforderlich.
Rebroad

Antworten:

12

Wie Funktionen unter Linux funktionieren, ist in dokumentiert man 7 capabilities.

Die Prozessfunktionen in der effektiven Gruppe beziehen sich auf die Berechtigungsprüfungen . Datei - Funktionen werden während verwendet execv Anruf (was passiert , wenn Sie ein anderes Programm ausführen möchten 1 ) , um die neue Funktion Sätze für den Prozess zu berechnen.

Dateien haben zwei Sätze für Funktionen, zulässiges und vererbbares und effektives Bit .

Prozesse haben drei Funktionssätze: effektiv , zulässig und vererbbar . Es gibt auch einen Begrenzungssatz, der begrenzt, welche Funktionen später hinzugefügt werden können, um den geerbten Satz zu verarbeiten, und die Berechnung der Funktionen während der Ausführung beeinflusst . Funktionen können nur aus dem Begrenzungssatz entfernt und nicht hinzugefügt werden.

Berechtigungsprüfungen für den Prozess werden mit dem effektiven Satz des Prozesses verglichen . Der Prozess kann seine Funktionen vom zulässigen zum effektiven Satz erhöhen (unter Verwendung von Capget- und Capset- Systemaufrufen lautet die empfohlene API cap_get_proc bzw. cap_set_proc ).

Vererbbar und begrenzende Sätze und Datei Fähigkeiten ins Spiel kommen , während execv syscall. Während der Ausführung werden neue effektive und zulässige Mengen berechnet und geerbte Mengen und Begrenzungsmengen bleiben unverändert. Der Algorithmus wird in der capabilitiesManpage beschrieben:

P'(permitted) = (P(inheritable) & F(inheritable)) |
                (F(permitted) & cap_bset)

P'(effective) = F(effective) ? P'(permitted) : 0

P'(inheritable) = P(inheritable)    [i.e., unchanged]

Wenn P ein alter Fähigkeitssatz ist, ist P ' ein Fähigkeitssatz nach der Ausführung und F ist ein Dateifähigkeitssatz .

Wenn eine Fähigkeit in beiden Verfahren ist vererbbar Satz und Datei vererbbar Satz (Kreuzung / logische AND) wird hinzugefügt zugelassenen Satz . Die zulässige Dateigruppe wird hinzugefügt (Vereinigung / logisches ODER) (wenn sie sich innerhalb der Begrenzungsmenge befindet).

Wenn das effektive Bit in den Dateifunktionen gesetzt ist, werden alle zulässigen Funktionen nach der Ausführung auf wirksam gesetzt .

Die Funktionen im Kernel sind eigentlich für Threads festgelegt. In Bezug auf die Dateifunktionen ist diese Unterscheidung jedoch normalerweise nur relevant, wenn der Prozess seine eigenen Funktionen ändert.

In Ihrem Beispiel Fähigkeiten cap_net_raw, cap_net_adminund cap_dac_overridewerden zu geerbt und erlaubt Sätze und effektive Bit gesetzt. Wenn Ihre Binärdatei ausgeführt wird, verfügt der Prozess über diese Funktionen in effektiven und zulässigen Mengen, wenn sie nicht durch eine Begrenzungsmenge begrenzt sind.

[1] Bei Fork Syscall werden alle Funktionen und der Begrenzungssatz vom übergeordneten Prozess kopiert. Änderungen in der UID haben auch ihre eigene Semantik, wie Funktionen in effektiven und zulässigen Mengen festgelegt werden.

sebasth
quelle
Ist P (geerbt, begrenzt) wie eine Vorlage, die in den Dateien gespeichert ist, oder nur benutzerweit? (Wie würde ein neuer Prozess (vor der Ausführung) Funktionen haben?) Wie lautet auch die Syntax zum Entfernen? Ich vermute, '-e' entfernt das effektive Bit 'setcap functions_name -ip', um inhärente und zulässige Funktionen zu entfernen.
T0m4t0s4uc3
Prozess vorher hat nicht unbedingt welche. Wenn die Datei +epden Prozess hat, werden diese Funktionen erhalten. Normalerweise ist der Begrenzungssatz standardmäßig voll. Es werden keine Funktionen maskiert, da sonst kein Prozess jemals Funktionen erhalten könnte.
2.
Aber was ist dann der Sinn in P '(erlaubt) = (P (vererbbar) & F (vererbbar). Vielen Dank übrigens!
T0m4t0s4uc3
Ein Prozess kann eine zuvor vorhandene Fähigkeit wiedererlangen. Es kann Funktionen aus zulässigen und effektiven Sätzen löschen und sie erneut erhalten, wenn die Datei über +idiese Funktionen verfügt.
2.
Oh ein Sicherheitsmerkmal? Sagen Sie also 'ip r add default 192.168.1..1 via nic' benötigt cap_net_admin, während 'ip r list' dies nicht tut
T0m4t0s4uc3