2013-10-24 57 views
0

我有一個網頁嘗試讀取文件,但獲取權限被拒絕錯誤。我寫了一個非常簡單的頁面來重現問題。Apache/PHP沒有讀取文件的權限

<?php 
echo exec('whoami'); 
echo "<br>"; 
echo exec('cat /var/svn/aaa/format 2>&1'); 
?> 

作爲一個測試,我已經試過在SVN目錄和下面的一切的荒謬777設置權限,所有權變更到Apache和嘗試添加Apache用戶到不同的組。我已經確認它是以apache用戶身份運行的(即上面的whoami呼叫是什麼)。如果我嘗試在命令行中運行上面的命令,阿帕奇然後正常工作,如

sudo -u apache cat /var/svn/aaa/format 2>&1 

這是爲什麼沒有做什麼,我期待?我期望給予文件777會給'其他'完整的權限,我希望改變所有者到Apache也將解決問題。我希望做的sudo作爲apache用戶會失敗,如果它從php失敗。

順便說一句,只是爲了完整,這是我運行WebSVN的問題,但它似乎是一個Apache問題,而不是WebSVN問題。

+0

is safe_mode enabled on your server? (檢查ini_get('safe_mode'))...可能會導致問題。 – Kurt

+0

如果我回聲ini_get('safe_mode')我什麼也沒有,但看在/etc/php.ini我看到「safe_mode =關」 – MikeKulls

回答

0

得到它固定。我嘗試了一個不同的盒子,但沒有做任何事情,它先運行了。我有我試圖訪問的文件,由root擁有,並沒有設置任何權限。尋找什麼是不同的,結果是SELinux。我不知道那是什麼,但禁用它來解決問題。我猜這是某種安全「功能」?調用getenforce告訴我,它已經開始,我可以使用setenforce來使其放寬。

[email protected]# getenforce 
Enforcing 

[email protected]# setenforce Permissive 

另一種方法是在配置文件/ etc/sysconfig/selinux中禁用它。我猜測之後需要重新啓動一些東西。

SELINUX=disabled 

謝謝大家的回覆。

+0

順便說一句,如果有人寫出更好的解釋,我會將它標記爲正確答案,因爲我不想回答自己的問題。 – MikeKulls

0
which cat 

使用的完整路徑貓在你的exec

+0

感謝您的答覆,但只是將錯誤更改爲「/ bin/cat:/ var/svn/aaa/format:Permission denied「 – MikeKulls