Regresando un poco a las raices de como instalar este server creo que una pequeña y práctica nota para hacerlo es poner atención al usuario que utilizamos para ejecutar el contenedor web.
A veces no le damos mucha importancia a estos detalles porque generalmente siempre tenemos muchas actividades y lo que todo mundo quiere ver es la aplicación funcionando en el menor tiempo posible, y lo clasico es dejar la instalación con un usuario de administración o el root (en el peor de los casos).
Por ello decidí tomar unos minutos para escribir estas líneas con los comandos de como debemos agregar un usuario de servicio para nuestro contenedor para que sea ejecutado en el servidor.
#Create group and user | |
groupadd tomcat | |
useradd -r -m -d ${USR_TOMCAT_HOME_DIR} -s /bin/false tomcat -g tomcat | |
# In debian distro you can use this alternative | |
useradd -r -m -d ${USR_TOMCAT_HOME_DIR} -s /sbin/nologin tomcat -g tomcat | |
#set user password | |
passwd tomcat | |
#Change folder privilegies | |
chown -R tomcat.tomcat /path/to/tomcat | |
chmod 775 /path/to/tomcat/webapps | |
#start or stop server | |
sudo -u tomcat /opt/tomcat/bin/startup.sh | |
sudo -u tomcat /opt/tomcat/bin/shutdown.sh | |
#if you have normal or admin user you need these commands: | |
su - tomcat -c /opt/tomcat/bin/startup.sh | |
su - tomcat -c /opt/tomcat/bin/shutdown.sh |
Con esto podemos crear un usuario que no tiene privilegios para firmarse en el sistema sin embargo, puede ejecutar comandos através de la instrucción sudo.
Esto es una muy buena practica de seguridad para evitar que se firmen en el sistema con los usuarios de servicio, sin embargo ¿que pasa si un día necesitas entrar con este usuario?, fácil podemos cambiarle el shell con la iinstrucción:
# Enable login sudo usermod -s /bin/sh tomcat # Disable login sudo usermod -s /bin/false tomcat
Ah y algo muy importante que puede pasar en algunas distribuciones es que al iniciar el contenedor no puede enlazar el puerto 80 con un usuario diferente al root por lo que debes redireccionar los puertos con el comando iptables:
When running Tomcat as a user other than the root user, you will not be able to bind to port 80, which is where Tomcat listens for HTTP requests
Aunque vaya esto último solo es para ambientes de desarrollo, en producción ¡nunca! debes hacer esto, en su lugar debes colocar un servidor proxy que redireccione las peticiones al tomcat.
Bueno y el último paso es generar un script para que se ejecute cada vez que se inicie o detenga el sistema operativo:
Generas un archivo «vi /etc/init.d/tomcat» con el siguiente contenido:
#!/bin/bash | |
### BEGIN INIT INFO | |
# Provides: tomcat7 | |
# Required-Start: $network | |
# Required-Stop: $network | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: Start/Stop Tomcat server | |
### END INIT INFO | |
TOMCAT_HOME=/opt/apache-tomcat-7.0.57 | |
PATH=/sbin:/bin:/usr/sbin:/usr/bin | |
start() { | |
sudo -u tomcat $TOMCAT_HOME/bin/startup.sh | |
} | |
stop() { | |
sudo -u tomcat $TOMCAT_HOME/bin/shutdown.sh | |
} | |
case $1 in | |
start|stop) $1;; | |
restart) stop; start;; | |
*) echo "Run as $0 <start|stop|restart>"; exit 1;; | |
esac |
Debes cambiar la variable TOMCAT_HOME con la ruta donde se encuentra ubicado tu servidor.
# Add permisions chmod 755 /etc/init.d/tomcat # Add script to automatic update-rc.d tomcat defaults
Referencias
- http://www.mulesoft.com/tcat/tomcat-linux
- http://www.cyberciti.biz/faq/unix-create-user-account/
- http://linux-sxs.org/internet_serving/c140.html
- http://superuser.com/questions/670848/how-to-install-tomcat-server-using-no-login-shell
- https://www.owasp.org/index.php/Securing_tomcat
- https://www.digitalocean.com/community/tutorials/how-to-restrict-log-in-capabilities-of-users-on-ubuntu
- http://www.cyberciti.biz/tips/linux-prevent-normal-users-from-logging-into-system.html
- http://serverfault.com/questions/519215/what-is-the-difference-between-sbin-nologin-and-bin-false