|
1. proftpd建立hostuser/hostuser帳號(hào),所有用戶均映射到該帳號(hào)。
htdocs/hosts 目錄屬主也為hostuser
這樣用戶使用FTP上傳的文件屬性為hostuser(644 755)。
將FTP鎖定用戶在自己的主目錄下。
apache以nobody運(yùn)行(以獨(dú)立apache用戶更好),讀hostuser的腳本文件。
對(duì)于要寫(xiě)入的目錄uploads和cache,必須設(shè)定777,且循環(huán)設(shè)定其子目錄。兩個(gè)目錄禁止腳本執(zhí)行(.htaccess:php_flag engine off)。這樣即使黑客上傳webshell到這兩個(gè)目錄,也無(wú)法執(zhí)行。
這樣cache或uploads中的新文件的屬主將是nobody
cache目錄要限制對(duì)外訪問(wèn)。
這里存在一個(gè)問(wèn)題,就是apache生成的文件和目錄644和755,當(dāng)proftpd以hostuser:hostuser運(yùn)行時(shí),用戶是無(wú)法刪除cache或uploads中的內(nèi)容的。
解決方法:
(1) 在PHP程序中chmod文件和目錄分別為666和777
以adodb為例,需修改adodb.inc.php文件1681行if (!mkdir($dir,0771)) 和adodb-csvlib.inc.php文件287行chmod($tmpname,0644);兩個(gè)地方
(2) 讓用戶在系統(tǒng)里面清空cache和uploads
2. PHP safe_mode,它的主要作用是讀寫(xiě)文件時(shí)會(huì)檢查當(dāng)前腳本和要讀寫(xiě)或修改的文件屬主是否一致,如果不一致就拒絕修改。
不過(guò),如果當(dāng)前腳本屬主是hostuser,要?jiǎng)h除屬主是nobody的uploads目錄下的文件,一旦safe_mode打開(kāi),就不能寫(xiě)了。
所以safe_mode默認(rèn)是不打開(kāi)的,
其替代方案為:
php_admin_value open_basedir /docroot 限制每個(gè)用戶只能訪問(wèn)自己的文件。這里的docroot是程序的根目錄,不是程序下的cache或uploads目錄。如果不是根目錄,PHP程序都無(wú)法訪問(wèn)。
3. (不一定能保證)所有PHP程序腳本能過(guò)濾Remote Code Execution和Local File Include攻擊。否則黑客仍有可能讀取config.php中的密碼,或者直接讀寫(xiě)cache或uploads目錄中的內(nèi)容。
cache目錄中不可存放類似用戶密碼之類的數(shù)據(jù)。
4. expose_php設(shè)為off ,這樣php不會(huì)在http文件頭中泄露PHP的版本號(hào).
|
【收藏】【打印】【進(jìn)入論壇】 |
|
|
|
|
|
|
|