Tomcat 9 在端口 443 上仅使用 root 运行,这可能会造成危害

Tomcat 9 在端口 443 上仅使用 root 运行,这可能会造成危害

在阅读了大量 serverfault.com 文章后,我已成功在端口 443 上配置了我的 tomcat 9。

但问题是 443 是一个特权端口,我在 tomcat.service 下方添加了 root 用户,但我如何避免这种情况,因为我想只为 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限制应用程序提升其权限。

相关内容