logo NodeSeekbeta

【求助】nginx非root用户启动

apt 安装好nginx后如何非root用户启动?

useradd -M -s /sbin/nologin nginx

已经改了权限 chmod 755
所有有关nginx的文件也已经修改完用户组,

chown -R nginx /usr/sbin/nginx 
chown -R nginx /etc/nginx/

使用命令行启动

sudo -u nginx /usr/sbin/nginx -c /etc/nginx/nginx.conf

报错

nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:2
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

后来Google了一下,修改了 nginx.conf 文件 添加了 user nginx;
启动发现, master process进程是root用户启动,worker process是nginx用户启动
请问如何在不修改端口80的情况下,master 进程修改为nginx进程启动呢?

123
  • 在 UNIX 和类 UNIX 系统中,普通用户(非 root 用户)默认情况下无法绑定到 1024 以下的端口,而端口 80 正是这类端口之一。这就是为什么你作为 nginx 用户尝试启动 Nginx 时会遇到权限问题。

    当 Nginx 以 root 用户启动时,它的主进程(master process)将运行在 root 用户下,而工作进程(worker processes)可以配置为以非 root 用户(比如 nginx 用户)运行。这是一种常见的做法,可以提高安全性,因为工作进程处理大多数的请求和操作。

    要以非 root 用户运行 Nginx 的主进程,同时在不更改端口号的情况下运行,有几种方法:

    1.使用 setcap 命令给 Nginx 二进制文件赋予特权:

    • 你可以使用 setcap 命令来给予 nginx 二进制文件特权,使其能够作为非 root 用户绑定到低端口。这样,即使以 nginx 用户启动,它也能绑定到端口 80。例如:
      sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx
      
    • 这允许任何以 nginx 用户身份运行的进程绑定到任何端口,包括 80。

    2.使用端口重定向:

    • 另一种方法是使用端口重定向。你可以设置系统上的某种机制(如 iptables 或 firewalld),将所有到达端口 80 的流量重定向到一个高端口(比如 8080)。然后,你可以配置 Nginx 以 nginx 用户身份监听这个高端口。这样,外部流量仍然通过端口 80 访问服务,但实际上它被内部重定向到了一个高端口。

    3.使用认证绑定服务:

    • 在一些系统上,你可以配置服务以特定方式运行,允许它们以非 root 用户身份绑定到低端口。这通常涉及到系统级别的配置更改,并且具体方法取决于你所使用的系统。

    在大多数情况下,第一种方法(使用 setcap)是最直接和最常用的方法。不过,请注意,给予二进制文件额外的能力可能会带来安全风险。在进行这样的更改之前,请确保了解可能的安全影响,并在一个受管控和安全的环境中操作。

    —— 来自GPT4 xhj007

  • 顶一下

  • 无法 Linux下1024以下的端口必须有root权限才能监听

  • @Sh1zuku #2 那只能是master 进程root用户worker进程非root用户启动了 ac03

  • @Tiga #4 尝试过这个

    sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx
    
    

    方法,无效 ac04

  • 为啥不让 nginx 以 root 启动()

  • @Hantong #6 甲方运维部门要求 ac22

  • @MadisonHart #7 甲方要求啊那没事了() 我在想如果是安全着想不应该扔 Docker 隔离开么...

  • @Tiga #4
    +鸡腿

  • @MadisonHart #5 放弃80,用高位端口 xhj011

123

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72280位seeker

🎉欢迎新用户🎉