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=true
para impedir que la aplicación eleve sus privilegios.