Caso alguém mais esteja procurando uma maneira de resolver isso sem desabilitar explicitamente o SELinux, a página wiki do centos. org me ajudou a entender o que estava acontecendo.
Por padrão, o contexto de segurança em que o Java está sendo executado quando chamado do Apache não permite coisas como ler um arquivo, alocar memória, acessar a rede, etc. A maneira mais fácil de resolver esses erros é usando os aplicativos semodule e audit2allow. . Essencialmente, verifique o log de auditoria do SELinux (pode ser /var/logs/audit/audit.log, mas usei / var / log / messages e extraí os erros avc). No log você deve ver coisas como
avc: denied { getattr } for pid=21415 comm="java"
e
avc: denied { open } for pid=21319 comm="java"
Na verdade, você verá muito sobre execução, alocação de memória e uma série de outras políticas que você está violando, já que o SELinux está configurado para impor e impedir a execução do aplicativo.
Com seu registro de auditoria, execute o audit2allow como abaixo:
audit2allow -M myapppolicy < audit.log
Onde myapppolicy é o nome da política que você deseja criar que permitirá todas as coisas que foram negadas no log e audit.log é o nome do arquivo de log descrito acima. Depois de executar este comando, dois arquivos devem ser criados. O primeiro é myapppolicy.te, que é uma representação de texto da política baseada no log de auditoria. Você pode abrir isso em um editor de texto e garantir que sua política não seja muito ampla. O segundo arquivo é o arquivo myapppolicy.pp, que é o pacote de políticas compilado que você pode ativar.
Execute o seguinte para ativar o pacote de políticas e repita o processo. Você pode ter várias tentativas para fazer tudo funcionar conforme o esperado, pois seu aplicativo Java pode violar alguma outra política depois que tiver acesso ao primeiro. Eu executo essas etapas cerca de cinco vezes para uma série de aplicativos Java que eu estava executando via script via php.
semodule -i myapppolicy.pp