Problem
Eine Datei, die einer bestimmten SELinux MCS (Multi Category Security)-Kategorie zugeordnet ist, kann von einem Benutzer gelesen werden, der dieser Kategorie nicht zugeordnet ist, was darauf hinweist, dass MCS auf meinem System (mit CentOS7, einer minimalen Installation und SELinux-Forcing ingezieltPolitik ).
Hintergrund
Ich habe mir vor Kurzem einen kleinen virtuellen Server zugelegt, was mich dazu veranlasst hat, mich zum ersten Mal mit der sicheren Systemeinrichtung und dem Umgang mit SELinux zu befassen. Ich beabsichtige, die Anwendungen, die ich auf dem Server ausführen werde, zu trennen, indem ich sie in Docker-Containern ausführe (wobei der Host selbst auf CentOS7 läuft). Ich war erfreut zu erfahren, dass jedem Docker-Container beim Start (standardmäßig) zufällige SELinux-MCS-Kategorien zugewiesen werden, um eine zusätzliche Sicherheitsebene für die Trennung bereitzustellen. Um mich mit der Funktionsweise von SELinux im Allgemeinen und MCS im Besonderen vertraut zu machen, habe ich auf einem meiner Heimcomputer eine VM eingerichtet und ein wenig herumgespielt. Dabei ist mir aufgefallen, dass MCS nicht wie erwartet funktioniert. Entweder übersehe ich etwas Wichtiges oder es liegt irgendwo ein Konfigurationsproblem vor.
Was ich getan habe
Um MCS zu testen, folgte ich den Anweisungen in [0] und [1]. Zuerst stellte ich sicher, dass SELinux tatsächlich läuftStriktModus und mit demgezieltRichtlinie mit sestatus
. Unter Einhaltung von [0] habe ich einemcsuser_uSELinux-Benutzer und CentOS-BenutzerJohn,Jana,Abonnieren, die ich dann abgebildet habe aufmcsuser_usemanage login
Ich habe den Benutzern außerdem die in [0] aufgeführten Kategorien zugewiesen und bin zu folgendem Ergebnis gekommen :
Login Name | SELinux User | MLS/MCS Range
john | mcsuser_u | s0-s0:c122
jane | mcsuser_u | s0-s0:c123
johnjane | mcsuser_u | s0-s0:c122,123
von semanage login -l
und
mcsuser_u | MLS/MCS Level: s0 | MLS/MCS Range: s0-s0:c0.c1023 | SELinux Roles: user_r
aus semanage user -l
.
Ich habe das Home-Verzeichnis des BenutzersJohnweltweit lesbar ( chmod 707
), angemeldet alsJohnund erstellte eine TextdateiAbonnierenIch habe dann die Kategoriec122zu dieser Datei (immer noch angemeldet alsJohn). Ich konnte auch Kategorie zuweisenc120zur Datei, obwohlJohnist nicht kategorisiert alsc120selbst, was laut [0] nicht möglich sein sollte (ich habe anschließendc120erneut). ls -lZ johntext
zeigt die Ausgabe
-rw-rw-r-- john john mcsuser_u:object_r:user_home_t:s0:c122 johntext
Nach dem oben genannten habe ich mich als Benutzer angemeldetJanaund versuchte, die Datei zu lesenAbonnierenmithilfe des cat
Befehls, was mir auch gelang.
Dies ist für mich ein klares Anzeichen dafür, dass MCS nicht wie erwartet funktioniert (Zugriff auf Objekte einer bestimmten Kategorie wird nur dann gewährt, wenn der Benutzer, der den Zugriff anfordert, derselben Kategorie angehört).
Lösungen?
Ich bin jetzt etwas verwirrt und weiß nicht, wo der Fehler liegt, also wende ich mich an euch, um Rat zu bekommen. Es ist wahrscheinlich nur eine falsche Annahme oder ein Missverständnis meinerseits, aber ich komme im Moment nicht dahinter und es ergibt für mich keinen Sinn.Aus meiner Sicht gibt es folgende Möglichkeiten:
1. Ich muss MCS-Prüfungen manuell aktivieren oder eine andere Richtlinie verwenden
Ich habe keine Informationen darüber gefunden, ob ich die MCS-Unterstützung manuell aktivieren muss und gehe daher davon aus, dass es funktioniert, wenn ich Labels zuweise (basierend auf [1]). Andere Quellen [2] legen nahe, dass MCS aktiviert ist in dergezieltRichtlinie für (zumindest) Fedora und RHEL, woraus ich schließen würde, dass es für CentOS nicht anders ist.
2. Auf meiner Seite liegt eine Fehlkonfiguration vor
Möglicherweise habe ich beim Einrichten der Benutzerkategorien semanage login
oder beim Zuweisen von Kategorien zur Datei einen Fehler gemacht.
3. Es ist einfach kaputt
.. was schlecht wäre
Verweisende Links
0:https://selinux-mac.blogspot.de/2009/06/multi-category-security.html
1:https://www.centos.org/docs/5/html/Deployment_Guide-en-US/sec-mcs-getstarted.html
2:http://selinuxsymposium.org/2006/slides/08-mcs.pdf
Volle sestatus
Leistung
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
[BEARBEITEN]:
Ich habe gerade dieselben Schritte auf einer VM mit CentOS 6.9 getestet, wo alles wie erwartet funktioniert. Im Moment würde ich daher davon ausgehen, dass entweder ein Fehler in Bezug auf MCS in SELinux unter CentOS vorliegt oder einige nicht dokumentierte Änderungen an der Richtlinie/Konfiguration, die angepasst werden müssten. Ich bin mir noch nicht sicher, welche nächsten Schritte sinnvoll wären, damit es wie erwartet funktioniert.
Antwort1
Anscheinend gab es eine Änderung der SELinux-Richtlinien von CentOS6 zu CentOS7, sodass MCS-Einschränkungen nicht mehr auf alle Typen angewendet werden. Damit ein bestimmter Typ MCS einhält, mcs_constrained_type
muss das Attribut diesem Typ über eine benutzerdefinierte Richtlinie hinzugefügt werden. Weitere Einzelheiten dazu (und welche Typen standardmäßig MCS-eingeschränkt sind (und warum)) finden Sie in einemBlogbeitrag von Dan Walsh.