Probleme mit SELinux reparieren

SELinux mal wieder mal um die Ohren geflogen? Vielleicht kann dieser Artikel helfen.

Es war einmal eine neue SSD …

Vor einigen Tagen habe ich meine Systemfestplatte durch eine SSD ersetzt. Da die ganze Platte verschlüsselt war, folgte ein ziemlich aufwändiger Prozess um die Inhalte zu kopieren. Dabei wurde SELinux allerdings vergessen, was dazu geführt hat, daß Linux danach nicht mehr ganz störungsfrei lief.

Alles in allem häuften sich Meldungen wie diese :

Mar 22 23:10:48 eve python: SELinux is preventing /usr/lib64/firefox/plugin-container from open access on the file .

Da stellt sich einem Admin erstmal die Frage, welches File er da nicht öffnen konnte und wieso nicht. Leider bleibt diese Frage unbeantwortet, da das Audit von SELinux dazu schweigt. Dummerweise weiss man nicht welche Datei gemeint ist und was falsch sein könnte. Solange mein Bugreport nicht zu einer Änderung führt, werden wir das auch nie erfahren, da nicht mal strace herausfindet, welche Datei gemeint ist.

Wie Anfangs schon erwäht, wurden Daten von einer Platte auf eine andere kopiert und letztlich war das das Problem.

Was macht SELinux ?

SELinux (ab jetzt nur SEL ) kennt für fast jede Datei einen Zugriffscontext, fcontext genannt. Mit einem ls sieht man diesen Context nicht gleich, dazu muß man die -Z Option benutzen :

# ls -lad /home/
drwxr-xr-x. 4 root root 4096 20. Mär 07:03 /home/

# ls -ladZ /home/
drwxr-xr-x. root root system_u:object_r:home_root_t:s0 /home/

Das Verzeichnis /home/ hat also als Defaultcontext „home_root_t“ ( die enden fast alle auf _t, nicht fragen ). Alle Dateien in /home/ bekommen auch erstmal diesen Context. Programm die in einem Context gestartet wurden, können erstmal nicht auf Dateien in einem anderen Context zugreifen. Das verhindert, daß man durch den Hack z.b. des Apache Webservers auf systemrelevante Dateien zugreifen kann, auch wenn man durch den Hack Rootuser geworden ist. An sich eine Supersache was Security angeht.

Damit das klappt gibt es unter „/etc/selinux/targeted/contexts/files“ eine Liste mit Contexten, die Dateien zugeordnet sind. Wenn man jetzt TAR benutzt um den Inhalt einer Platte von A-> B zu kopieren, geht der Context verloren, aber SELinux findet beim Start seine Configdateien und handelt danach.

Jetzt wurden aus Platzgründen auf der SSD diese Dateien beim Kopieren beschädigt, weswegen der Rechner überhaupt gebootet hat, weil damit der Regelsatz gelöscht war. Da aber andere Dateien mit Contexten versehen wurden, was automatisch beim Anlegen einer Datei passiert (z.b. mit cp a b/) , gab es einige Contexte und andere nicht. Besonders das Home-Verzeichnis strotzt nur so vor Contexten.

Jede Fehlermeldung von SELinux wird dem User präsentiert. Dazu poppt auf dem Desktop eine Warnung auf. In dieser Warnung steht auch, was man dem System zu sagen hat, damit es diesen Zugriff zuläßt. Diese Ausnahmen muß es geben, damit Programme über verschiedene Contexte hinweg Daten austauschen können, z.b. Dateien per SSH ins Webverzeichnis spielen, per Samba Dateien kopieren usw.

Heute morgen hat das Chaos dann komplett zugeschlagen. Systemd konnte nicht mehr booten, da erneut SEL-rechte geändert wurden. Das führte zum komischsten Bootbug bisher. „failure to access /dev/initctl“, wo Systemd auf den „initctl“ Socket nicht mehr zugreifen konnte, also auf den eigentlichen Initprozess.

