2011-09-26 98 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進程)