Krótka wersja: Jaki jest najbezpieczniejszy sposób, aby umożliwić Java 7 uruchomienie na (z?) SELinux?
Długa wersja:
Z góry przepraszam, jeśli użyję niepoprawnej terminologii. Naprawdę jestem tylko programistą Java z niewielką ilością umiejętności obsługi Linuksa.
Właśnie zainstalowałem Javę 7 na CentOS wydanie 5.3 (wersja ostateczna), który najwyraźniej ma Security Enhanced Linux. Po zakończeniu instalacji (którą „zainstalowałem” przez rozpakowanie pliku tar.gz z Oracle w /usr/java/jdk/jdk1.7.0_25
), uruchomiłem java -version
i otrzymałem ten błąd:
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`
Znalazłem kilka artykułów stwierdzających, że może to być spowodowane przez SELinux i spróbuję setenforce 0
sprawdzić, czy problem zniknie. Uruchomiłem to polecenie i Java działała. Ale te same artykuły mówią, że pozostawienie setenforce 0
hosta podłączonego do Internetu jest niebezpieczne, a mój host jest podłączony do Internetu.
Istnieją inne artykuły, które sugerują to następne podejście, ale także mówią, że może być niebezpieczne, więc jeszcze go nie wypróbowałem.
chcon -t textrel_shlib_t /usr/jre1.7.0_10/lib/i386/client/libjvm.so
... w powyższym poleceniu ścieżka na końcu polecenia jest zastąpiona ścieżką mojego JDK.
Nie mogę znaleźć czegoś „oficjalnego” (co może znaczyć wiele rzeczy) na temat bezpiecznego uruchamiania Java 7 na (z?) SELinux. Czy ktoś ma dla mnie jakieś informacje?
Edycja: Odkryłem artykuł dotyczący edycji /etc/selinux/config
. Ustawiłem jak pokazano na poniższej próbce. Pozwala to na uruchomienie Java, ale zakładam, że mam teraz pewne luki w zabezpieczeniach.
# 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
Rozwiązanie wygląda rozsądne. Ostatnie rozwiązanie nie różni się zbytnio odsetenforce 0
.