Mic*_*ael 2 filesystems permissions nginx
我index.php
在 Nginx 上运行的站点的文件中收到权限被拒绝错误。错误如下:
2018/01/19 05:50:01 [error] 9664#9664: *17 FastCGI sent in stderr: "PHP message:
PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
Unable to open primary script: /var/www/the-site/index.php (Permission denied)" while
reading response header from upstream, client: xxx.xxx.xxx.xxx,
server: www.the-site.com, request: "GET /index.php HTTP/1.1",
upstream: "fastcgi://unix:/var/run/php5-fpm-the-site.sock:", host: "www.the-site.com"
Run Code Online (Sandbox Code Playgroud)
该文件的权限是
-rw-rw-r--. 1 root root 418 Aug 2 17:49 index.php
Run Code Online (Sandbox Code Playgroud)
将文件权限更改为 777(临时)无济于事:
-rwxrwxrwx. 1 root root 418 Aug 2 17:49 index.php
Run Code Online (Sandbox Code Playgroud)
但是,如果我移动文件:
mv index.php index-old.php
Run Code Online (Sandbox Code Playgroud)
并将其替换为具有index.php
以下内容的新内容:
<?php phpinfo(); ?>
Run Code Online (Sandbox Code Playgroud)
那么这工作正常。用户和组是一样的,现在权限变弱了:
$ ls -l index*
-rwxrwxrwx. 1 root root 418 Aug 2 17:49 index-old.php
-rw-r--r--. 1 root root 20 Jan 19 05:56 index.php
Run Code Online (Sandbox Code Playgroud)
这是结果ls -Z
:
$ ls -Z index*
-rwxrwxrwx. root root unconfined_u:object_r:user_tmp_t:s0 index-old.php
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.php
Run Code Online (Sandbox Code Playgroud)
-rw-r--r--. 1 root root 20 Jan 19 05:56 index.php
^ this one
Run Code Online (Sandbox Code Playgroud)
权限位后面的点表示 SELinux 安全上下文。如果您运行的是 SELinux 系统,则需要匹配nginx
才能读取文件。您可以使用ls -Z
来查看安全上下文,并restorecon
恢复默认的安全上下文(我认为基于文件位置),或chcon
更改它。
像这样的东西
$ restorecon /var/www/the-site/index.php
Run Code Online (Sandbox Code Playgroud)
或者这是完整目录。
$ restorecon -r /var/www/the-site
Run Code Online (Sandbox Code Playgroud)
(我现在无法在任何地方进行测试,请检查语法)
参见,例如关于 SELinux 标签的Red Hat 文档。