端口低于1024

免责声明 :我知道如何运行守护进程,通过使用privbind或某些iptables REDIRECT在端口<1024上侦听。 或者更一般地说,如何在通常不在那里运行的特权端口上提供守护进程。

这个问题本身就是一个元问题。

问题 :为什么地球上的端口<1024通常是为root用户保留的。 从实用的angular度来看,我希望能够告诉守护进程的守护进程,而不必关心root权限。 我越想越多地得出结论,特别是这种“安全”只是历史的膨胀。

sysctl -w net.ipv[46].conf.port.80=www-data (类似的东西,我希望这个想法是什么来的) sysctl -w net.ipv[46].conf.port.80=www-data将是我真正想要的。

这样就可以保持“当前的安全级别”,但仍然允许任意用户在较低的端口上收听。 Linuxfunction( CAP_NET_BIND_SERVICE )是朝着正确方向迈出的第一步 – 至less在我看来 – 但由于我已经习惯了端口<1024这个特殊的东西,所以我毫不犹豫地放弃了这个限制。 我看不出客观的原因。

有人请赐教:)

注意 :是的,我阅读了一些类似的标题,但是我对“你不应该这样做”并不满意。 不得不跳过箍来让apache监听端口80,它所做的一切都是以root启动,然后删除权限是不必要的(至less我认为)。 为什么我不能让它作为一个普通的用户运行,并做它的工作。 这样一个特权升级的bug甚至不允许root权限。 所有这些都是www-data特权(或任何发行版上的用户)

据我所知,这确实主要只是一个历史的惯例 ; 这个想法是,当访问1024以下的端口时,你可以确定你正在访问configuration在服务器上运行的服务器的pipe理员。 当服务器很less而且很庞大,而且你需要一个简单的方法来validation,或者至less通过这种基本的方式来判断一个服务的可靠性时,这就更加有意义了。

顺便说一句,你可能会发现, function做你想做的。 看到这个问题的更多信息的替代品,但这里的示例使用:

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