所以我有一个 RedHat 5 机器,我想运行我编写的实现 SLP 的应用程序。SLP 使用端口 427 来应答服务查询。我的理解是,1024 以下的端口是“特权”端口,因此非 root 用户无法绑定到该端口。我无法以 root 身份运行此应用程序,因为它是通过 tomcat 启动的。
我非常喜欢的一个创造性解决方案是简单地编写一个 iptables 规则来将特权端口路由到非特权端口。在我的概念验证测试中,这种方法效果很好。不幸的是,如果我的应用程序在安装时不需要摆弄 iptables,那么权力人士会非常(并且可以理解)希望这样做。
所以我听到一个传言,但找不到任何证据来证实,有某种命令或参数可以设置成我想要的任何端口都是非特权的。这是真的吗?如果是这样,怎么做的?谢谢!
更新
于是我在 Stack Overflow 上看到了这篇文章:https://stackoverflow.com/questions/413807/是否有办法让非根进程绑定到特权端口 1024-on-l 看起来他使用了一种称为功能的东西。问题在于它似乎需要内核 2.6.24+,但我只能访问内核 2.6.18。有没有办法在 2.6.18 机器上设置功能?
答案1
您本质上问的是同一件事:
https://stackoverflow.com/questions/5544713/starting-tomcat-on-port-80-on-centos-release-5-5-final
因此,使用 jsvc。
答案2
一种临时方法是监听非特权端口,然后使用 xinetd 从特权端口进行重定向。
$ grep bandaid /etc/services
bandaid 190/tcp # bandaid
$ cat /etc/xinetd.d/bandaid
service bandaid
{
disable = no
bind = 10.0.0.45
socket_type = stream
protocol = tcp
wait = no
user = nobody
redirect = localhost 8888
}
在我看来这是一个糟糕的想法,但有时你没有其他选择。