Unter RHEL / CentOS 7 versuche ich, einen neuen SELinux-Sicherheitskontext für Dateien zu erstellen, um einen neuen Dienst zu unterstützen, den ich schreibe.
Ich habe eine Typdurchsetzungsdatei für meinen neuen Dienst erstellt, kann jedoch keinen neuen Typ erstellen, den das System als Dateityp erkennt.
Ich arbeite basierend auf diesem CentOS 5-Dokument " Erstellen eines lokalen Richtlinienmoduls" , das mich anweist, eine TE-Datei zu erstellen, diese dann zu verwenden checkmodule
und semodule_package
zu kompilieren.
Wenn ich nur in meine TE-Datei schreibe:
type myservice_spool_t;
dann kompiliert der TE gut, aber wenn ich es versuche, semanage fcontext
bekomme ich folgendes:
$ sudo semanage fcontext -a -t myservice_spool_t "/var/spool/myservice(/.*)?"
ValueError: Type myservice_spool_t is invalid, must be a file or device type
Ich habe verschiedene Tutorials gelesen, aber kein Beispiel gefunden, das funktioniert - alles, was ich mir ansehe, ist entweder:
- veraltet - zB Diese RHEL 4 SELinux-Dokumentationsseite sagt, dass man verwenden sollte
type myservice_spool_t, file_type;
,checkmodule
sagt aber :ERROR 'attribute file_type is not declared'
- unvollständig - zB diese Antwort lässt mich das Makro verwenden
file_type()
,checkmodule
sagt aber :ERROR 'This block has no require section.' at token 'files_type'
- oder vollständig fehlen - z. B. enthält das neue SELinux-Handbuch für RHEL 7 keine Informationen zum Erstellen neuer Richtlinien, außer zur Verwendung
audit2allow
.
Die SELinux-Projektwebsite ist völlig nutzlos, da ich kein einziges funktionierendes Beispiel gefunden habe
Ich würde mich über ein einfaches, prägnantes Beispiel für das Schreiben einer TE-Datei freuen, in der ein neuer Typ eingeführt semanage fcontext
wird, der genehmigt wird.
[Aktualisieren]
Ich habe diese Gentoo-Dokumentation zum Erstellen von Richtliniendateien gefunden , die einige nützliche Erklärungen und Beispiele enthält.
Antworten:
Ich habe herausgefunden, dass das Problem darin besteht, dass ich das Modul nicht richtig kompiliert habe. Infolgedessen haben die Makros wahrscheinlich nicht "genommen", und die
checkmodule
Fehlermeldungen des Richtlinien-Compilers haben nicht wirklich dazu beigetragen, dies zu verstehen.Damit alle diese Makros ordnungsgemäß erweitert werden können, muss die Richtlinie mithilfe der von SELinux bereitgestellten Makefiles kompiliert werden. Mit einer TE-Datei namens myservice_spool.te sollte Folgendes ausgeführt werden:
Dadurch wird eine temporäre TE-Datei mit allen erweiterten Makros erstellt und anschließend die entsprechenden Compiler zum Erstellen aufgerufen
myservice_spool.pp
.Die im OP verknüpfte Gentoo-Dokumentation enthält etwas mehr Informationen, obwohl die Dateipfade für CentOS-Systeme nicht korrekt sind.
Wenn Sie die generierte TE-Vorlage in dem
tmp
Verzeichnis überprüfen (das das SELinux-Makefile hilfreich belässt), können Sie feststellen, dass "Attribute" in der Tat die richtige Methode sind, um die Angabe eines Typs als Datei zu handhaben, aber wir müssenrequire
sie verwenden, damit sie funktionieren - Die Art und Weise, wie SELinux TE-Dateien zu funktionieren scheinen, ist, dass Sie keine Symbole erhalten, die auf magische Weise in die Konfigurationsdatei importiert wurden. Sie müssenrequire
alles verwenden , was Sie verwenden.Die korrekte, nicht makroorganisierte Methode zum Einrichten eines neuen Dateityps ist ungefähr so (kopiert aus der von TE generierten Vorlage):
quelle
# make -f /usr/share/selinux/devel/Makefile
mailcaptcha.pp Compiling targeted mailcaptcha module /usr/bin/checkmodule: loading policy configuration from tmp/mailcaptcha.tmp mailcaptcha.te":2:ERROR 'Building a policy module, but no module specification found.
te
Datei oder sie ist nicht richtig formatiert. Haben Sie etwas dagegen, Ihre Datei zu teilen?require
ist in meinem Beispiel anders. Trotzdem schlage ich vor, dass Sie mein Beispiel nicht verwenden, da es - wie ich geschrieben habe - kein Code ist, sondern eine Ausgabe des Vorprozessors. Sie sollten ein Makro verwenden, wie es Mathew in seinem Kommentar zu Ihrer Frage beantwortet hat.Sie müssen es als Mitglied des files-Attributs deklarieren, damit es über Relabel-Berechtigungen verfügt.
Versuchen
Oder besser in deinem Fall ..
Vorausgesetzt, Sie erstellen tatsächlich eine Spooldatei. Dies gibt anderen Makros die Möglichkeit, mit diesem Spool zu arbeiten, wenn sie in ihrer Richtlinie über die Berechtigung zum Verwalten von Spools verfügen.
Hier ist ein vollständiges Beispiel für ein Richtlinienmodul.
Dies würde funktionieren, aber nur den Typ deklarieren und das ist es. Sie benötigen einige Zulassungsregeln, damit sich etwas lohnt.
quelle
myservice_spool.te:4:ERROR 'This block has no require section.' at token 'files_spool_file' on line 4:
files_spool_file
ich nur eine Handvoll Ergebnisse, die entweder Quell-Dumps von Skripten, Fehlerberichte oder Mailinglisten-Posts sind. Es scheint, als ob SELinux-Richtlinien eine Sammlung magischer Beschwörungsformeln sind, die von Spitballs, Klebeband und "es funktioniert, nicht anfassen" zusammengehalten werden.# checkmodule mailcaptcha.te checkmodule: loading policy configuration from mailcaptcha.te mailcaptcha.te:1:ERROR 'syntax error' at token 'type' on line 1: checkmodule: error(s) encountered while parsing configuration # cat mailcaptcha.te type mailcaptcha_t; files_type(mailcaptcha_t);
https://selinuxproject.org/page/TypeStatements hat die richtige Antwort:
Aber ja, Ihre Frage wirft einen interessanten Punkt auf.
SELinux kennt drei Sprachen, und es gibt eine Abstraktionssprache eines Drittanbieters namens "Referenzrichtlinie".
Jede der oben genannten Muttersprachen hat ihre eigenen spezifischen Eigenschaften und kann verwirrend sein.
Die Referenzrichtlinie ist im Grunde ein Wrapper um die "Modulrichtliniensprache" mit dem Ziel, die Richtlinienpflege zu vereinfachen.
quelle
file_type
Attribut, nicht bedeutet, dass es für meine Richtliniendatei definiert ist - ich muss es in meiner Richtlinie grundsätzlich neu definieren (oder ist es "referenzieren") Datei, damit ich es verwenden kann. Und das habe ich nirgendwo erklärt gesehen, auch nicht in Stack Exchange-Antworten.make
nochcheckmodule
funktioniert.# make -f /usr/share/selinux/devel/Makefile \n mailcaptcha.pp Compiling targeted mailcaptcha module /usr/bin/checkmodule: loading policy configuration from tmp/mailcaptcha.tmp mailcaptcha.te":2:ERROR 'Building a policy module, but no module specification found.