failed (13: Permission denied) in /etc/nginx/nginx.conf:31

部署nginx权限问题解决

系统centos 7
使用yum install nginx安装,版本为1.24.0
/etc/nginx/nginx.conf文件 user已经切换为root,但是启动依然是提示权限问题

查了GPT

可能需要检查是否有 SELinux 或 AppArmor 策略阻止对这个文件的访问。 

果 SELinux(Security-Enhanced Linux)或 AppArmor 在您的系统中启用并且配置得比较严格,它们可能会阻止 Nginx 访问某些文件,即使文件权限和所有权看似正确。下面是如何检查和调整这些安全模块的方法,以确保 Nginx 能正常访问所需的文件。

解决办法

检查 SELinux 状态

1. 查看 SELinux 的状态: 运行以下命令来查看 SELinux 是否启用,并查看当前的模式:

sestatus

如果输出显示 SELinux 的状态为 enabled 且当前模式为 enforcing,则 SELinux 正在强制执行其策略

2. 查找相关的 SELinux 审计日志:
检查 SELinux 的审计日志,看看是否有关于 /etc/nginx/conf.d/nginx-prod.conf 的拒绝访问记录:

sudo ausearch -m avc -ts recent | grep nginx

如果找到与文件访问相关的 denied 类型消息,那么 SELinux 可能是问题的根源。
3.暂时更改 SELinux 模式(用于测试):
为了测试是否是 SELinux 导致的问题,您可以暂时将其设置为 permissive 模式,此模式下 SELinux 会记录违规行为但不会阻止:

sudo setenforce 0

然后尝试重新启动 Nginx,查看问题是否解决。如果问题解决,那么 SELinux 确实是原因。
4. 永久解决 SELinux 问题
如果确定 SELinux 是问题所在,您可以创建一个自定义的 SELinux 策略来允许此访问,或者调整文件的 SELinux 上下文

sudo chcon -t httpd_sys_content_t /etc/nginx/conf.d/nginx-prod.conf

这个命令会更改文件的 SELinux 类型以允许 web 服务器访问。

检查 AppArmor 状态

1.检查 AppArmor 的状态:
使用以下命令查看 AppArmor 的状态:

sudo aa-status

2.查看相关的 AppArmor 日志:
检查 /var/log/syslog 或 /var/log/kern.log 文件,寻找有关 Nginx 或文件访问的拒绝消息:

grep apparmor /var/log/syslog | grep nginx

3.调整或禁用特定的 AppArmor 策略:
如果 AppArmor 策略阻止了 Nginx 的操作,您可以编辑相应的 AppArmor 配置文件(通常在 /etc/apparmor.d/ 目录下),然后重新加载策略:

sudo service apparmor reload
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
07-22 650

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值