Mar*_* M. 5 networking linux permissions port root
免责声明:我知道如何运行通过使用privbind或某些iptablesREDIRECT侦听端口 <1024 的守护进程。或者更一般地说,如何使守护进程在通常不在那里运行的特权端口上可用。
这个问题本身是一个元问题。
问题:到底为什么端口 <1024 通常保留给 root 用户。从实用的角度来看,我希望能够告诉守护进程在哪个端口下进行监听,而不必关心 root 权限。我想得越多,我就越得出结论,特别是这种“安全”只是历史膨胀。
沿着sysctl -w net.ipv[46].conf.port.80=www-data(类似的东西,我希望这个想法是通过的)的 sysctl将是我真正想要的。
这样就可以保持“当前的安全级别”,但仍然允许任意用户侦听较低的端口。Linux 功能 ( CAP_NET_BIND_SERVICE) 是朝着正确方向迈出的第一步 - 至少在我看来 - 但考虑到我习惯于端口 <1024 是特殊的东西,我犹豫要完全放弃限制。我只是看不出为什么会出现这种情况的客观原因。
有人请赐教:)
注意:是的,我阅读了一些类似的标题,但我对“你不应该这样做”不太满意。必须跳过箍来让 apache 监听端口 80,它所做的只是启动root然后删除权限是不必要的(至少我认为是这样)。为什么我不能让它以普通用户身份运行并完成它的工作。这样,权限提升错误甚至不允许 root 权限。所有的特权www-data(或选择的发行版上的任何用户)
据我所知,这实际上主要只是一个历史惯例;这个想法是,当访问 1024 以下的端口时,您可以确保您正在访问服务器管理员配置为在服务器上运行的任何内容。当服务器数量少且庞大,并且您需要一种简单的方法来通过这种基本手段进行身份验证或至少判断服务的可靠性时,这更有意义。
顺便说一句,您可能会发现功能可以满足您的要求。有关替代方案的更多信息,请参阅此问题,但以下是示例使用:
setcap 'cap_net_bind_service=+ep' /path/to/program
Run Code Online (Sandbox Code Playgroud)