В случае, если кто-то еще ищет способ решить эту проблему без явного отключения SELinux, вики-страница centos.org помогла мне понять, что происходит.
По умолчанию контекст безопасности, в котором Java запускается при вызове из Apache, не позволяет такие вещи, как чтение файла, выделение памяти, доступ к сети и т.д. Самый простой способ устранить эти ошибки - использовать приложения semodule и audit2allow. По сути, проверьте журнал аудита SELinux (это может быть /var/logs/audit/audit.log, но я использовал /var /log /messages и извлек ошибки avc). В журнале вы должны увидеть такие вещи, как
avc: denied {getattr} для pid = 21415 comm = "java"
а также
avc: запрещен {open} для pid = 21319 comm = "java"
Фактически, вы увидите довольно много о выполнении, распределении памяти и ряде других политик, которые вы нарушаете, поскольку SELinux настроен на принудительное выполнение и остановку работы приложения.
С вашим журналом аудита запустите aud2allow, как показано ниже:
audit2allow -M myapppolicy <audit.log
Где myapppolicy - это имя политики, которую вы хотите создать, которая разрешит все, что было отклонено в журнале, а audit.log - это имя файла журнала, описанного выше. После выполнения этой команды должны быть созданы два файла. Первым является myapppolicy.te, который представляет собой текстовое представление политики на основе журнала аудита. Вы можете открыть это в текстовом редакторе и убедиться, что ваша политика не слишком широка. Второй файл - это файл myapppolicy.pp, который представляет собой скомпилированный пакет политик, который вы можете включить.
Запустите следующее, чтобы активировать пакет политики, а затем повторите попытку. У вас может быть несколько попыток, чтобы все работало так, как ожидалось, поскольку ваше Java-приложение может нарушить какую-то другую политику после того, как оно получит доступ к первой. Я выполняю эти шаги около пяти раз для серии Java-приложений, которые я запускал через скрипт через php.
semodule -i myapppolicy.pp