我知道低于 1024 的端口受到保护,没有足够权限的用户无法打开。
然而,我想知道像bind 或apache 这样的守护进程是如何做到这一点的,尽管它们不以root 身份运行。
所以,我的问题是:bind 或 apache 等服务器如何设法打开 80、443 等端口?
答案1
Apache 是支持删除权限的守护进程的一个示例。阿帕奇是以 root 身份启动,并以 root 身份绑定到端口。绑定后,它使用setuid
和setgid
系统调用来降低权限。它更改为的用户由其“用户”和“组”配置选项决定。
答案2
任何应用程序都可以使用一组 root 功能setcap
。
如果其中之一打开低于 1024 的端口。
您可以以非 root 用户身份运行该应用程序,如果设置了您需要的功能,就不会有问题。
了解可能的功能:http://linux.die.net/man/7/capability。
例如,以非 root 身份运行 apache-tomcat:
setcap <your needed caps> <java_home>/<java_executable>
要查看为可执行文件设置的上限:
getcap /path/to/the/executable