nginx 权限拒绝为 ssl 配置证书文件

num*_*s1x 33 ssl nginx ssl-certificate

我正在我的 Fedora 服务器上安装一个 nginx ssl 代理。

我在 /etc/nginx.conf 下创建了一个证书和密钥对。它们看起来像这样:

ls -l /etc/nginx/
total 84
...
-rw-r--r--. 1 root root 1346 Sep 20 12:11 demo.crt
-rw-r--r--. 1 root root 1679 Sep 20 12:11 demo.key

...
Run Code Online (Sandbox Code Playgroud)

作为 root,我正在尝试启动 nginx 服务:

systemctl start nginx.service
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

nginx[30854]: nginx: [emerg]
SSL_CTX_use_certificate_chain_file("/etc/nginx/demo.crt") failed (SSL: error:0200100D:system     library:fopen:Permission denied...e:system lib)
nginx[30854]: nginx: configuration file /etc/nginx/nginx.conf test failed
Run Code Online (Sandbox Code Playgroud)

这些文件的权限有问题吗?

daw*_*wud 49

您可能将 SELinux 置于强制模式(Fedora 的默认设置):

sestatus -v
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,请检查审计日志,您应该会发现访问错误:

ausearch -m avc -ts today | audit2allow
Run Code Online (Sandbox Code Playgroud)

您也可能移动了文件而不是复制它,因此文件的安全上下文可能是错误的。

ls -lrtZ /etc/nginx/demo.* 
Run Code Online (Sandbox Code Playgroud)

并在需要时更正:

restorecon -v -R /etc/nginx
Run Code Online (Sandbox Code Playgroud)

  • 哇谢谢!有一个不仅仅是“禁用 SELinux”的答案是很好的。 (4认同)

小智 10

我猜是 SELinux 拒绝了许可。检查他们的 SELinux 上下文。他们的应该是httpd_config_t。如果没有,运行

restorecon /etc/nginx/demo.*
Run Code Online (Sandbox Code Playgroud)

或者

chcon httpd_config_t /etc/nginx/demo.*
Run Code Online (Sandbox Code Playgroud)

作为根。

你可以查看 /var/log/audit/ 下的日志,看看是否是 SELinux 拒绝了权限。你也可以运行

setenforce 0
Run Code Online (Sandbox Code Playgroud)

将 SELinux 设置为许可模式。这样,SELinux 仍会生成 AVC 消息(在 /var/log/audit/ 中)但允许访问。