出于我无法理解的原因,GlassFish 拒绝与iptables
. 也就是说,在所有正确的重定向规则就绪的情况下,它不会收到任何重定向的流量。所以我在计划 B,即将 GlassFish 绑定到端口 80 和 443 而不是 8080 和 8181。
出于安全原因,我不想以 root 身份运行 GlassFish,因此我需要授予运行它的用户帐户足够的权限来绑定到端口 80 和 443。从安全的角度来看,它没有风险,因为 iptables 是阻塞所有其他端口。
Centos 6.4中,执行什么命令可以让指定的非root用户直接监听小于1024的端口?
请不要建议涉及从随机位置下载(和编译)东西的极端解决方案。我需要可复制的东西,所以如果需要引入任何依赖项,它们需要来自 Centos 的包存储库。
不,你不想这样做。
相反,选择您最喜欢的 Web 服务器(我更喜欢 nginx),并使用它来将请求从端口 80 代理到 glassfish 正在侦听的任何地方。
执行此操作的配置位非常简单,您最终会得到一个更安全、更易于管理的系统。
authbind 工具将起作用。只需安装/解压它并将其添加到您的命令中。对于我的安装,我编辑了 /usr/share/java-utils/java-functions 并用它调用了 $JAVACMD 并且它没有问题。
您应该能够使用功能 (7) 来完成此操作。参见例如https://stackoverflow.com/questions/413807/is-there-a-way-for-non-root-processes-to-bind-to-privileged-ports-1024-on-l/414258#414258很多信息。
我不是特别熟悉 GlassFish,所以我对这种方法的保留意见是您可能需要将 CAP_NET_BIND_SERVICE 能力授予整个 Java,这当然是有风险的。专门为此目的制作 Java 二进制文件的副本是一个(也是不完美的)选项。