环境
- PHP -V 输出:带有 Suhosin-Patch (cli) 的 PHP 5.3.5-1ubuntu7.2(构建时间:2011 年 5 月 2 日 23:00:17)版权所有 (c) 1997-2009 The PHP Group Zend Engine v2.3.0,版权所有 ( c) 1998-2010 Zend Technologies
- cat /etc/issue 输出: Ubuntu 11.04
- Apache2 -V 输出:服务器版本:Apache/2.2.17 (Ubuntu) 服务器构建:2011 年 9 月 1 日 09:31:14
- 浏览器关于输出: Firefox 6.0.2
PS -AUX
输出
root 2943 0.0 0.3 206420 12428 ? Ss Sep19 0:20 /usr/sbin/apache2 -k start
www-data 18658 0.0 0.2 208552 11096 ? S Sep25 0:00 /usr/sbin/apache2 -k start
www-data 18659 0.0 0.3 208976 12036 ? S Sep25 0:00 /usr/sbin/apache2 -k start
www-data 18660 0.0 0.3 210532 12476 ? S Sep25 0:00 /usr/sbin/apache2 -k start
www-data 18661 0.0 0.3 210276 11820 ? S Sep25 0:00 /usr/sbin/apache2 -k start
www-data 18662 0.0 0.2 206948 10236 ? S Sep25 0:00 /usr/sbin/apache2 -k start
www-data 20037 0.0 0.3 208976 12128 ? S 08:22 0:00 /usr/sbin/apache2 -k start
www-data 20039 0.0 0.3 209132 11748 ? S 08:23 0:00 /usr/sbin/apache2 -k start
www-data 20120 0.0 0.3 209004 12000 ? S 09:04 0:00 /usr/sbin/apache2 -k start
文件权限
drwxr-xr-x 2 www-data www-data 4096 2011-09-26 15:24 .
drwxr-xr-x 4 www-data www-data 4096 2011-08-26 11:31 ..
-rw-r--r-- 1 root root 161976 2011-08-26 16:26 market.txt
-rw-r--r-- 1 root root 0 2011-09-26 14:55 test1.txt
-rw-r--r-- 1 root root 0 2011-09-26 14:55 test2.txt
-rw-r--r-- 1 root root 0 2011-09-26 14:55 test3.txt
-rw-r--r-- 1 root root 0 2011-09-26 14:55 test4.txt
-rw-r--r-- 1 root root 0 2011-09-26 15:02 test5.txt
代码
rename($file, "$dest/$file");
问题
当我对上面“文件权限”部分中列出的文件运行上述代码时,它会正确地将文件从当前位置移动到新位置并删除原始位置。当 apache2 作为 www-data 运行并且文件由 root 拥有并且仅对非 root 用户具有读取权限时,这怎么可能?在 PHP 文档中它说:
如果目标文件系统不允许对文件进行 chown() 或 chmod() 系统调用,则可能会生成警告 - 例如,如果目标文件系统是 FAT 文件系统。
rename() 在此过程中是否调用了这些系统函数中的任何一个?如果是这样,为什么?无论如何,这并不重要,因为 www-data 无论如何都不应该能够 chown/chmod 由 root 拥有的文件。
谁能向我解释这是怎么发生的?
附加信息
- 我已经用 root 和 www-data 拥有的 PHP 脚本尝试了这个,它可以工作。
我试图提供尽可能多的相关信息,但如果您需要其他信息,请告诉我。