Wie soll ich SELinux konfigurieren, wenn ich nginx in Docker ausführe?

6

In Dockers Dokumentation zur Sicherheit mit Docker finden Sie einen guten Artikel: https://docs.docker.com/articles/security/

Mir ist jedoch nicht klar, wie Root-privilegierte Prozesse im Container tatsächlich auf dem Host-System ausgeführt werden und wie ich SELinux so konfigurieren soll, dass das Risiko eines "Lecks" von Prozessen außerhalb des Containers besteht.

Zum Beispiel führe ich Nginx in einem Container aus, und wenn ich "ps" außerhalb des Containers mache, kann ich alle Nginx-Prozesse sehen.

root 7281 4078 0 01:36? 00:00:00 nginx: Masterprozess nginx
www-data 7309 7281 0 01:36? 00:00:00 nginx: Arbeitsprozess
www-data 7310 7281 0 01:36? 00:00:00 nginx: Arbeitsprozess
www-data 7311 7281 0 01:36? 00:00:00 nginx: Arbeitsprozess
www-data 7312 7281 0 01:36? 00:00:00 nginx: Arbeitsprozess

Dies ist keine Überraschung, da Docker so funktioniert - es ist keine Virtualisierung, bei der außerhalb einer VM nichts angezeigt wird. Mit Docker werden die Prozesse eines Containers auf dem Host-Betriebssystem innerhalb von Namespaces und eingeschränkten Berechtigungen ausgeführt. Sie sprechen direkt mit dem Host-Kernel.

In dieser Situation sollte ich SELinux so konfigurieren, dass der Nginx-Prozess anstelle des Dockers gesichert wird, genau wie wenn er ohne Docker ausgeführt wird. Ist das korrekt?

Gibt es auch eine bestimmte Docker-Konfiguration, die besser für die Ausführung von Webservern wie nginx geeignet ist?

vcarel
quelle

Antworten:

7

Angenommen, Sie verwenden einen SELinux-fähigen Docker (RHEL / CentOS 7 und Fedora) , sollten Sie nichts weiter tun müssen , als sicherzustellen, dass SELinux auf dem Host-Computer aktiviert ist und dies erzwingt.

Die mit Docker oder virsh erstellten Container werden automatisch einem in der SELinux-Richtlinie angegebenen SELinux-Kontext zugewiesen.

Möglicherweise möchten Sie den Sicherheitskontext überprüfen, unter dem die Prozesse Ihres Containers ausgeführt werden. Fügen Sie dazu die -ZOption hinzu ps. Zum Beispiel:

LABEL                             PID TTY      STAT   TIME COMMAND
system_u:system_r:virtd_lxc_t:s0:c5,c342 26351 ? Ss   0:00 /sbin/init
system_u:system_r:virtd_lxc_t:s0:c5,c342 26458 ? Ss   0:00 /usr/sbin/sshd -D

Beachten Sie, dass SELinux selbst keinen Namespace hat, sodass Sie keine separaten SELinux-Richtlinien in Containern haben können, als wären sie unabhängige Betriebssysteminstallationen.

Dies scheint auch (noch) nicht so gut entwickelt zu sein wie SELinux für Container, die von libvirt verwaltet werden. Aber im Allgemeinen sollte es nichts sein, worüber Sie sich große Sorgen machen müssen.

Michael Hampton
quelle
Was tun wir für eine Situation, in der wir RHEL 6.x haben? Gibt es einige Richtliniendateien oder etwas zu konfigurieren?
Dexter
@ Express Access.redhat.com/solutions/637583
Michael Hampton