![像apache这样的守护进程或者绑定1024以下的端口是如何打开的?](https://linux22.com/image/61633/%E5%83%8Fapache%E8%BF%99%E6%A0%B7%E7%9A%84%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E6%88%96%E8%80%85%E7%BB%91%E5%AE%9A1024%E4%BB%A5%E4%B8%8B%E7%9A%84%E7%AB%AF%E5%8F%A3%E6%98%AF%E5%A6%82%E4%BD%95%E6%89%93%E5%BC%80%E7%9A%84%EF%BC%9F.png)
我知道低于 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