2010-04-01 87 views
5

有沒有一種方法來設置PHP apache下運行創造與創造,而不是由阿帕奇所擁有它由程序的所有者擁有該文件夾的文件夾?PHP的mkdir和Apache所有權

使用word的時候按下它由他們在運行網站創建新的文件夾上傳到但這些都是apache.apache擁有,不,這也正好利用ostickets。現在,我們必須SSH進入服務器並chmod該文件夾,但似乎會有一個設置來覆蓋任何程序以外的所有權。

回答

2

Safe_mode是打開你的服務器上。函數mkdir()創建與擁有者(「apache」,「none」,..)不同的當前腳本所有者的文件夾。而且腳本無法將文件上傳(移動,複製)到另一個所有者的文件夾中(這不像當前腳本所有者)。

禁用safe_mode,這將是工作。詳情請參閱http://php.net/manual/en/features.safe-mode.php

P.S.啓用safe_mode您不能在php中使用chmod()函數。

+0

這工作三河 - 謝謝 – 2010-04-10 10:00:56

+0

**警告此功能已從PHP 5.3.0和從PHP 5.4.0刪除截至**。** – Jim 2017-10-05 16:54:57

1

不直接,沒有。除非您是root用戶,否則您不能「​​放棄」文件的所有權給其他用戶。您可以使用「AssignUserID」apache指令進行調查,以強制該特定虛擬主機作爲特定用戶/組運行。與阿帕奇/ PHP將創建任何文件與適當的所有權

+0

萬一別人認爲這可能是去(使用mpm_perchild_module)的方式 - 這是我沒有想到:從鏈接:**此模塊的功能。這個模塊的開發並不完整,目前不活躍。除非你是一個願意幫助解決它的程序員,否則不要使用perchild。** – Jim 2017-10-05 16:48:11

0

退房PHP chown()功能

+1

如果沒有超級用戶運行,此功能將失敗。 – webbiedave 2010-04-01 15:17:41

2

另一種方法是把apache用戶和「客戶用戶」在一個新的組。另外該目錄應該使用粘性位SGID,這樣每個新文件都將該組分配給這個新組。通過這種方式,網絡服務器和「客戶用戶」可以用文件的工作沒有任何問題

[17:57] [email protected] /tmp/test $ ls -al /tmp/test 
total 9 
drwxrwsr-x 2 root users 48 Apr 1 17:55 . 
drwxrwxrwt 36 root root 9264 Apr 1 17:53 .. 

正如你所看到的目錄得到了粘滯位SGID和業主是「用戶」組中,我(progman)上午。如果其他用戶添加文件,則該組自動設置爲該組

[17:55] proglap ~ # touch /tmp/test/x 

這是從根目錄執行的。現在,我們得到:

[17:57] [email protected] /tmp/test $ ls -la /tmp/test 
total 9 
drwxrwsr-x 2 root users 72 Apr 1 17:59 . 
drwxrwxrwt 36 root root 9264 Apr 1 17:53 .. 
-rw-r--r-- 1 root users 0 Apr 1 17:59 x 

正如你看到添加的文件是從髮根,但組設置爲users和這樣可以將其刪除

[18:00] [email protected] /tmp/test $ rm x 
rm: remove write-protected regular empty file `x'? y 
[18:01] [email protected] /tmp/test $ ls -la /tmp/test 
total 9 
drwxrwsr-x 2 root users 48 Apr 1 18:01 . 
drwxrwxrwt 36 root root 9264 Apr 1 17:53 .. 

請記住,你仍然需要改變chmod,如果你想編輯文件作爲rw-r--r--只是組讀訪問。但更改chmod,甚至可能與umask一起工作,比處理根訪問和使用chown要好。