在某些情况下,Web 应用程序将通过反向代理(例如带有 mod_proxy 的 Apache)与客户端通信,其中反向代理正在监听端口 80,而 Web 应用程序正在监听大于 1023 的端口(因为 root 拥有低于 1024 的端口)。
正如一些答案中提到的那样这个问题,如果没有其他进程开始侦听高端口,则任何进程都可以开始侦听该端口。如果 Web 应用程序尚未开始侦听该端口,而其他进程(无论是意外还是恶意)先开始侦听该端口,则可能会出现问题。
是否有某种方法可以让用户或组拥有一个端口,以便只有 Web 应用程序的所有者可以启动侦听该端口的进程?
答案1
或者您只需在保留端口范围内分配一个固定端口并授予您的应用程序绑定到该端口的权利。
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/application
答案2
如果您有 Selinux(不确定是否有 AppArmor),您很可能可以实现这一点:
确保只有该特定应用程序的上下文可以监听该端口,然后确保只有您想要的用户才能启动该应用程序。