章 25. 以 Apache 模組安裝時

當 PHP 以 Apache 模組模式安裝時,它將繼承 Apache 會員(通常為「nobody」)的權限。這對安全和認證有一些影響。比如,若果用 PHP 來訪問資料庫,除非資料庫有自己的訪問控制,否則就要使「nobody」會員可以訪問資料庫。這意味著惡意的腳本在不用提供會員名和密碼時就可能訪問和修改資料庫。一個 web Spider 也完全有可能偶然發現資料庫的管理頁面,並且移除所有的資料庫。可以通過 Apache 認證來避免此問題,或是用 LDAP、.htaccess 等技術來設計自己的防問模型,並把這些代碼作為 PHP 腳本的一部份。

通常,一但安全性達到可以使 PHP 會員(這裡也就是 Apache 會員)承擔的風險極小的程度時候,可能 PHP 已經到了阻止向會員目錄寫入任何檔案或禁止訪問和修改資料庫的地步了。這就是說,無論是標準的檔案還是非標準的檔案,無論是標準的資料庫事務來是惡意的請求,都會被拒之門外。

一個常犯的對安全性不利的錯誤就是讓 Apache 擁有 root 權限,或是通過其它途徑斌予 Apache 更強大的功能。

把 Apache 會員的權限提升為 root 是極度危險的做法,而且可能會危及到整個系統的安全。所以除非是安全專家,否則決不要考慮使用 su,chroot 或是以 root 權限運行。

除此之外還有一些比較簡單的解決專案。比如說可以使用 open_basedir 來限制哪些目錄可以被 PHP 使用。也可以設定 Apache 的專屬區功能變數,從而把所有的 web 活動都限制到非會員和非系統檔案之中。