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 capabilities
Manpage 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_admin
und cap_dac_override
werden 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.