Linux上有没有办法让CentOS用户使用1024以下的端口? (在该端口上打开侦听TCP套接字)
目前我知道只有root用户有权使用这些端口。
不在CentOS 3/4/5(缺less文件系统function):
您可以将CAP_NET_BIND_SERVICEfunction设置为需要打开此端口的程序。 Root将在可执行文件上设置能力,然后任何用户都可以运行该可执行文件,它将能够使用端口<1024。
要设置可执行文件的function:
setcap cap_net_bind_service=+ep /path/to/program
IIRC这是不可能的,或者如果它不是出于安全原因而被推荐的话。
但是,如果您希望用户能够在特定端口上侦听,则可以始终使用TCP转发器(如rinetd
或iptables规则)将该端口的连接redirect到可以侦听的端口,并让它们将服务设置为侦听该较高端口。
例如线路
aa.bb.cc.dd 80 127.0.0.1 8000
在rinetd的configuration中,将地址为aa.bb.cc.dd
端口80的连接转发到非特权用户可以监听的localhost端口8000。 一个相当的iptables规则会是这样的
/sbin/iptables -t nat -A PREROUTING -p tcp -d aa.bb.cc.dd --dport 80 -j DNAT --to 127.0.0.1:8000
无论哪种方式,都可以让你在任何端口上监听更细致的控制。
iptables方法的优点是,侦听应用程序将看到调用客户端的IP地址(使用rinetd方法,它将看到来自本地主机的所有连接)。 iptables方法也允许UDP和TCP。
您可以创build一个运行SUID并在打开端口后删除权限的包装器。
authbind岩石。
function是伟大的东西,但它需要正确configuration某些内核版本。 有些程序,比如sun java,不具备function。 authbind适用于所有的linux版本。
然而,authbind只支持IPv4。
这是完全没有背景的,还是我错过了根本的东西? http://smarden.org/runit/chpst.8.html&http://cr.yp.to/daemontools/setuidgid.html
http://isptools.sourceforge.net/suid-wrap.html
这将为你做所有的工作。