为什么Linux不允许用户级网络端口权限?

B T*_*B T 8 networking permissions

每隔一段时间,我就会搜索如何在 Linux 中为网络端口访问设置用户级权限,结果相当枯燥。例如,如果你有一台机器运行一个监听端口 5080 的关键进程,我觉得应该有一种方法只允许一组特定的可信用户访问该端口——就像任何其他合理的权限进程一样完成,如文件系统权限。

但似乎所有用户都可以使用高端口,而低端口仅对 root 可用,只有像 authbind 和使用 iptables 转发这样的粗略黑客才能允许其他用户使用低端口。这似乎是一个非常奇怪的情况,所以我想知道,为什么它是这样设计的,为什么人们觉得没有必要改变这种情况?

Kaz*_*Kaz 4

Linux 支持网络命名空间。您可以使不同的进程看到不同的网络接口集。这是一个广泛的话题。

如果您想要一个仅特定用户可以在计算机内访问的通信端口,您可以使用传统的 Unix 套接字,它在文件系统空间中有一个具有权限的名称。Linux 尊重 AF_UNIX 套接字上的读/写权限。

如果一台机器在端口 5080 上监听来自其他机器的外部 TCP 或 UDP 请求,那么我们就不能真正谈论用户权限了。您必须在超过 5080 的协议中构建安全性:身份验证、加密、完整性/防欺骗/抗拒绝服务。