端口 443 上的 Tomcat 9 僅與 root 一起工作,這可能是有害的

端口 443 上的 Tomcat 9 僅與 root 一起工作,這可能是有害的

經過大量閱讀 serverfault.com 文章後,我已經在連接埠 443 上成功設定了我的 tomcat 9。

但問題是 443 是一個特權端口,我在其中添加了 root 用戶在 tomcat.service 下面,但我如何避免這種情況,因為我只想向 tomcat 用戶授予僅一項服務的權限。我希望您能理解我的問題並給出最佳答案。

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

答案1

如果您已授予 CAP_NET_BIND_SERVICE 功能集,您可以以非 root 身分執行 Tomcat(或任何其他內容),並且仍綁定到系統連接埠。您可以透過新增在 systemd 單元中執行此操作AmbientCapabilities=在本[Service]節中:

AmbientCapabilities=CAP_NET_BIND_SERVICE

顯然您還需要刪除User=Group=

您還應該考慮使用NoNewPrivileges=true限制應用程式提升其權限。

相關內容