1024 以下的端口

1024 以下的端口

免责声明:我知道如何通过使用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(或所选发行版上的用户)的特权

答案1

据我所知,这确实主要只是一个历史惯例;其理念是,当访问 1024 以下的端口时,您可以确保访问的是服务器管理员配置在服务器上运行的任何内容。当服务器数量少且规模大,您需要一种简单的方法进行身份验证,或者至少通过这种基本方法判断服务的可靠性时,这种方法更有意义。

顺便说一句,你可能会发现功能做你想做的事。参见这个问题有关替代方案的更多信息,但这里是示例用法:

setcap 'cap_net_bind_service=+ep' /path/to/program

相关内容