¿Cuál es la forma segura de permitir que Java 7 se ejecute en SELinux?

9

Versión corta: ¿Cuál es la forma más segura de permitir que Java 7 se ejecute en (con?) SELinux?

Versión larga:

Lo siento de antemano si uso una terminología incorrecta. Realmente solo soy un desarrollador de Java con un pequeño conocimiento de las habilidades de Linux.

Acabo de instalar Java 7 en CentOS versión 5.3 (Final) que aparentemente tiene Security Enhanced Linux. Una vez completada la instalación (que "instalé" descomprimiendo el archivo tar.gz de Oracle en /usr/java/jdk/jdk1.7.0_25), ejecuté java -versiony obtuve este error:

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`

Encontré algunos artículos que indican que esto puede deberse a SELinux e intentar setenforce 0ver si el problema desaparece. Ejecuté ese comando y Java funcionó. Pero estos mismos artículos dicen que salir setenforce 0de un host conectado a Internet es peligroso, y mi host está conectado a Internet.

Hay otros artículos que sugieren este próximo enfoque, pero también dicen que puede ser peligroso, por lo que aún no lo he probado.

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

... en el comando anterior, la ruta al final del comando se reemplaza con la ruta de mi JDK.

Lo que no puedo encontrar es algo "oficial" (que puede significar muchas cosas) sobre cómo ejecutar Java 7 en (¿con?) SELinux de forma segura. ¿Alguien tiene alguna información para mí?

Editar: descubrí un artículo que se refería a la edición /etc/selinux/config. He configurado como se muestra en la muestra a continuación. Esto permite que Java se ejecute, pero supongo que ahora tengo algunos agujeros de seguridad.

# 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
fuente
La chconsolución parece razonable. La última solución no es muy diferente a setenforce 0.
jordanm
¿Puedes instalarlo en tu directorio de inicio?
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen: Bueno, supongo que podría, pero se ejecuta como un demonio, un servidor Tomcat para ser más específico, y de alguna manera se siente un poco descuidado tener un servidor Tomcat ejecutándose desde mi directorio de inicio.
John Fitzpatrick
Básicamente una copia de stackoverflow.com/q/14723474/560648 .
Carreras de ligereza en órbita

Respuestas:

2
  1. Limpiar la instalación actual

  2. Descargue el archivo RPM ( http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html )

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

El resto será atendido.

usuario44441
fuente
Gracias. ¿Puedes dar más detalles sobre "Limpiar la instalación actual"? ¿Quieres decir eliminar lo que instalé?
John Fitzpatrick
Sí, eso es correcto! Elimine su instalación actual de Oracle Java. Siga "Desinstalación de archivos autoextraíbles" java.com/en/download/help/linux_uninstall.xml#self
user44441
44
¿Por qué es esta la solución?
Carreras de ligereza en órbita
Si @LightnessRacesinOrbit no sabe por qué esta es la solución adecuada, lea sobre qué es SELinux . Básicamente el guión RPM establece los permisos apropiados de ACL etc
eyoung100
3
@ eyoung100: No, mi punto es que esta respuesta no explica nada. Debería explicar por qué eliminar y reemplazar la instalación debería resolver el problema, así como dar los pasos para hacerlo. También pregunto porque instalé desde RPM pero aún tengo el problema.
Carreras de ligereza en órbita