如何让 Tomcat 9 与 authbind 一起绑定到端口 80?

如何让 Tomcat 9 与 authbind 一起绑定到端口 80?

不幸的是,Tomcat 对 authbind 的使用没有记录,因此在不以 root 身份运行时将 Tomcat 9 绑定到端口 80 是一项挑战。我在 Ubuntu 16.04 上尝试了以下操作:

1) 在 server.xml 中,将 <Connector> 中的属性端口更改为 80。

2)安装 authbind。

3)在 setenv.sh 中添加 AUTHBIND=yes

4)创建具有 777 权限和所有者 tomcat 的文件 /etc/authbind/byport/80。

如果我startup.sh以 root 身份运行,它工作正常。但是如果我以非特权用户“tomcat”身份执行此操作,脚本会显示“Tomcat 已启动”,没有任何错误消息。但浏览器会显示“无法连接”。

如果我运行authbind startup.sh,结果是一样的。启动脚本中缺少错误消息,这让我不知道问题的原因。

可能相关的信息:tomcat 是从 zip 文件安装的,而不是从 repo 安装的。

我是否还忽略了其他一些使此功能有效的技巧?官方文档中严重缺少这些内容。

答案1

从 zip 安装 Tomcat 是可以的。

我请求您按照以下步骤配置 authbind 并在 80 上运行 tomcat,我假设您已经安装了 authbind 和 tomcat 9。

  1. 使端口 80 可供 authbind 使用(您需要是 root 用户):

触摸/etc/authbind/byport/80; chmod 500 /etc/authbind/byport/80; chown tomcat9 /etc/authbind/byport/80

*将 tomcat9 视为 tomcat 的非 root 用户

  1. 创建文件 TOMCAT/bin/setenv.sh,内容如下:

CATALINA_OPTS="-Djava.net.preferIPv4Stack=true"

  1. “/usr/share/tomcat7/bin/startup.sh” 中的更改

旧:执行“$PRGDIR”/“$EXECUTABLE”启动“$@

新功能:exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"

  1. 修改 TOMCAT/conf/server.xml 文件,将端口从 8080 更改为 80

在 80 上运行 tomcat 的另一个解决方案是使用 iptables。

sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

如果您有任何疑问或问题需要我帮忙,请告诉我。

谢谢,Nishant

答案2

在我的 CENTOS 6 服务器和 TOMCAT 7 中,我必须:

  • 安装 authbind
 yum install authbind-2.1.1-0.x86_64.rpm 
  • 为用户 tomcat 创建文件 80
touch /etc/authbind/byport/80; chmod 500 /etc/authbind/byport/80; chown tomcat /etc/authbind/byport/80
  • 将端口 8080 更改为 80
vim /usr/share/tomcat/conf/server.xml
Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
  • 更改服务 tomcat 中的变量 TOMCAT_SCRIPT:
vim /etc/init.d/tomcat
TOMCAT_SCRIPT="${TOMCAT_SCRIPT:-/usr/local/bin/authbind -deep /usr/sbin/tomcat}"
  • 然后重新启动 tomcat
service tomcat restart

相关内容