Cakephp权限被拒绝Fileengine.php

4

我正在运行以下的cake命令:

./Console/cake schema create DbAcl

现在数据库表已经创建,但最后我遇到了以下错误:
Warning: SplFileInfo::openFile(/var/www/bloglic-2013/cake/app/tmp/cache/persistent/myapp_cake_core_object_map): failed to open stream: Permission denied in /var/www/bloglic-2013/cake/lib/Cake/Cache/Engine/FileEngine.php on line 313


Warning Error: SplFileInfo::openFile(/var/www/bloglic-2013/cake/app/tmp/cache/persistent/myapp_cake_core_file_map): failed to open stream: Permission denied in [/var/www/bloglic-2013/cake/lib/Cake/Cache/Engine/FileEngine.php, line 313]

Warning Error: _cake_core_ cache was unable to write 'file_map' to File cache in [/var/www/bloglic-2013/cake/lib/Cake/Cache/Cache.php, line 309]

Warning Error: SplFileInfo::openFile(/var/www/bloglic-2013/cake/app/tmp/cache/persistent/myapp_cake_core_method_cache): failed to open stream: Permission denied in [/var/www/bloglic-2013/cake/lib/Cake/Cache/Engine/FileEngine.php, line 313]

Warning Error: _cake_core_ cache was unable to write 'method_cache' to File cache in [/var/www/bloglic-2013/cake/lib/Cake/Cache/Cache.php, line 309]

现在我已经对所有文件夹执行了chmod 755命令,然后重新运行了命令,但是没有任何效果。有人能告诉我如何解决这个问题吗?

更新

更多信息如下:

这些文件夹的权限如下:

marc@Marc> cd /var/www/bloglic-2013/cake
marc@Marc> ls -ld app/tmp/cache/persistent/
drwxrwxrwx 2 marc marc 4096 Aug 13 22:50 app/tmp/cache/persistent/

marc@Marc> chmod 755  app/tmp/cache/persistent/
marc@Marc> ls -ld lib/Cake/Cache/
drwxrwxr-x 3 marc marc 4096 Aug  2 10:16 lib/Cake/Cache/

marc@Marc> ls -ld lib/Cake/Cache/Cache.php
-rwxr-xr-x 1 marc marc 16179 Aug  2 10:16 lib/Cake/Cache/Cache.php

marc@Marc> ls -ld lib/Cake/Cache/Engine/
drwxr-xr-x 2 marc marc 4096 Aug  2 10:16 lib/Cake/Cache/Engine/

marc@Marc> ls -ld lib/Cake/Cache/Engine/FileEngine.php 
-rwxr-xr-x 1 marc marc 9759 Aug  2 10:16 lib/Cake/Cache/Engine/FileEngine.php

marc@Marc> ls -ld lib/Cake/Cache/Cache.php
-rwxr-xr-x 1 marc marc 16179 Aug  2 10:16 lib/Cake/Cache/Cache.php

请注意,如果不出现相同的提示信息,我无法打开或运行任何操作和视图。

更多信息

marc@Marc /var/www/bloglic-2013/cake $ ls -l app/tmp/cache/persistent/
total 44
-rw-r--r-- 1 www-data www-data  945 Aug 13 18:45 controllers_hashes.txt
-rw-rw-r-- 1 www-data www-data   43 Aug 13 18:53 myapp_cake_core_acl_en-us
-rw-rw-r-- 1 marc     marc       43 Aug 13 23:04 myapp_cake_core_cake_console_
-rw-rw-r-- 1 marc     marc       43 Aug 13 23:04 myapp_cake_core_cake_dev_
-rw-rw-r-- 1 www-data www-data   43 Aug 13 22:59 myapp_cake_core_cake_dev_en-us
-rw-rw-r-- 1 www-data www-data   43 Aug 13 22:59 myapp_cake_core_cake_en-us
-rw-rw-r-- 1 www-data www-data   43 Aug 13 22:59 myapp_cake_core_default_en-us
-rw-rw-r-- 1 www-data www-data 5686 Aug 13 22:59 myapp_cake_core_file_map
-rw-rw-r-- 1 www-data www-data  163 Aug 13 22:59 myapp_cake_core_method_cache
-rwxr-xr-x 1 marc     marc      441 Aug 13 22:21 myapp_cake_core_object_map

我猜测尝试访问缓存文件的用户/进程不是marc,并且没有写入权限。尝试777或将用户更改为marc。 - Elpy
Marc,你已经有了myapp_cake_core_object_mapmyapp_cake_core_file_map等文件吗?你能展示一下ls -l app/tmp/cache/persistent/(列出文件)吗?也许你试图覆盖它们,但是没有文件本身的权限,而不是目录。 - Serge S.
使用 -l 选项(减号 L,不是减一)来获取长列表以查看权限和所有者。无论如何,如果您删除这些文件,可能会获得成功。 - Serge S.
你尝试过删除所有列出的文件吗? - Serge S.
CakePHP需要它们。我没有检查过是否可以在没有访问它们的情况下工作。请注意,CakePHP会自动创建它们。 - Serge S.
显示剩余5条评论
1个回答

4

您(用户marc)不在www-data组中,因此您无法写入这些文件:

myapp_cake_core_file_map
myapp_cake_core_method_cache

我建议删除这些文件,为所有tmp文件夹设置chmod 755,并让CakePHP创建它们。要让CakePHP创建tmp文件,只需访问您的应用程序的任何Web页面,而不是运行控制台命令。

然后,您将看到文件的所有者,并且您将知道应用程序运行的用户。

如果之后您需要使用cake控制台命令,只需将自己添加到应用程序的组中:

usermod -a -G www-data marc

usermod -a -G marc 给出 usermod: 权限被拒绝。 usermod: 无法锁定 /etc/passwd;请稍后再试。 - Marc Rasmussen
尝试使用 sudo usermod ...。除非你知道管理员的权限,否则你可能没有执行此操作的权限。 - Serge S.
如果我尝试这样做,我仍然无法访问文件,漏洞仍然存在,只有删除那些文件,我才能通过而没有警告。 - Marc Rasmussen
如果我使用755权限,让CakePHP重新创建文件,它会因为权限被拒绝而无法完成。这是什么意思,你该如何解决? - mgPePe
chmod 755 允许仅文件夹所有者进行写入。如果 tmp/models 的所有者不是 www-data,那么 CakePhp 将无法创建这些文件。您可以使用命令 chown 更改文件夹的所有权以将其修复为 www-data。还有许多其他选项。请参见 http://www.linux.org/threads/file-permissions-chmod.4094/ 了解文件权限概念。 - Serge S.

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