W przypadku, gdy ktoś inny szuka sposobu na rozwiązanie tego problemu bez wyraźnego wyłączenia SELinux, strona wiki w centos.org pomogła mi zrozumieć, co się dzieje.
Domyślnie kontekst bezpieczeństwa, w którym działa Java, gdy jest wywoływany z Apache, nie pozwala na takie rzeczy, jak czytanie pliku, przydzielanie pamięci, dostęp do sieci itp. Najłatwiejszym sposobem na rozwiązanie tych błędów jest użycie aplikacji semodułu i audit2allow. Zasadniczo sprawdź dziennik kontroli SELinux (może to być /var/logs/audit/audit.log, ale użyłem / var / log / messages i wyodrębniłem błędy avc). W dzienniku powinieneś zobaczyć takie rzeczy
avc: odmowa {getattr} dla pid = 21415 comm = "java"
i
avc: denied {open} dla pid = 21319 comm = "java"
W rzeczywistości zobaczysz sporo na temat wykonywania, przydzielania pamięci i wielu innych zasad, które naruszasz, ponieważ SELinux jest ustawiony na wymuszanie i zatrzymywanie działania aplikacji.
W dzienniku kontroli uruchom audit2allow jak poniżej:
audit2allow -M myapppolicy <audit.log
Gdzie myapppolicy to nazwa zasady, którą chcesz utworzyć, która zezwoli na wszystkie rzeczy, które zostały odrzucone w dzienniku, a audit.log to nazwa pliku dziennika opisanego powyżej. Po uruchomieniu tego polecenia należy utworzyć dwa pliki. Pierwszy to myapppolicy.te, który jest tekstową reprezentacją zasad na podstawie dziennika kontroli. Możesz to otworzyć w edytorze tekstu i upewnić się, że Twoje zasady nie są zbyt szerokie. Drugi plik to plik myapppolicy.pp, który jest skompilowanym pakietem zasad, który można włączyć.
Uruchom następujące polecenie, aby aktywować pakiet zasad, a następnie ponów proces. Być może masz wiele prób, aby wszystko działało zgodnie z oczekiwaniami, ponieważ aplikacja Java może naruszać inne zasady po uzyskaniu dostępu do pierwszej. Kroki te wykonuję około pięć razy dla serii aplikacji Java, które uruchomiłem za pomocą skryptu za pośrednictwem php.
semodule -i myapppolicy.pp