Nginx和PHP:没有写入权限

3

我有一个关于在Nginx上运行的PHP应用程序(Baikal)的问题。该应用程序的一个配置文件已经没有写入权限了。该问题可能是由于升级PHP之后引起的。

以下是我的设置的一些信息:

  • 操作系统: Arch Linux
  • Nginx版本: 1.16.1
  • Nginx用户: http
  • PHP版本: 7.4.1
  • 应用程序: Baikal 0.4.6
  • Nginx配置:
    server {
       listen              443 ssl http2;
       listen              [::]:443 ssl http2;
       server_name         –––––––––;
       root                /usr/share/webapps/baikal/html;
       index               index.php;
       include             include/ssl.conf;
       include             include/letsencrypt.conf;

       rewrite ^/.well-known/caldav /dav.php redirect;
       rewrite ^/.well-known/carddav /dav.php redirect;
       charset utf-8;

       location ~ /(\.ht|Core|Specific) {
          deny all;
          return 404;
       }

       location ~ ^(.+\.php)(.*)$ {
          try_files $fastcgi_script_name =404;
          include        /etc/nginx/fastcgi_params;
          fastcgi_split_path_info  ^(.+\.php)(.*)$;
          fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
          fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
          fastcgi_param  PATH_INFO        $fastcgi_path_info;
       }
    }

应用程序报告文件 Specific/config.php 不可写。完整路径为/usr/share/webapps/baikal/Specific/config.php
我已将该文件的权限设置为777进行测试; 但是没有成功。我测试了PHP函数 is_writable 。对于该文件,它返回 false fopen显示文件系统为只读(实际上并非如此)。

我已经阅读了很多关于SELinux防止写操作的文章,但正如我所说,我使用的是没有SELinux的Arch Linux。
我认为这与PHP不被允许写入Nginx中设置的根目录之外的地方有关,但我无法解决它。

有人可以提供帮助吗?
非常感谢


如何从“location {deny all}”块中删除Specific文件夹? - mitkosoft
据我所知,配置的位置是用于路由外部访问而非内部访问。我已经进行了测试,但这并没有解决问题。 - darefilz
1个回答

12

好的,做到了。噼哒。

自 PHP 7.4 起,PHP-FPM 通过将 /usr/boot/etc 目录设置为只读来保护系统。

这篇帖子和这个问题让我想到了一个解决方案,就是将应用程序文件夹移到 /usr 之外。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接