Linux Apache Proftpd構建虛擬主機時要注意的幾個安全問題

NO IMAGE

. proftpd建立hostuser/hostuser帳號,所有使用者均對映到該帳號。
htdocs/hosts 目錄屬主也為hostuser
這樣使用者使用FTP上傳的檔案屬性為hostuser(644 755)。
將FTP鎖定使用者在自己的主目錄下。

apache以nobody執行(以獨立apache使用者更好),讀hostuser的指令碼檔案。
對於要寫入的目錄uploads和cache,必須設定777,且迴圈設定其子目錄。兩個目錄禁止指令碼執行(.htaccess:php_flag engine off)。這樣即使黑客上傳webshell到這兩個目錄,也無法執行。
這樣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) 讓使用者在系統裡面清空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 fileLinux ProFTPd安裝與解除安裝詳細介紹