Agent Updates & SELinux

Moin,

mir ist aufgefallen, das die automatischen Updates aus der Bakery auf einigen meiner Linux System nicht funktionieren, da ein Problem beim installieren des neuen RPMs auftritt.

Das ganze passiert nur auf Systemen auf denen die SELinux Policy im “Enforcing” Mode läuft

[Admin2654@hugo ~]$ getenforce
Enforcing

Nach ein bisschen hin und her überlegen bin ich auch drauf gekommen was das Problem ist.
Der Agent wird ja (zumindest auf meinen Systemen) vom xinetd gestartet, das heißt er läuft im SELinux Kontext des xinted und das ist

inetd_child_t

Um ein RPM zu installieren, das auch Pre-/Postinstall Scripte enthält muss der Prozess aber im Kontext

rpm_script_t

laufen. Der Wechsel in diesen Kontext ist aber in der Standard SELinux Policy nicht erlaubt.
Dazu muss man sich eine kleine Policy Erweiterung bauen

module cmk 1.0;
require {
type inetd_child_t;
type rpm_script_t;
class process transition;
}
allow inetd_child_t rpm_script_t:process transition;

Einfach als cmk.te speichern
Den Sourcecode muss man jetzt noch in ein binäres Policy Modul umwandeln

checkmodule -M -m cmk.te -o cmk.mod
semodule_package -o cmk.pp cmk.mod

Das binary File muss man zumindest bei Redhat nur für die Major Revision erstellen also RHEL 7 oder 8 aber nicht für die Minor Revisions.

Das erstellte .pp File kann man einfach mit

semodule -i cmk.pp

auf dem Zielsystem installieren und dann klappt auch das automatische Aktualisieren des Agenten :slight_smile:

Das installieren muss man nur einmal machen, danach ist die Policy dauerhaft angepasst.

Sicherheitstechnisch bedeutet das aber das jetzt jeder Prozess der vom xinetd gestartet wird SELinux seitig die Rechte hat ein RPM zu in-/deinstallieren. ‘root’ muss man aber trotzdem noch sein.

Hoffe mal das hilft irgendwem weiter :wink:

Frank

7 Likes