2013-05-15 60 views
0

我正在爲www-data,我試圖執行使用shell_exec(/foobar/script/myscript.sh)一個shell腳本,但是當腳本試圖寫入日誌文件用PHP了shell_exec權限問題

cannot create /foobar/foo.log: Permission denied 
我發現了以下錯誤

但是,如果我嘗試直接從終端運行腳本,我不會遇到任何問題。即

$ sudo su www-data 
$ /foobar/script/myscript.sh 
$ 

任何想法可能會發生什麼?

我還要補充一點,我加WWW的數據到組mybar並認爲這是何等的顯示出來,當我列出目錄

drwxrwxr-x 3 mybar mybar 4096 May 14 14:18 foobar  # ls -l/


-rw-rw-r-- 1 mybar mybar 2824 May 15 09:57 foo.log  # ls -l /foobar 
+1

你可以在'sudo su www-data'後檢查'whoami'嗎?通常它沒有登錄shell,而你又回到'root' ......這將解釋一些事情,因爲除非在'mybar'組中有'www-data',否則它不能在那裏寫入。 – Wrikken

回答

1

我認爲可以有兩種選擇:

  1. web-server和php-fpm在不同的用戶下運行(默認情況下不應該是這樣)。試試echo shell_exec('whoami');
  2. 在php-fpm進程啓動後,您已經將www-data添加到mybar,所以它仍然「不知道」它是(然後我認爲重新啓動fpm應該有所幫助)。
+0

真棒,重新啓動了伎倆。謝謝 – user2077092

1

這個工作對我來說:

sudo chown www-data:www-data -R foobar/ 

的目錄你正在試圖創建必須屬於誰是執行命令的文件。

您可以鍵入:

ls -la 

看到它屬於誰。

您應該看到這樣的事情:

drwxr-xr-x 8 jack jack 4096 Jul 22 11:36 application 

當我登錄到我的Ubuntu機器,我的身份登錄[email protected]這樣我就可以創建在以下目錄中的文件,而不發出sudo命令:

drwxr-xr-x 8 jack jack 4096 Jul 22 11:36 application 

因爲它由當前用戶所有。

當您嘗試運行通過訪問網頁執行的腳本時。 www-data是執行命令的用戶,因此您嘗試創建/修改/刪除的任何目錄或文件必須歸www-data所有。