免责声明:我知道如何运行使用privbind或某些iptables REDIRECT监听端口< 1024的守护进程.或者更普遍地说,如何在通常不在那里运行的特权端口上提供守护进程. 问题本身就是一个元问题. 问题:为什么端口< 1024通常保留给root用户.从实用的角度来看,我很乐意能够告诉一个守护进程在哪个端口上,而不必关心root权限.我越是想到这一点,我就越能得出结论,特别是这种“安全”只是历史的臃肿. 一个sysctl沿着sysctl -w net.ipv [46] .conf.port.80 = www-data(类似的东西,我希望这个想法就是那个想法)将是我真正想要的. 这样就可以维持“当前安全级别”,但仍允许任意用户在较低端口上侦听.
Linux功能(CAP_NET_BIND_SERVICE)是朝着正确方向迈出的第一步 – 至少在我看来 – 但鉴于我习惯于端口< 1024是特殊的东西,我犹豫是否完全放弃限制.我只是看不出客观原因. 有人请赐教:) 注意:是的我读了一些类似的标题,但我对“你不应该这样做”不太满意.必须通过箍来获取apache才能在端口80上进行监听,其中所有操作都是以root身份启动,然后删除权限是不必要的(至少我认为).为什么我不能让它作为普通用户运行并且做它的工作.这样,权限提升错误甚至不允许root权限.所有这些都是www-data的特权(或者选择发行版的用户)
解决方法
据我所知,这确实只是一个
historical convention;我们的想法是,当访问1024以下的端口时,您可以确定您正在访问配置为在服务器上运行的服务器的管理员.当服务器很少而且很庞大并且您需要通过这种基本方式进行身份验证或至少判断服务可靠性的简单方法时,这更有意义.
顺便说一下,你可能会发现Capabilities做你想做的事.有关替代方案的更多信息,请参见this SO question,但以下是示例用法:
setcap 'cap_net_bind_service=+ep' /path/to/program