Tomcat 9 en el puerto 443 funciona solo con root, lo que puede ser perjudicial

Tomcat 9 en el puerto 443 funciona solo con root, lo que puede ser perjudicial

Después de leer tantos artículos de serverfault.com, configuré exitosamente mi Tomcat 9 en el puerto 443.

Pero el problema es que 443 es un puerto privilegiado en el que agregué un usuario root en el siguiente tomcat.service, pero ¿cómo puedo evitar esto? Quiero darle permiso al usuario de Tomcat para un solo servicio. Espero que entiendas mi problema y te aconseje la mejor respuesta.

vim /etc/systemd/system/tomcat.service


[Unit]
Description=Tomcat 9 servlet container
After=network.target

[Service]
Type=forking



############## I added root user here ##########################
**User=root
Group=root**

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"

Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

Respuesta1

Puede ejecutar Tomcat (o cualquier cosa) como no root y aún vincularse a los puertos del sistema si ha otorgado el conjunto de capacidades CAP_NET_BIND_SERVICE. Puede hacer esto en su unidad systemd agregandoAmbientCapabilities=en la [Service]sección:

AmbientCapabilities=CAP_NET_BIND_SERVICE

Obviamente también necesitarás eliminar User=y Group=.

También deberías considerar el usoNoNewPrivileges=truepara impedir que la aplicación eleve sus privilegios.

información relacionada