Tomcat 9 auf Port 443 funktioniert nur mit Root, was schädlich sein kann

Tomcat 9 auf Port 443 funktioniert nur mit Root, was schädlich sein kann

Nachdem ich so viele Artikel auf serverfault.com gelesen habe, habe ich meinen Tomcat 9 erfolgreich auf Port 443 konfiguriert.

Das Problem ist jedoch, dass 443 ein privilegierter Port ist, zu dem ich den Root-Benutzer unter tomcat.service hinzugefügt habe. Wie kann ich das jedoch vermeiden, da ich dem Tomcat-Benutzer nur für einen einzigen Dienst die Berechtigung erteilen möchte? Ich hoffe, Sie verstehen mein Problem und geben Ihnen die beste Antwort.

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

Antwort1

Sie können Tomcat (oder irgendetwas anderes) als Nicht-Root ausführen und trotzdem an Systemports binden, wenn Sie den Capability-Satz CAP_NET_BIND_SERVICE erteilt haben. Sie können dies in Ihrer systemd-Einheit tun, indem Sie hinzufügenAmbientCapabilities=im [Service]Bereich:

AmbientCapabilities=CAP_NET_BIND_SERVICE

Natürlich müssen Sie auch User=und entfernen Group=.

Sie sollten auch die Verwendung vonNoNewPrivileges=trueum zu verhindern, dass die App ihre Berechtigungen erhöht.

verwandte Informationen