Administración de permisos para Tomcat en Linux

Written by

in

Contexto

Tomcat instalado manualmente en /opt/tomcat, con el servicio configurado para ejecutarse bajo un usuario y grupo dedicados:

[Service]
User=tomcat
Group=tomcat

Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"

El usuario tomcat debe tener control sobre los archivos necesarios para ejecutar la aplicación, generar logs y trabajar con directorios temporales.

1. Cómo agregar la «s» en permisos de directorios

Para obtener algo como drwxrwsr-x, hay que activar el bit setgid:

chmod g+s /opt/tomcat

Verificación:

ls -ld /opt/tomcat
drwxrwsr-x tomcat tomcat /opt/tomcat

¿Qué hace el bit setgid?

Cuando un directorio tiene setgid:

  • Los archivos creados dentro heredan el grupo del directorio padre.
  • Evita problemas cuando varios usuarios despliegan archivos.
  • Muy útil para directorios compartidos.
2775 drwxrwsr-x tomcat:tomcat /opt/tomcat

El 2 inicial representa el bit setgid.

2. Problema al reconectar una sesión Screen

Comando ejecutado:

screen -r 1560987.pts-0.servidor-app

Error:

There is a screen on:
    1560987.pts-0.servidor-app (Attached)

There is no screen to be resumed matching 1560987.pts-0.servidor-app.

Causa

La sesión ya está conectada desde otra terminal.

Solución

Forzar el detach y reconectar:

screen -d -r 1560987.pts-0.servidor-app

Ver sesiones activas:

screen -ls

3. Permisos recomendados para Tomcat

Propietario

chown -R tomcat:tomcat /opt/tomcat

Directorios

find /opt/tomcat -type d -exec chmod 750 {} \;

Resultado: drwxr-x---

Archivos

find /opt/tomcat -type f -exec chmod 640 {} \;

Resultado: -rw-r-----

Scripts ejecutables

find /opt/tomcat/bin -type f -name "*.sh" -exec chmod 750 {} \;

Resultado: -rwxr-x---

4. Permisos recomendados por directorio

Directorio raíz

chmod 2755 /opt/tomcat

Resultado: drwxr-sr-x. Mantiene el grupo heredado, permite navegación, evita escrituras accidentales.

Configuración

chmod -R 750 /opt/tomcat/conf

Protege archivos como server.xml, context.xml, tomcat-users.xml y logging.properties.

Logs

chmod -R 750 /opt/tomcat/logs

Tomcat necesita crear, modificar y rotar logs.

Directorios temporales

chmod -R 750 /opt/tomcat/temp
chmod -R 750 /opt/tomcat/work

Tomcat escribe ahí JSP compilados, archivos temporales y cachés.

Aplicaciones

chmod -R 750 /opt/tomcat/webapps

Tomcat debe leer los WAR, desplegar aplicaciones y puede generar archivos de trabajo.

5. Script para generar reporte de permisos

Guarda todos los permisos actuales en el home del usuario:

#!/bin/bash

OUTPUT="$HOME/permisos_tomcat.txt"

echo "Fecha de generación: $(date)" > "$OUTPUT"
echo "--------------------------------------------------" >> "$OUTPUT"

find /opt/tomcat -printf '%M %u %g %p\n' | while read perms user group path
do
    octal=$(stat -c "%a" "$path")
    echo "$octal $perms $user:$group $path" >> "$OUTPUT"
done

echo "Reporte guardado en: $OUTPUT"
chmod +x ver_permisos.sh
./ver_permisos.sh

6. Hallazgos típicos en un servidor real

Correcto

2775 drwxrwsr-x tomcat:tomcat /opt/tomcat
2775 drwxrwsr-x tomcat:tomcat /opt/tomcat/work

El uso de setgid es adecuado.

Problema 1: logs con 777

777 drwxrwxrwx tomcat:tomcat /opt/tomcat/logs

Riesgo: cualquier usuario del servidor puede crear archivos, modificar logs o borrar información.

Corrección:

chmod 750 /opt/tomcat/logs

Problema 2: catalina.out con propietario incorrecto

640 -rw-r----- otrouser:otrouser /opt/tomcat/logs/catalina.out

Riesgo: Tomcat puede fallar al escribir.

Corrección:

chown tomcat:tomcat /opt/tomcat/logs/catalina.out

Problema 3: aplicación desplegada por otro usuario

Es común encontrar una aplicación bajo /opt/tomcat/webapps/ con propietario distinto a tomcat, cuando otro usuario es quien la despliega. No es necesariamente incorrecto, pero Tomcat debe tener acceso de lectura y debe existir coherencia en los permisos.

Opción A (más simple):

chown -R tomcat:tomcat /opt/tomcat/webapps/nombre-app

Opción B (si otro usuario despliega): agregarlo al grupo tomcat:

usermod -aG tomcat usuario_deploy

Y mantener:

chmod -R 775 /opt/tomcat/webapps/nombre-app
chmod g+s /opt/tomcat/webapps/nombre-app

7. Configuración recomendada para producción

chown -R tomcat:tomcat /opt/tomcat

chmod 2755 /opt/tomcat

chmod -R 750 /opt/tomcat/conf
chmod -R 750 /opt/tomcat/logs
chmod -R 750 /opt/tomcat/temp
chmod -R 750 /opt/tomcat/work
chmod -R 750 /opt/tomcat/webapps

find /opt/tomcat/bin -name "*.sh" -exec chmod 750 {} \;

Regla práctica

  • Directorios: 750
  • Archivos: 640
  • Scripts: 750
  • Directorios compartidos: 2775
  • Nunca usar 777 salvo casos excepcionales y temporales.
  • Mantener propietario tomcat:tomcat en todo aquello que Tomcat necesite escribir.