NGINX SSL:错误:0200100D:系统库:fopen:权限被拒绝

NGINX SSL:错误:0200100D:系统库:fopen:权限被拒绝

我已经在这个问题上困惑很久了,希望有人能给我提供一些建议。

尝试在网站上安装新的 SSL 证书。运行时nginx -t出现以下错误:

nginx: [emerg] BIO_new_file("/etc/nginx/ssl/mysite_com/mysite_com.crt") failed (SSL: error:0200100D:system library:fopen:Permission denied:fopen('/etc/nginx/ssl/mysite_com/mysite_com.crt','r') error:2006D002:BIO routines:BIO_new_file:system lib)
nginx: configuration file /etc/nginx/nginx.conf test failed

现在,我已将 mysite_com.crt 上的所有者/组设置为与之前配置中的文件相同,这些文件已通过 nginx 测试。我还将权限设置为相同。即使将文件权限临时设置为 777 进行测试也会出现相同的错误。我还尝试在分区的根目录中创建一个 /ssl/ 目录,权限为 777,但仍然出现相同的错误。我已将所有者设置http为此计算机上的 Web 服务器用户,但没有任何结果。

我完全不知所措。有什么建议吗?

答案1

只有一个建议,您没有足够的权限访问文件/etc/nginx/ssl/mysite_com/mysite_com.crt。当您nginx -t以您的帐户启动时,nginx 会以您的权限启动,但无法访问此文件。有两种方法可以解决此问题而无需更改任何内容。第一种方法 -nginx -t在 root 帐户下运行或通过 sudo 测试配置,第二种方法 -nginx -t在 http 帐户下运行以查看 nginx 在真实环境中的启动方式。但如果您想进行更改,您可以将您的用户添加到组 http 并尝试运行nginx -t

答案2

我花了几个小时才弄清楚,所以它可能对其他人有帮助:如果您看到error:0200100D:system library:fopen:Permission denied并且权限正确:请检查apparmor。消息在/var/log/kern.log

type=1400 audit(1629546067.301:14345): apparmor="DENIED" operation="open" profile="..." name="..." pid=704726 comm="..." requested_mask="r" denied_mask="r" fsuid=0 ouid=0

要修复正确的相应配置文件/etc/apparmor.d/

答案3

如果您已确认文件的chmodchown设置正确,则“fopen:权限被拒绝”错误的另一个可能原因与 SELinux 有关。当您最初将文件复制到目录(例如主文件夹)中,然后使用命令mv将文件重新定位到 NGINX 的最终位置时,可能会出现此问题。

SELinux 会记住文件的原始创建位置,并根据该信息应用权限,即使文件已被移动也是如此。要纠正此问题并使 SELinux 权限与当前文件位置和权限保持一致,您可以使用以下命令:

restorecon -v /path/to/your/file

将“/path/to/your/file”替换为您文件的实际路径。该restorecon命令将重置指定文件或目录的 SELinux 上下文,使其与当前位置一致。

通过运行此命令,您可以解决移动文件后可能仍然存在的潜在 SELinux 相关权限问题,确保 SELinux 权限与实际文件位置和权限相匹配。

相关内容