Was ist der richtige Weg, um den SELinux-Kontext in einer RPM-Spezifikation festzulegen? (RHEL7 im Jahr 2018)

7

Das von RHEL7 bereitgestellte Tomcat-Paket unterstützt mehrere Instanzen durch die Erstellung von Verzeichnissen und Symlinks. Sobald eine solche Mehrfachinstanz erstellt und als RPM gepackt wurde, können die zusätzlichen Instanzen aufgrund von Selinux-Fehlern nicht gestartet werden.

Die Lösung besteht darin, Selinux in der RPM-Verpackung korrekt zu konfigurieren. Ich habe jedoch Schwierigkeiten, eine kanonische Beschreibung zu finden, wie dies zu tun ist.

Woher kommt die Selinux-Konfiguration, wenn Tomcat in RHEL7 installiert ist?

Bearbeiten: die Frage unter Wie kann man den SELinux-Kontext in einer RPM-.spec richtig einstellen? Hatte sich jemand die Mühe gemacht, es tatsächlich zu lesen, verwies auf die veralteten RHEL4- und RHEL5-Distributionen und ist 7 Jahre alt. Wie in dieser Frage klar angegeben, bezieht sich dies auf RHEL7 im Jahr 2018. Die Antwort auf die 7 Jahre alte Frage und die Antwort auf diese Frage unterscheiden sich stark voneinander.

Graham Leggett
quelle
Sie sollten sich zunächst mit dem Erstellen von SELinux-Richtlinienpaketen (PP-Dateien) vertraut machen. Ich denke, dieser Link könnte dann Informationen darüber geben, was Sie wollen: 5.2. Generieren von SELinux-Richtlinienmodulen: sepolicy generate
AB
Sie haben bereits 2 wiedereröffnete Stimmen.
Peter - Wiedereinstellung Monica
Wenn die Antworten veraltet sind, sollten aktualisierte Antworten veröffentlicht werden, anstatt für jede neue Version dieselbe Frage erneut zu stellen.
Muru
@muru Nicht, wenn in der vorherigen Frage speziell nach einer veralteten Version des Betriebssystems gefragt wird. Es sei denn, Sie befürworten auch das Umschreiben der Frage?
EdwinW

Antworten:

4

Die SELinux-Konfiguration wird vom selinux-policy-targetedPaket bereitgestellt , das die Standardrichtlinienkonfiguration für die Distribution enthält, einschließlich der SELinux-Konfiguration für Tomcat.

Ich konnte zwei alte Fedora-Verpackungsentwürfe finden, die die SELinux-Konfiguration in RPM-Verpackungen beschreiben.

PackagingDrafts / SELinux schlägt vor , einschließlich der Dateikennzeichnung Konfiguration in %postund %postunAbschnitte der Spec - Datei durch Ausführen semanage fcontext -aund semanage fcontext -djeweils Laufen restorecon/ fixfilesdanach.

Wie von Graham Legett hervorgehoben , ist es nützlich zu beachten, dass durch die Verwendung von semanagein %preoder %postAbschnitten der Spezifikation der gesamte Python-Stack zusammen mit der policycoreutils-pythonAbhängigkeit von der Installationszeit hinzugefügt wird . Mit restoreconfügt policycoreutils, was wiederum bringt sed, gawkund grepals Zeitabhängigkeiten installieren.

Ein besserer Weg, um die erforderlichen Regeln für die Dateibeschriftung bereitzustellen, wäre ein SELinux-Richtlinienmodul. Richtlinienmodule bieten eine übersichtlichere Oberfläche für die Verwaltung modularer Richtlinien (Kennzeichnungsregeln werden nicht mit lokalen Änderungen gemischt semanage).

Für Ihr Richtlinienmodul mit Dateibeschriftungsregeln müssen Sie eine Typdurchsetzungsdatei und eine Dateikontextbeschriftungsdatei bereitstellen. Eine Typ-Durchsetzungsdatei ist erforderlich, auch wenn Sie der Richtlinie keine Änderungen hinzufügen. Eine beispielhafte Dummy-Typ-Durchsetzungsdatei mymodule.te:

policy_module(mymodule, 1.0)

Die Regeln für die Dateikennzeichnung sind in mymodule.fcund folgen denselben:

/path/to/file   --  gen_context(system_u:object_r:type_t,s0)

Mit selinux-policy-develkann das Modulpaket mit [Anmerkung 1] kompiliert werden :

make -f /usr/share/selinux/devel/Makefile

In Bezug auf Verpackungsrichtlinienmodule empfiehlt SELinux Policy Modules Packaging Draft in ähnlicher Weise, die Abschnitte %postund %postunder Spezifikationsdatei zu verwenden, um die Richtlinie mit semoduleund restorecon/ zu installieren fixfiles. Eine Beispielspezifikationsdatei wird ebenfalls bereitgestellt.


[Anmerkung 1] Das Beispielrichtlinienmodul kann ohne selinux-policy-develVerwendung von checkmoduleund semodule_packagedirekt generiert werden. Dazu müssten die Richtliniendateien ohne Makros geschrieben werden.

sebasth
quelle
2
Um diese Antwort zu verbessern, finden Sie hier ein Beispiel für ein kleines SELinux-Modul, das als eigenständiges Paket geliefert wird : pagure.io/copr/copr/blob/master/f/selinux Dies sollte Ihnen genügend Beispiele für die Implementierung Ihres eigenen Moduls geben.
Msuchy
Jede Verwendung von Semanage in% pre oder% post führt zu einer Abhängigkeit der Installationszeit des gesamten Python-Stacks zusammen mit policycoreutils-python, und jede Verwendung von restorecon führt zu policycoreututils, was wiederum sed, gawk und grep zur Folge hat. Die Tomcat-Drehzahl bringt keine davon mit, und daher ist dies nicht die Lösung für RHEL7. Können Sie diese Vorschläge nach Möglichkeit aus der Antwort entfernen?
Graham Leggett
@GrahamLeggett Die SELinux-Richtlinie für Tomcat wird geliefert selinux-policy-targeted, die Regeln für die Dateibeschriftung enthält. Daher wird wahrscheinlich keine SELinux-Konfiguration mit dem Tomcat-Paket geliefert.
sebasth
@GrahamLeggett Ich habe einen Hinweis zu den Abhängigkeiten beigefügt. Sie können auch gerne eine Bearbeitung vorschlagen , wenn Sie die Antwortdetails ändern möchten.
sebasth