Wie man es behebt

In meinem Fall habe ich von der „alten“ Platte gebootet und systemd neu installiert, damit waren die komischen Bootprobleme behoben, aber die Gnomeshell startete trotzdem nicht. Was im Einzelnen nicht lief, lies sich nicht feststellen, damit man nicht mal mehr im Debugmodus ins System kam.

Abhilfe schaffte das Abschalten von SEL in /etc/selinux/config :

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing – SELinux security policy is enforced.
#     permissive – SELinux prints warnings instead of enforcing.
#     disabled – No SELinux policy is loaded.
SELINUX=permissive
#SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted – Targeted processes are protected,
#     minimum – Modification of targeted policy. Only selected processes are protected.
#     mls – Multi Level Security protection.
SELINUXTYPE=targeted

Der Permissive Modus ist eine Art Debugmode, SEL meckert zwar über die Sicherheitsprobleme, verhindert Sie aber nicht. Damit kann das System wieder booten und man kann die SEL Einstellungen und Probleme reparieren.

Ursachenbeseitigung

Wie sich nach nun umfassender Analyse der SEL Konfigurationen gezeigt hat, war der Policyordner defekt. Dateien mit 0 Bytegröße waren die Regel ( weil die Platte zwischenzeitlich voll war ) .

Das Verzeichnis /etc/selinux/targeted stellt den Regelsatz dar, den SEL befolgen soll, so stehts in der config (siehe oben). Diesen Ordner löscht man und ersetzt ihn anschliessend mit einer alten Kopie. In meinem Fall, von der alten Festplatte. Die Verzeichnisstruktur hat sich nicht geändert, also paßt der Regelsatz, da er „Laufwerke“ nicht beachtet, sondern nur „Pfade“ enthält. Der Name des Bootdevices spielt also keine Rolle.

Nun gibt man noch ein :

# restorecond -R -v /*

Das dauert eine Weile, weil alle Files auf der Platte auf den im Regelsatz enthaltenen Wert zurück gesetzt werden. Mit einer SSD ist man in Minuten durch, mit einer SATA dauert es eine halbe Ewigkeit. Vor den vielen Ausgaben nicht erschrecken, es werden fast alle Dateien auf der Platte gerichtet!

Nun stellt man noch SEL in der /etc/selinux/config auf enforcing um :

# SELINUX=permissive
SELINUX=enforcing

Nun kann man rebooten und der Rechner läuft wieder.

Kleiner Tip an die Gemeinde: Kauft gleich eine TB große SSD, wenn Ihr Videos auf der Platte habt. Spart euch das Linken auf die alte Platte, damit spart Ihr euch eine Menge zusätzlichen Ärgers. Das Musik-  und Videos-Verzeichnis hat genauso Contexte wie alles andere und die müssen passen.

So habe ich das gemacht :

# ls -ladZ /home/marius/Videos
lrwxrwxrwx. marius marius unconfined_u:object_r:user_home_t:s0 /home/marius/Videos -> /sata_home/marius/Videos

]$ ls -ladZ /sata_home /sata_home/marius/
drwxr-xr-x. root root system_u:object_r:user_home_dir_t:s0 /sata_home/
drwx——. marius marius unconfined_u:object_r:user_home_dir_t:s0 /sata_home/marius/

In der /etc/fstab dann noch :

/dev/mapper/luks-53246778-9093-123d-235b-4f35522234211 /sata_home ext4 defaults,x-systemd.device-timeout=0 1 2

Eingetragen um die alte Home Partition als /sata_home zu mounten. Da die Passwörter für die Platten gleich sind ( beim Einrichten & Partitionieren der neuen Platte einfach so eintippen ) , wird diese Lukspartition auch automatisch beim Booten entschlüsselt und kann dann gemountet werden.

 

 

Sicherheitslücke im Gnome 3 Desktop

