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

admin / Linux / / 335 字 · 约 1 分钟 / 567 次阅读 /

问题

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

解决方法

  • 为特定可执行文件赋予绑定特定端口的权限(执行一次永久生效)

    ```

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

    ```

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

    ```

    setcap -r /path/to/program

    ```

注意

  • 要使用 setcap,你的内核版本必须大于 2.6.24
  • 如果目标文件是一个脚本,这样做是不行的(执行 bind 和 listen 的实际上是脚本解释器)
  • 如果你为一个程序设置了这种权限,那么 LD_LIBRARY_PATH 对该程序将会失效,如果你的程序依赖它来找到所需要的库,那么你可以考虑使用端口转发了。
admin

admin

云原生架构 · 全栈开发

感谢阅读本文!记录系统架构思考与实战复盘。专注于 Python、Django、PostgreSQL 与云原生容器化工程实践。