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/tomcatVerificación:
ls -ld /opt/tomcatdrwxrwsr-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/tomcatEl 2 inicial representa el bit setgid.
2. Problema al reconectar una sesión Screen
Comando ejecutado:
screen -r 1560987.pts-0.servidor-appError:
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-appVer sesiones activas:
screen -ls3. Permisos recomendados para Tomcat
Propietario
chown -R tomcat:tomcat /opt/tomcatDirectorios
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/tomcatResultado: drwxr-sr-x. Mantiene el grupo heredado, permite navegación, evita escrituras accidentales.
Configuración
chmod -R 750 /opt/tomcat/confProtege archivos como server.xml, context.xml, tomcat-users.xml y logging.properties.
Logs
chmod -R 750 /opt/tomcat/logsTomcat necesita crear, modificar y rotar logs.
Directorios temporales
chmod -R 750 /opt/tomcat/temp
chmod -R 750 /opt/tomcat/workTomcat escribe ahí JSP compilados, archivos temporales y cachés.
Aplicaciones
chmod -R 750 /opt/tomcat/webappsTomcat 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.sh6. Hallazgos típicos en un servidor real
Correcto
2775 drwxrwsr-x tomcat:tomcat /opt/tomcat
2775 drwxrwsr-x tomcat:tomcat /opt/tomcat/workEl uso de setgid es adecuado.
Problema 1: logs con 777
777 drwxrwxrwx tomcat:tomcat /opt/tomcat/logsRiesgo: cualquier usuario del servidor puede crear archivos, modificar logs o borrar información.
Corrección:
chmod 750 /opt/tomcat/logsProblema 2: catalina.out con propietario incorrecto
640 -rw-r----- otrouser:otrouser /opt/tomcat/logs/catalina.outRiesgo: Tomcat puede fallar al escribir.
Corrección:
chown tomcat:tomcat /opt/tomcat/logs/catalina.outProblema 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-appOpción B (si otro usuario despliega): agregarlo al grupo tomcat:
usermod -aG tomcat usuario_deployY mantener:
chmod -R 775 /opt/tomcat/webapps/nombre-app
chmod g+s /opt/tomcat/webapps/nombre-app7. 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
777salvo casos excepcionales y temporales. - Mantener propietario
tomcat:tomcaten todo aquello que Tomcat necesite escribir.