猿问

是否有一种非根进程绑定到linux上的“特权”端口的方法?

是否有一种非根进程绑定到linux上的“特权”端口的方法?

在我的开发框中有这样的限制是非常烦人的,因为除了我之外,再也没有其他用户了。

我知道标准的解决办法但他们都没有做我想做的事

  1. 自绑定

    (Debian测试版本,1.0,只支持IPv 4)
  2. 使用iptables重定向目标将低端口重定向到高端口

    (iptable的IPv 6版本ip6table尚未实现“nat”表)
  3. Sudo(运行为root是我想要避免的)
  4. SELinux(或类似的)。(这只是我的开发框,我不想引入太多额外的复杂性。)

有没有简单的sysctl变量,允许非根进程绑定到Linux上的“特权”端口(端口小于1024),还是我运气不好?

编辑:在某些情况下,您可以使用能力做这件事。


开满天机
浏览 693回答 3
3回答

梵蒂冈之花

标准的方法是使它们成为“setuid”,以便它们作为root启动,然后在绑定到端口之后,但在开始接受与端口的连接之前,它们就会丢弃该根权限。您可以在Apache和INN的源代码中看到这方面的好例子。我听说莱特普是另一个很好的例子。另一个例子是后缀,它使用多个通过管道进行通信的守护进程,其中只有一两个守护进程(除了接受字节或发出字节之外,这些守护进程很少)作为根用户运行,其余的进程以较低的权限运行。

开心每一天1111

您可以进行端口重定向。对于运行在linux机器上的Silverlight策略服务器,我就是这样做的。iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 943 -j REDIRECT --to-port 1300
随时随地看视频慕课网APP
我要回答