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:
Verificación:
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:
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
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.