Linux服务器中Apache与PHP安全设置笔记(2)

(1) safe_mode: 以安全模式运行PHP;
--------------------------------------------------------------------------------
在php.ini文件中使用如下選項(這是影響全局的設置):
safe_mode = On                (使用安全模式)
safe_mode = Off                (关闭安全模式)

PHP的安全模式是為了試圖解決共享伺服器(shared-server)的安全問題而專門設立的. 然而從結構上看, 試圖在PHP層面上解決這個問題其實是不合理的, 只是考慮到修改WEB伺服器層和操作系統層都顯得非常的不現實, 因此許多使用者,特別是提供公共網絡服務的ISP供應商,大多都在其服務器中要求以安全模式來运行PHP,用以防止合法用戶的跨站讀取或越權操作等危險行為, 以及將非授權用戶的惡意行為所造成的影響降到最低范圍.

參考網址:

在Apache的httpd.conf中VirtualHost的相应设置方法(這是針對特定用戶的設置):
php_admin_flag safe_mode On        (使用安全模式)
php_admin_flag safe_mode Off        (关闭安全模式)
或者:
php_admin_value safe_mode 1        (使用安全模式)
php_admin_value safe_mode 0        (关闭安全模式)

嚴重警告: 如果在全局性設置中已經啟用了safe_mode的功能,但又在特別的用戶虛擬空間中關閉該用戶的safe_mode的功能,這就等于給予了該用戶特殊的權限,允許他不須受safe_mode的限制而自由地使用系統的服務,也就是說所有原來被全局性的safe_mode功能所禁止的行為,例如跨站讀取或越權操作等都可以被該用戶執行, 這就好像在原本安全設防的金庫中打開了一個可供該用戶自由進出的洞,因此任何使用該用戶空間的應用都不再被全局性的safe_mode保護所限制,當然這就意味著整個系統的安全性都可能會受到該用戶空間的影響,包括可能因該空間應用的漏洞而導致整個系統被入侵等等. 所以,這樣的針對特定用戶的特殊設置,應當作為一種特許授權的方式來考慮, 并有必要建立有效的監控機制以防止該用戶濫用系統資源,否則, 一旦該用戶變得不再可信任或他的網站程序存在漏洞, 那么您的整體系統所受的影響就會同完全沒有啟用safe_mode一模一樣.
================================================================================


================================================================================
(2) safe_mode_include_dir: 无需UID/GID检查的目录
--------------------------------------------------------------------------------
當您按照前面(1)所述之設置啟用PHP的安全模式之后,PHP的腳本在運行時就會對所有被操作的目錄以及文件進行針對UID/GID的匹配性檢查: 即檢查被操作目錄或文件的UID或GID,是否同當前PHP腳本文件的UID或GID一樣.

然而, 如果您的系統允許用戶的PHP腳本訪問公共路徑的話(例如很多較舊的Forum或Gallery程序都會直接引用系統文件來擴展當時PHP還未能支持的功能), 那么這種設置就會造成麻煩.

而使用safe_mode_include_dir設置可以指定某些目錄, 當PHP腳本操作這些目录及其子目录時(該目录必须在include_path中或者用完整路径来包含), 則允許越过UID/GID检查,即不對該目錄進行UID/GID匹配性檢查.

从PHP4.2.0开始, 這個指令已經可以接受同include_path指令类似的风格, 即用分号隔开的多個路径, 而以前則只能指定單一个目录. 同open_basedir一樣, 它所指定的路徑实际上也是一个字符串的前缀限制,而非針對該目录名稱空間的操作.

例如如果指定: “safe_mode_include_dir = /dir/incl”, 那么所有的PHP腳本都将允许任意访问 “/dir/include”和“/dir/incls” 路徑(如果它们存在的話). 因此, 如果您希望将访问控制在一个指定的目录里面, 就必須在上述設置的指定路徑的结尾加上一个斜线, 例如:“safe_mode_include_dir = /dir/incl/”

請注意: VirtualHost会自动继承php.ini中的safe_mode_include_dir设置.
================================================================================


================================================================================

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wypfyx.html