在Debian 7上运行PHP 5.4和Apache2,apache配置为使用userwww-data
.
我试图弄明白为什么Wordpress在拥有完全权限的组所有权时无法修改其目录中的文件,而且似乎只有在拥有用户所有权时才能工作。
请允许我举例说明:
案例1将用户设置为root
和分组到www-data
:
chown -R root:www-data /var/www/site-dir/wordpress-dir/
设置用户和组的读、写和执行权限。
chmod -R u=rwx,g=rwx /var/www/site-dir/wordpress-dir/
当前
ls -l
Wordpress目录的输出:
drwxrwsr-x 5 root www-data 4096 Jul 11 15:20
Outcome: 当试图删除插件时,Wordpress声称它没有访问权限:案例2的权限与1相同,但用户设置为www-data
:
chown -R www-data:www-data /var/www/site-dir/wordpress-dir/
Outcome: Wordpress现在可以删除插件:我想知道这里发生了什么。用户为什么要成为www-data
, 即使使用www-data
作为组,它具有完全权限?
根据我对linux权限的(有限)了解,我假设,由于运行Wordpress的apache进程正在使用www-data
在案例1中,它可以完全访问任何需要执行的操作,因为该组递归设置为www-data
, 组权限递归设置为读、写和执行。
为什么用户需要www-data
这样才能起作用?
SO网友:SoberTillNoon
这是因为在WP admin/includes/file中的WP\\u Filesystem方法函数中。php如果您没有在wp配置中定义FS\\U方法,它会自动确定更新方法。php。
if ( $wp_file_owner !== false && $wp_file_owner === $temp_file_owner )
它检查以确保脚本创建的新文件与该文件具有相同的所有者。php脚本。但是,如果定义了FS\\u方法,则会跳过所有这些检查,并且基本上会跳到返回调用。
另一个解决方法是更改文件的所有权。php将由您的Web服务器拥有。但我觉得定义FS\\u METHOD常量是一个更好的解决方案。