普通用户使用低于1024的端口

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

这将为你做所有的工作。