31

我需要帮助找出此权限被拒绝错误的根本原因。nginx需要什么权限?为什么这么复杂?

4

6 回答 6

25

套接字 API bind() 到小于 1024 的端口,例如标题中提到的 80,需要 root 访问权限。

这里是“绑定到小于 1024 的端口,无需 root 访问

另一种更简单的方法是以 root 身份运行 nginx。

于 2013-08-28T06:22:19.197 回答
13

如果您使用具有 root 权限的大于 1024 的端口,但仍然遇到此问题,这可能是由以下原因引起的SELinux

在 segange 端口中检查此端口,例如 8024

sudo semanage port -l | grep http_port_t

如果端口列表中不存在 8024,则将其添加到 segange 端口

sudo semanage port -a -t http_port_t  -p tcp 8024

###2017.12.22更新

有时您的 SELinux 是disabled,您需要先安装enforcing它。通过以下方式检查 SELinux 的状态

$ sestatus

更多步骤可以阅读这篇精彩文章:https ://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-1-basic-concepts

于 2016-10-11T06:44:25.797 回答
2

如果在运行“nginx -t”后看到此消息,则您没有以 root 身份运行“sudo nginx -t”的权限

于 2015-10-16T19:44:55.727 回答
2

nginx需要root权限。只需使用

须藤 nginx

下一步以及您的密码

于 2017-11-15T06:28:58.770 回答
0

最好的解决方案是:

1)将用户添加到sudoers(我的用户是prod)

usermod -aG sudo prod

2)在马戏团(进程管理器)中,在 nginx 可执行文件之前附加 sudo,我的看起来像这样:

[watcher:nginx]
cmd = sudo /usr/sbin/nginx
args = -c /home/t/Projects/x_b_11/etc/nginx.conf -p /home/t/Projects/x_b_11

3)最后将行添加到文件 /etc/sudoers (我的用户是产品)。这一行避免了错误(sudo:没有 tty 存在并且没有指定 askpass 程序)。可能需要重新启动会话(重新启动)。享受。

prod ALL = NOPASSWD: /usr/sbin/nginx
于 2018-03-29T17:42:30.407 回答
0

Ubuntu 使用 AppArmor 而不是 SELinux。指向 SELinux 的响应可能与 OP 无关。

对于谷歌搜索的其他人:我也在支持 SELinux 的 CentOS 7 机器上遇到了这个问题。nginx 不会绑定端口 80 并给了我错误13:尽管已经运行 以允许服务将端口绑定到非 root 用户,但权限被拒绝。setcap 'CAP_NET_BIND_SERVICE=+ep' /usr/sbin/nginx

暂时将 SELinux 设置为 Permissive ( sudo setenforce Permissive) 允许 nginx 启动。然后我跑了audit2allow -a,这给了我

#============= httpd_t ==============

#!!!! This avc can be allowed using the boolean 'httpd_can_network_connect'
allow httpd_t ntop_port_t:tcp_socket name_connect;

这意味着解决方案也要运行:

sudo setsebool -P httpd_can_network_connect on

之后,您可以将 SELinux 设置回 Enforcing ( sudo setenforce Enforcing) 并重新启动一切以进行验证。

于 2021-10-13T04:55:40.290 回答