Qual é a maneira segura de permitir que o Java 7 seja executado no SELinux

9

Versão curta: Qual é a maneira mais segura de permitir que o Java 7 seja executado no (com?) SELinux?

Versão longa:

Desculpe antecipadamente se eu usar terminologia incorreta. Na verdade, sou apenas um desenvolvedor Java com poucas habilidades em Linux.

Acabei de instalar o Java 7 no CentOS, versão 5.3 (Final), que aparentemente possui o Security Enhanced Linux. Depois que a instalação foi concluída (que eu "instalei" descompactando o arquivo tar.gz do Oracle /usr/java/jdk/jdk1.7.0_25), executei java -versione obtive este erro:

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`

Encontrei alguns artigos afirmando que isso pode ser devido ao SELinux e para tentar setenforce 0ver se o problema desaparece. Eu executei esse comando e o Java funcionou. Mas esses mesmos artigos dizem que deixar setenforce 0um host conectado à Internet é perigoso e meu host está conectado à Internet.

Existem outros artigos que sugerem essa próxima abordagem, mas também dizem que pode ser perigosa, por isso ainda não a tentei.

chcon -t textrel_shlib_t /usr/jre1.7.0_10/lib/i386/client/libjvm.so

... no comando acima, o caminho no final do comando é substituído pelo caminho do meu JDK.

O que não consigo encontrar é algo "oficial" (que pode significar muitas coisas) sobre como executar o Java 7 no (com?) SELinux com segurança. Alguém tem alguma informação para mim?

Editar: descobri um artigo que se referia à edição /etc/selinux/config. Eu configurei como mostrado na amostra abaixo. Isso permite que o Java seja executado, mas presumo que agora tenho algumas falhas de segurança.

# 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
John Fitzpatrick
fonte
A chconsolução parece razoável. A última solução não é muito diferente setenforce 0.
Jordanm
Você pode simplesmente instalá-lo no seu diretório pessoal?
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen: Bem, suponho que sim, mas ele funciona como um daemon, um servidor Tomcat para ser mais específico, e de alguma forma parece um pouco desleixado ter um servidor Tomcat em execução no meu diretório pessoal.
John Fitzpatrick
Basicamente, um truque do stackoverflow.com/q/14723474/560648 .
Corridas de leveza em órbita

Respostas:

2
  1. Limpe a instalação atual

  2. Faça o download do arquivo RPM ( http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html )

    yum -y localinstall /path/to/downloaded-java.rpm
    

o resto será cuidado.

user44441
fonte
Obrigado. Você pode elaborar sobre "Limpar a instalação atual"? Você quer dizer remover o que eu instalei?
John Fitzpatrick
Sim está certo! Remova sua instalação atual do Oracle Java. Por favor, siga "auto-extraível arquivo de desinstalação" java.com/en/download/help/linux_uninstall.xml#self
user44441
4
Por que essa é a solução?
Lightness Races em órbita
Se o @LightnessRacesinOrbit não souber por que essa é a solução adequada, leia o que é o SELinux . Basicamente o script RPM define as permissões adequadas do ACL etc
eyoung100
3
@ eyoung100: Não, meu argumento é que esta resposta não explica nada. Ele deve explicar por que remover e substituir a instalação deve resolver o problema, além de fornecer as etapas para isso. Também pergunto porque instalei a partir do RPM, mas ainda tenho o problema.
Lightness Races em órbita