Narciso, Hablando de Software

12.8.05

Fedora Core 4, SELinux vs. Java, Apache, Jboss

Recientemente he actualizado mi equipo, de Fedora Core 3 a Fedora Core 4. Ciertamente el salto ha sido mayor que en ediciones anteriores. El look and feel está más conseguido; detecta, monta y crea enlaces temporales en el escritorio para cualquier dispositivo removible (CD/DVD, USB disk, etc); tiene algo muy util pero que requiere una muy buena tarjeta gráfica: transparencia para ventanas en segundo plano. Esto último está muy bien porque elimina esa sensación de escritorio lleno. También tiene soporte para bluetooth integrado y otras cuantas cosas más que hacen ver como se acerca más a Window$.
Pero no todo iban a ser alegrías, de hecho me ha traído loco con ciertas cosas, casi todas de la mano de SELinux. La verdad es que me fijé que en versiones anteriores ya estaba SELinux, pero por defecto venía desactivado y nunca le presté mucha atención. Ahora en cambio, SELinux viene activado por defecto, lo cual implica una serie de restricciones importantes de seguridad para el sistema de ficheros y las comunicaciones. Que no es que estén mal, porque de hecho es buena la seguridad, pero hasta que no aprenda mejor como usarlo lo he desactivado.
Así que por si a alguno le pasan cosas como estas, ahí va la lista de "incidentes":
  1. Si traes una copia de seguridad de ficheros (hecha con tar, por ejemplo) desde un equipo con SELinux desactivado (como mi instalación con Fedora Core 3), al desempaquetarlo no tiene los descriptores de SELinux correctos, por lo que hay que reaplicarselos o bien hacer el "truco" (copiar a otro directorio, borrar y mover desde el directorio copiado, ya que al copiar son ficheros nuevos y se les dan los atributos correctos). Cosas que pueden ocurrir si no lo haces es que en el caso de que los ficheros sean los de una web, como era mi caso, Apache te dirá todo el rato que 403 Forbidden, por más que los permisos y grupos parezcan correctos.
  2. Si tienes un Tomcat/JBoss y quieres conectarlo con Apache usando mod_jk o mod_jk2, el mod_jk se quejará hagas lo que hagas diciendo que
    [jk_ajp_common.c (1477)]: Error connecting to tomcat. Tomcat is probably not started or is listening on the wrong port. worker=ajp13 failed errno = 13
    Para esto lo único que me ha funcionado es desactivar SELinux o ponerlo en modo permisivo, al menos de momento.
  3. Aunque lo cierto es que no uso mucho el Window$, lo tengo instalado para esas pocas ocasiones, total hay que aprovechar la licencia que venía con el portátil. Así que tengo el disco con una partición NTFS para Window$, una FAT32 para compartir datos entre ambos sistemas, y luego las particiones Linux. Pues bien, para ahorrar espacio, en lugar de tener una partición para swap en linux y el dichoso fichero de intercambio de Window$, lo que hago es poner el fichero de intercambio de en la partición FAT32 y desde linux usarlo como swap, así sólo pierdo 2Gb de disco en vez de 4Gb (tengo 1Gb de RAM). Con Fedora 3 no había problema alguno, pero con este me salta todo el rato con "permission denied" al hacer el swapon.
Bueno, la verdad es que tuve otro incidente más, este mucho más suerrealista y difícil de encontrar, gracias a Internet al final pude solucionarlo. Es una conjunción curiosa que ocurre con Fedora Core 4 y JDK 1.4. Fedora 4 usa IPv6 junto a IPv4, y resulta que JDK 1.4 por defecto usa IPv6 si está disponible, lo cual resulta en una imposibilidad casi total de conseguir conectar desde java a cualquier servicio de red. Para solucionarlo, pues si puedes usar JDK 1.5 mejor, pero si no, tienes que ejecutar el comando java pasando una constante que hace que use IPv4: -Djava.net.preferIPv4Stack=true.
Bueno, espero que si alguien topa con estos problemas esto le sirva de ayuda. Cuando aprenda a usar SELinux ya contaré la solución ¿o se anima alguien a iluminarnos?
Como última pincelada, os diré como deshabilitar SELinux: para hacerlo temporalmente podemos usar el comando setenforce permissive, siempre como usuario root; para hacerlo permanentemente debemos editar el fichero /etc/selinux/config y donde pone SELINUX=enforce ponemos SELINUX=permissive.
Gracias a Technorati he encontrado algo que puede servir, habrá que probarlo un poco más adelante.


Technorati: Fedora, SELinux, Java, JDK, JBoss, Tomcat, mod_jk