您的位置:首页 > 运维架构 > Linux

linux普通用户启动的进程如何绑定1024以下端口

2018-03-06 20:38 507 查看

问题

在linux中,1024以下端口被称为privileged port,即特权端口特权端口只能被由root启动的进程监听,该问题常出现在nginx非root启动的场景下(web需要80端口,而非root启动nginx后nginx无法bind 80端口)

解决方法

为特定可执行文件赋予绑定特权端口的权限(永久,需要setcap -r清除):

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


取消可执行文件可以绑定特权端口的权限

setcap -r /path/to/program


注意

要使用setcap,你的内核版本必须大于 2.6.24

如果目标文件是一个脚本,这样做是不行的(执行bind和listen的实际上是脚本解释器)

如果你为一个程序设置了这种权限,那么LD_LIBRARY_PATH对该程序将会失效,如果你的程序依赖它来找到所需要的库,那么你可以考虑使用端口转发了。

参考资料

Is there a way for non-root processes to bind to “privileged” ports on Linux?

Unset `setcap` additional capabilities on excutable
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: