【问题标题】:CakePHP permissions errorCakePHP 权限错误
【发布时间】:2016-09-09 07:04:56
【问题描述】:

这可能看起来像重复,但我已经阅读了类似的问题并尝试了他们的建议,但没有奏效。

当我导航到我的 CakePHP 网站时,我收到以下错误

警告 (2): mkdir(): Permission denied [CORE/src/Cache/Engine/FileEngine.php,第 417 行]

警告:file_put_contents(/var/www/html/my-application/logs/error.log) [function.file-put-contents]:无法打开流:权限被拒绝 在 /var/www/html/my-application/vendor/cakephp/cakephp/src/Log/Engine/FileLog.php 在第 134 行

警告 (512):/var/www/html/my-application/tmp/cache/persistent/ 不是 可写 [CORE/src/Cache/Engine/FileEngine.php,第 425 行]

警告(2): file_put_contents(/var/www/html/my-application/logs/error.log) [function.file-put-contents]:无法打开流:权限被拒绝 [CORE/src/Log/Engine/FileLog.php,第 134 行]

警告:file_put_contents(/var/www/html/my-application/logs/error.log) [function.file-put-contents]:无法打开流:权限被拒绝 在 /var/www/html/my-application/vendor/cakephp/cakephp/src/Log/Engine/FileLog.php 在第 134 行

问题是我确信 PHP 可以访问所有必要的文件。

PHP 以用户 apache 的身份在 apache 组中运行。证据:

[ec2-user@cv-stg01 my-application]$ ps -efl | grep apache
5 S apache   21863 21861  0  80   0 - 124037 SYSC_s 03:06 ?       00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache   21864 21861  0  80   0 - 123971 SYSC_s 03:06 ?       00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache   21865 21861  0  80   0 - 123485 SYSC_s 03:06 ?       00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache   21867 21861  0  80   0 - 124037 SYSC_s 03:06 ?       00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache   21868 21861  0  80   0 - 123485 SYSC_s 03:06 ?       00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache   21869 21861  0  80   0 - 123485 SYSC_s 03:06 ?       00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache   21870 21861  0  80   0 - 124037 SYSC_s 03:06 ?       00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache   21881 21861  0  80   0 - 123485 SYSC_s 03:09 ?       00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache   21882 21861  0  80   0 - 123485 SYSC_s 03:09 ?       00:00:00 /usr/sbin/httpd -DFOREGROUND
5 S apache   21883 21861  0  80   0 - 125444 ep_pol 03:09 ?       00:00:00 /usr/sbin/httpd -DFOREGROUND
0 S ec2-user 21934 21785  0  80   0 - 28161 pipe_w 03:20 pts/0    00:00:00 grep --color=auto apache

相关目录归 apache:apache 所有,并且权限设置为 777:

[ec2-user@cv-stg01 my-application]$ ls -l
total 132
drwxrwxr-x.  2 apache apache    47 May 12 21:16 bin
-rw-rw-r--.  1 apache apache  1128 May 12 21:16 composer.json
-rw-rw-r--.  1 apache apache 93002 May 12 21:16 composer.lock
drwxrwxr-x.  3 apache apache  4096 May 12 21:19 config
-rw-rw-r--.  1 apache apache   648 May 12 21:16 index.php
drwxrwxrwx.  2 apache apache    34 May 13 03:10 logs
-rw-rw-r--.  1 apache apache  1139 May 12 21:16 phpunit.xml.dist
drwxrwxr-x.  2 apache apache    18 May 12 21:16 plugins
-rw-rw-r--.  1 apache apache   980 May 12 21:16 README.md
drwxrwxr-x.  9 apache apache  4096 May 12 21:16 src
drwxrwxrwx.  4 apache apache    55 May 12 21:16 tests
drwxrwxrwx.  2 apache apache     6 May 13 03:17 tmp
drwxrwxr-x. 28 apache apache  4096 May 12 21:16 vendor
drwxrwxr-x.  9 apache apache  4096 May 12 21:16 webroot

tmp/ 中的子目录也有正确的权限:

[ec2-user@cv-stg01 tmp]$ ls -l
total 0
drwxrwxrwx. 5 apache apache 48 May 12 21:16 cache
drwxrwxrwx. 2 apache apache 18 May 12 21:16 sessions
drwxrwxrwx. 2 apache apache 18 May 12 21:16 tests

我也尝试过重新应用权限,以防万一,使用

sudo chown -R apache:apache /var/www/html/my-application
sudo chmod -R 777 /var/www/html/my-application/tmp
sudo chmod -R 777 /var/www/html/my-application/logs
sudo chmod -R 777 /var/www/html/my-application/tests

我什至以 apache 身份登录并自己编辑了文件,没有任何问题

sudo su -s /bin/bash apache
vi /var/www/html/my-applciation/logs/error.log

我真的很难找出问题所在。

我们已经安装/启用了 SELinux,所以这可能会导致问题吗?

我们将不胜感激。

谢谢,

YM

【问题讨论】:

  • 您是否递归地申请了权限?甚至缓存都不必是可写的,子目录也可以写
  • @arilia 是的,它们是递归完成的
  • 您是否按照此处的故障排除清单stackoverflow.com/questions/36577020/… 进行操作?它在 SELinux 的情况下提供元素。这很可能是原因

标签: php linux cakephp permissions rhel


【解决方案1】:

试试这个:

chown -R apache.apache /path/to/html/

chmod -R 777 /path/to/html/

然后重启httpd服务:

service httpd restart

【讨论】:

    【解决方案2】:

    问题是 SELinux。使用以下命令解决:

    chcon -R system_u:object_r:var_lib_t:s0 tmp
    chcon -R  system_u:object_r:var_lib_t:s0 logs
    chcon system_u:object_r:httpd_var_lib_t:s0 logs/*
    chcon system_u:object_r:httpd_var_lib_t:s0 tmp/debug_kit.sqlite
    chcon  system_u:object_r:var_lib_t:s0 tests
    
    chmod -R o-w tmp logs tests 
    

    【讨论】:

      【解决方案3】:

      所有人都知道,将权限设置为777 不是一个好习惯。我在CakePHP installation doc 中找到了这个有用的提示,希望对您有所帮助 (;

      setfacl -R -m u:apache:rwx app/tmp
      setfacl -R -d -m u:apache:rwx app/tmp
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-02
        • 2011-09-17
        • 1970-01-01
        • 2021-06-09
        • 1970-01-01
        • 2017-03-31
        相关资源
        最近更新 更多