不幸的是,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。
- 使端口 80 可供 authbind 使用(您需要是 root 用户):
触摸/etc/authbind/byport/80; chmod 500 /etc/authbind/byport/80; chown tomcat9 /etc/authbind/byport/80
*将 tomcat9 视为 tomcat 的非 root 用户
- 创建文件 TOMCAT/bin/setenv.sh,内容如下:
CATALINA_OPTS="-Djava.net.preferIPv4Stack=true"
- “/usr/share/tomcat7/bin/startup.sh” 中的更改
旧:执行“$PRGDIR”/“$EXECUTABLE”启动“$@
新功能:exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"
- 修改 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