Linux Apache+Proftpd構建虛擬主機時要注意的幾個安全問題
更新時間:2009年08月09日 00:49:39 作者:
Linux下Apache+Proftpd構建虛擬主機時要注意的幾個安全問題,大家可以參考下,有其它未完整的地方,大家可以補充下。
. proftpd建立hostuser/hostuser帳號,所有用戶均映射到該帳號。
htdocs/hosts 目錄屬主也為hostuser
這樣用戶使用FTP上傳的文件屬性為hostuser(644 755)。
將FTP鎖定用戶在自己的主目錄下。
apache以nobody運行(以獨立apache用戶更好),讀hostuser的腳本文件。
對于要寫入的目錄uploads和cache,必須設定777,且循環(huán)設定其子目錄。兩個目錄禁止腳本執(zhí)行(.htaccess:php_flag engine off)。這樣即使黑客上傳webshell到這兩個目錄,也無法執(zhí)行。
這樣cache或uploads中的新文件的屬主將是nobody
cache目錄要限制對外訪問。
這里存在一個問題,就是apache生成的文件和目錄644和755,當proftpd以hostuser:hostuser運行時,用戶是無法刪除cache或uploads中的內容的。
解決方法:
(1) 在PHP程序中chmod文件和目錄分別為666和777
以adodb為例,需修改adodb.inc.php文件1681行if (!mkdir($dir,0771)) 和adodb-csvlib.inc.php文件287行chmod($tmpname,0644);兩個地方
(2) 讓用戶在系統(tǒng)里面清空cache和uploads
2. PHP safe_mode,它的主要作用是讀寫文件時會檢查當前腳本和要讀寫或修改的文件屬主是否一致,如果不一致就拒絕修改。
不過,如果當前腳本屬主是hostuser,要刪除屬主是nobody的uploads目錄下的文件,一旦safe_mode打開,就不能寫了。
所以safe_mode默認是不打開的,
其替代方案為:
php_admin_value open_basedir /docroot 限制每個用戶只能訪問自己的文件。這里的docroot是程序的根目錄,不是程序下的cache或uploads目錄。如果不是根目錄,PHP程序都無法訪問。
3. (不一定能保證)所有PHP程序腳本能過濾Remote Code Execution和Local File Include攻擊。否則黑客仍有可能讀取config.php中的密碼,或者直接讀寫cache或uploads目錄中的內容。
cache目錄中不可存放類似用戶密碼之類的數據。
4. expose_php設為off ,這樣php不會在http文件頭中泄露PHP的版本號.
Tips:Linux下默認文件和目錄的mod為 文件644 目錄755 (即666-22 777-22)umask 22
htdocs/hosts 目錄屬主也為hostuser
這樣用戶使用FTP上傳的文件屬性為hostuser(644 755)。
將FTP鎖定用戶在自己的主目錄下。
apache以nobody運行(以獨立apache用戶更好),讀hostuser的腳本文件。
對于要寫入的目錄uploads和cache,必須設定777,且循環(huán)設定其子目錄。兩個目錄禁止腳本執(zhí)行(.htaccess:php_flag engine off)。這樣即使黑客上傳webshell到這兩個目錄,也無法執(zhí)行。
這樣cache或uploads中的新文件的屬主將是nobody
cache目錄要限制對外訪問。
這里存在一個問題,就是apache生成的文件和目錄644和755,當proftpd以hostuser:hostuser運行時,用戶是無法刪除cache或uploads中的內容的。
解決方法:
(1) 在PHP程序中chmod文件和目錄分別為666和777
以adodb為例,需修改adodb.inc.php文件1681行if (!mkdir($dir,0771)) 和adodb-csvlib.inc.php文件287行chmod($tmpname,0644);兩個地方
(2) 讓用戶在系統(tǒng)里面清空cache和uploads
2. PHP safe_mode,它的主要作用是讀寫文件時會檢查當前腳本和要讀寫或修改的文件屬主是否一致,如果不一致就拒絕修改。
不過,如果當前腳本屬主是hostuser,要刪除屬主是nobody的uploads目錄下的文件,一旦safe_mode打開,就不能寫了。
所以safe_mode默認是不打開的,
其替代方案為:
php_admin_value open_basedir /docroot 限制每個用戶只能訪問自己的文件。這里的docroot是程序的根目錄,不是程序下的cache或uploads目錄。如果不是根目錄,PHP程序都無法訪問。
3. (不一定能保證)所有PHP程序腳本能過濾Remote Code Execution和Local File Include攻擊。否則黑客仍有可能讀取config.php中的密碼,或者直接讀寫cache或uploads目錄中的內容。
cache目錄中不可存放類似用戶密碼之類的數據。
4. expose_php設為off ,這樣php不會在http文件頭中泄露PHP的版本號.
Tips:Linux下默認文件和目錄的mod為 文件644 目錄755 (即666-22 777-22)umask 22
您可能感興趣的文章:
- linux proftpd-1.3.4c安裝配置實例
- linux下用Proftpd搭建ftp服務器及配置方法
- linux下講解MySQL安裝與登錄方法
- linux正確重啟MySQL的方法
- linux之cut命令的用法
- Linux tar 壓縮打包命令使用方法
- Linux 入門常用命令 password — 修改密碼,改變用戶
- linux下mysql提示"mysql deamon failed to start"錯誤的解決方法
- Linux shell腳本編程if語句的使用方法(條件判斷)
- linux mysql 報錯:MYSQL:The server quit without updating PID file
- Linux ProFTPd安裝與卸載詳細介紹
相關文章
解決Linux常用命令“l(fā)l”失效或命令未找到的問題
這篇文章主要介紹了Linux常用命令“l(fā)l”失效或命令未找到的問題及解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06