Im Gnome 3 Desktop klafft mindestens seit der Version für Fedora 18 eine Sicherheitslücke.

Diese betrifft i.d.R. Benutzer eines Laptops, da diese das Laptop öfters in den Suspend-on-Disk Modus versetzen um Energie zu sparen, auf Deutsch: Den Deckel zu machen 😉

Wenn das passiert, wird der Bildschirm schwarz, weil er ausgeht. Wenn der Bildschirm wieder angeht, sieht man auf einigen Rechnern den Inhalt des Desktops vor dem Suspend, bis der Screensafer einsetzt und dem ganzen einen Riegel vorschiebt:

Am 9.12.2015 wurde die Lücke zum zweiten Mal an Fedora und damit an Gnome gemeldet.

Ein zweites Mal ? Ja, genau. Schon in Fedora 18 wurde auf einem Laptop dieser Effekt bemerkt und an Fedora gemeldet. Da es sich um einen Security-Bug handelt, wurde darüber nichts bekannt. Im Laufe der nächsten Tage, kamen die Redhat- und Gnome-Entwickler zu dem Schluß, des es an dem „alten“ „langsamen“ Laptop liegen mußte und es modernen nicht reproduziert werden konnte.

Nun sind 2,5 Jahre rum und ich habe ein neues Laptop…. und den gleichen Bug wie vor 2,5 Jahren.

Diesmal gab es aber eine Fristsetzung für Gnome. Das Sie diesen Beitrag lesen können, bedeutet, daß die Schweigefrist von 90 Tagen um ist.

Wie können Sie diesen Bug ausnutzen um an Informationen zu gelangen ?

Eine Voraussetzung ist natürlich, daß das Opfer sensitive Daten angezeigt hat, bevor der Suspendmodus eingeleitet wurde. Ansonsten sehen Sie zwar den Desktop, aber außer einigen anrüchigen Pornohintergründen, wenden Sie vermutlich kaum etwas „entdecken“ können 🙂

Wie exploiten wird dies nun ?

Das ist schon so trivial, daß man sich schämen muß es zu erwähnen:

Handy nehmen
Videoaufnahme starten
auf den Bildschirm richten
Leertaste auf dem Opfer Laptop benutzen
etwas warten bis das Bild kommt.
Weggehen.

Spulen Sie die Videoaufnahme langsam ab und halten Sie einfach in dem Moment an, wenn der Bildschirm zusehen ist.

Kleiner Tip:

Das Laptop und der Monitor sollten in einer hellen Umgebung aufgenommen werden, also nicht nur den Bildschirm sondern auch etwas Dekor, weil dann der Videochip die Aufnahme nicht überstrahlt, wenn es von schwarz auf weiß umschlägt.

Gegenmaßnahmen:

Zuerst den Screensafer starten, dann den Suspendmodus benutzen.

Betroffen:

min. Fedora 18,19,20,21,22,23 mit Gnomedesktop
vermutlich: Ubuntu, Debian mit Gnome und alle Fedora vor 18 mit Gnome

Teamspeak und Skype unterbrechen den Sound

Kennen Sie das ? Sobald Teamspeak läuft, sind alle anderen Sounds im Pulseaudio gemutet.

Ursache ist eine Priorisierung der Audioquellen damit Sprachtools immer zu hören sind.
Teamspeak markiert seinen Datenstrom als „Voice“ Klasse, MPlayer dagegen als „Music“.

Das Verhalten kann man durch eine kleine Einstellung in der Datei /etc/pulse/default.pa ändern. Dort kommentiert man den Eintrag „load-module module-role-cork“ einfach aus.

Anschliessend muß man Pulseaudio neu starten und da wird es schwierig.

Erstmal muß man alle Audioanwendungen beenden, sonst endet das böse. Danach:

# pulseaudio -k
# pulseaudio –start

Danach dauert es etwas bis Pulseaudio wieder bereit ist und das Problem ist weg.