Kurzversion: Was ist der sicherste Weg, um Java 7 unter (mit?) SELinux laufen zu lassen?
Lange Version:
Entschuldigung im Voraus, wenn ich eine falsche Terminologie verwende. Ich bin wirklich nur ein Java-Entwickler mit einem geringen Anteil an Linux-Kenntnissen.
Ich habe gerade Java 7 unter CentOS Release 5.3 (Final) installiert, das anscheinend Security Enhanced Linux enthält. Nachdem die Installation abgeschlossen war (die ich durch Entpacken der tar.gz-Datei von Oracle "installiert" habe /usr/java/jdk/jdk1.7.0_25
), wurde sie ausgeführt java -version
und es wurde folgende Fehlermeldung angezeigt :
Error: dl failure on line 864
Error: failed /usr/java/jdk1.7.0_25/jre/lib/i386/server/libjvm.so,
because /usr/java/jdk1.7.0_25/jre/lib/i386/server/libjvm.so:
cannot restore segment prot after reloc: Permission denied`
Ich habe ein paar Artikel gefunden, die besagen, dass dies an SELinux liegen kann, und um zu versuchen, herauszufinden, setenforce 0
ob das Problem behoben ist. Ich habe diesen Befehl ausgeführt und Java hat funktioniert. Dieselben Artikel besagen jedoch, dass das Verlassen setenforce 0
eines mit dem Internet verbundenen Hosts gefährlich ist und mein Host mit dem Internet verbunden ist.
Es gibt andere Artikel, die diesen nächsten Ansatz vorschlagen, aber auch sagen, dass er gefährlich sein kann, deshalb habe ich ihn noch nicht ausprobiert.
chcon -t textrel_shlib_t /usr/jre1.7.0_10/lib/i386/client/libjvm.so
... im obigen Befehl wird der Pfad am Ende des Befehls durch den Pfad meines JDK ersetzt.
Was ich nicht finden kann, ist etwas "Offizielles" (was viele Dinge bedeuten kann), wie Java 7 unter (mit?) SELinux sicher ausgeführt werden kann. Hat jemand irgendwelche Informationen für mich?
Bearbeiten: Ich habe einen Artikel entdeckt, der sich auf das Bearbeiten bezieht /etc/selinux/config
. Ich habe wie im folgenden Beispiel gezeigt eingestellt. Dadurch kann Java ausgeführt werden, aber ich gehe davon aus, dass ich jetzt einige Sicherheitslücken habe.
# 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 - SELinux is fully disabled.
SELINUX=permissive
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
chcon
Lösung sieht vernünftig aus. Die letzte Lösung ist nicht viel anders alssetenforce 0
.