2011-09-26 122 views
2

环境

  • PHP -V输出: PHP 5.3.5-1ubuntu7.2用了Suhosin贴片(CLI)(建:2011年5月2日23点00分17秒)版权所有(C)1997-2009 PHP的集团Zend引擎V2.3.0,版权所有(C)1998-2010 Zend技术
  • 猫的/ etc /输出问题:的Ubuntu 11.04
  • 的Apache2 -V输出中:服务器版本:阿帕奇/ 2.2.17 (Ubuntu)服务器内置:Sep 1 2011 09:31:14
  • 浏览器关于输出:火狐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文件,它说:PHP rename()忽略权限?

如果目标文件系统不允许CHOWN

警告可能会产生()或搭配chmod()系统调用要对文件所做的 - 例如,如果目标文件系统是FAT文件系统。

rename()在调用过程中调用其中的哪一个系统函数?如果是这样,为什么?不管怎样,www数据不应该能够chown/chmod root拥有的文件。

任何人都可以向我解释这是怎么发生的?

其他信息

  • 我已经通过根和WWW的数据拥有的PHP脚本尝试这样做,它的工作原理。

我试图提供尽可能多的相关信息,但让我知道你是否需要其他东西。

回答

4

移动不会“删除”原稿,除非移动发生在文件系统边界之间。在一个单独的文件系统中,移动只是重写相关的目录条目,所以它看起来已经复制/删除了文件,但是你所做的只是一些内务处理。由于www数据拥有所讨论的目录,因此它可以重写表示这些文件所需的目录条目,并且不会触及实际的文件。

+0

这是有道理的。我测试了将文件夹chown到root:root,我无法移动该文件。谢谢! –

1

移动文件时,您不是在编辑文件本身,而是在它们所在的目录中。在你的情况下,该目录拥有www-data(Apache进程)