摘? 要: 從Linux平臺安全、Apache安全、MySQL數據庫安全及PHP開發技術等幾個方面探討了如何架設一個安全高效的WEB網站技術,并給出了一個可行的安全模型。
關鍵詞: LAMP; 網絡安全; WEB網站
?
1998年,Michael Kunze為德國計算機雜志c't寫作一篇關于Free 軟件如何成為商業軟件替代品的文章,創建了LAMP這個名詞,是由Linux 操作系統、Apache網絡服務器、MySQL 數據庫和PHP(Perl或Python)腳本語言組合而成的,隨之LAMP技術成為WEB服務器的事實標準。
美國互聯網市場調研機構NetCraft 2006年統計數據表明,互聯網發展在全球繼續呈現快速增長趨勢。在過去三年中,全球網站數量已經翻了一倍。 統計還顯示,WEB服務器市場中,基于Linux的Apache依然是網站的第一選擇。目前,Linux及Apache在網站操作系統及WEB服務器軟件市場的份額為62.7%,大型社區平臺因安全性和交互性考慮,采用Windows軟件平臺的越來越少,正在逐步轉向LAMP平臺。
然而,在Internet/Intranet的大量應用中,網絡本身的安全面臨著重大的挑戰,隨之而來的信息安全問題也日益突出。在網絡安全問題泛濫的今天,其安全性問題同樣面臨著考驗。
根據網絡安全的木桶理論,網絡的安全性取決于各個網絡組件的安全,因此本文從Linux安全、Apache安全、MySQL數據庫安全、PHP開發技術、防火墻及入侵檢測技術等幾個方面探討了如何架設一個安全高效的WEB網站。
1 WEB平臺的安全模型
1.1 層次模型設計
圖1給出了WEB平臺的安全模型。
?
WEB安全是一個綜合系統問題,筆者將其劃分為幾個層次,根據網絡安全的木桶理論,只有將模型中的各項安全盡可能考慮周全并切實實施安全規程,才能保證整個系統的安全性。由于篇幅有限,本文沒有討論網絡框架的安全性問題。
1.2 Linux平臺安全
操作系統作為安全的最底層至關重要,沒有操作系統平臺的安全就沒有任何安全可言,有些技術人員往往只對平臺進行了簡單的安全設置,而完全依賴于防火墻的做法是造成站點安全的最大隱患。因此,Linux平臺安全應考慮到安裝系統、增強Linux安全配置因素。
1.2.1 安裝系統
在進行系統安裝時,如果沒有進行規劃,將會造成安全漏洞。目錄劃分不正確會造成訪問的安全隱患以及管理維護的復雜,甚至系統崩潰;無用的軟件包安裝也會導致出現安全漏洞。因此Linux平臺安全應首先從規劃安裝開始。
(1)安裝系統時應考慮磁盤分區的安全性
根目錄(/)、用戶目錄(/home)、臨時目錄(/tmp)和/var目錄應分開到不同的磁盤分區,避免訪問的安全隱患,也便于系統維護; 以上各目錄所在分區的磁盤空間大小應充分考慮,避免因某些原因造成分區空間用完而導致系統崩潰;對于/tmp和/var目錄所在分區,大多數情況下不需要有suid屬性的程序,所以應為這些分區添加nosuid屬性。
(2)軟件包與服務安裝
對于主機,不應安裝過多的軟件包。這樣可以降低因軟件包而導致出現安全漏洞的可能性。在選擇主機啟動服務時不應選擇非必需的服務。
1.2.2 增強Linux安全配置
系統安裝完成后,應增強Linux的安全配置,將漏洞和訪問的安全隱患消滅在萌芽中。
(1)升級: 每一次升級都可以看作是對軟件缺陷的彌補,可以有效地填補漏洞并增強軟件的功能。Linux系統安全上的升級包括:
·內核升級。
·GNU libc共享庫升級。
(2)啟動和登錄安全性:為防止非授權用戶獲得權限和本地用戶非法登錄管理終端,必須對系統啟動和登錄進行設置,以保證系統不被非法訪問,具體設置如下:
·設置BIOS密碼且修改引導次序禁止從軟盤啟動系統。
·設置用戶口令,限制口令長度及復雜性。
·禁止所有默認的被操作系統本身啟動的并且不必要的賬號。
·更改口令文件屬性,從而防止非授權用戶獲得權限。
·修改“/etc/lilo.conf”增加參數restricted和password,使系統在啟動lilo時就要求密碼驗證。
·修改/etc/inittab文件,禁止Ctrl+Alt+Delete重新啟動機器命令。
·編輯/etc/pam.d/su文件,限制su命令。
·編輯/etc/rc.d/rc.local將泄漏系統信息的行注釋掉,然后清空/etc/issue、/etc/issue.net文件內容。
(3)限制網絡訪問:通過限制網絡訪問可以有效避免來自網絡的攻擊和非法訪問。
·Inetd設置 。確認/etc/inetd.conf的所有者是root,編輯/etc/inetd.conf禁止以下服務: telnet shell login exec talk ntalk imap pop-2? finger auth。或使用/etc/hosts.deny和/etc/hosts.allow來增加訪問限制。
·登錄終端設置。編輯/etc/securetty,使root僅可在tty1終端登錄。
· 改變/etc/inetd.conf文件,避免顯示系統和版本信息。
·設置文件的訪問權限來實現遠程訪問控制。
·合理設置POP-3和Sendmail等電子郵件服務,安裝支持加密傳送密碼的POP-3服務器。
·小心配置FTP服務。通過對/etc/ftpusers文件的配置,禁止root、bin、daemon、adm等特殊用戶對FTP服務器進行遠程訪問。除非特別需要,一般應禁止匿名FTP服務。
(4)防止攻擊:黑客的攻擊無處不在,通過對平臺的安全設置可以有效減少和防止攻擊。
·阻止ping攻擊:在/etc/rc.d/rc.local文件中增加如下一行:---- echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all,阻止ping。
·IP欺騙攻擊:在host.conf文件中增加 order bind,hosts; multi off; nospoof on三行內容來防止IP欺騙攻擊。
·DoS類型攻擊:修改/etc/security/limits.conf,對系統所有的用戶設置資源限制防止DoS類型攻擊。
(5)備份:在完成Linux系統的安裝以后應該對整個系統進行備份,以后可以根據這個備份來驗證系統的完整性,這樣就可以發現系統文件是否被非法篡改過。如果發生系統文件已經被破壞的情況,也可以使用系統備份來恢復到正常的狀態。
1.3 Apache安全
Apache作為站點搭建軟件其安全設置關系到整個站點的安全性能。其密碼被竊、非法訪問、CGI腳本等安全問題都會導致站點出現安全漏洞和隱患,因此安裝完Apache后需通過如下措施來增強其安全性。
(1)利用.htaccess文件實現的密碼保護
·建立.htpasswd文件。
·用.htaccess文件實現保護(require valid-user)。
·增加新的許可用戶。
·建立允許訪問的組。設置方法是建立一個名為
·htgroup的文本文件。
·在.htaccess文件中加入deny from all禁止讀取安全相關文件。?????????
(2)關注CGI腳本
CGI腳本是可執行程序,一般存放在WEB服務器的CGI-BIN目錄下面,在配置WEB服務器時,要保證CGI可執行腳本只存放于CGI-BIN目錄中,這樣可以保證腳本的安全,且不會影響到其他目錄的安全。
(3)升級Apache軟件通過升級Apache
增強軟件功能并彌補軟件缺陷,消除安全隱患。
1.4 MySQL數據庫安全
站點數據庫具有容易受到黑客攻擊、非法訪問、數據丟失等安全問題,因此對MySQL數據庫設置相應的安全防范措施以保證其安全、可靠、不間斷運行是安全模型的重要內容之一。具體設置如下:
(1)安裝MySQL數據庫后,初始化并設置root/usr/local/
mysql/;mysql/usr/local/mysql/var;mysql/usr/local/mysql/三個MySQL數據庫目錄權限為只讀,以防止非法訪問。
(2)修改MySQL的root密碼,以防止管理員密碼被竊取。
(3)刪除所有用戶名為空的用戶,增加系統安全性。
(4)備份數據庫,防止數據丟失。最好能實現雙機熱備份。
(5)盡可能使用SSL與數據庫連接以增強數據庫訪問的安全性,防止信息泄漏。
(6)升級MySQL軟件,增強軟件功能并彌補軟件缺陷,消除安全隱患。
1.5 PHP編程安全
程序設計中往往由于程序員的疏忽致使應用程序存在安全漏洞或隱患,因此對編程中存在的幾個問題提出如下解決方案:
(1)欺騙SQL語句:有些程序員習慣用邏輯與來提取和驗證數據庫中用戶名和密碼,這樣只要在用戶框和密碼框輸入“1‘or1=’1”就可通過驗證了,從而給攻擊者提供了非常簡單的登錄數據庫的手段,改進的方法是不要用邏輯與,將用戶的提取及驗證與密碼的提取、驗證分開用兩個SELECT語句完成。這樣雖然麻煩卻消除了SQL語句被欺騙的安全問題。
(2)PHP手冊里有幾個例子存在安全問題,實際使用時不要照搬。要真正明白語句的用法并在程序編寫完成后進行嚴格的安全測試。
(3)不要以環境變量、Cookie變量、session變量等作為
關系生死的判斷條件。因為這些變量太容易被偽造。
(4)利用PHP可以與SSH連接的特性以及執行遠程命令的能力,加強安全性。
①安裝ssh2.so。
②將libssh和 PHPr鏈接起來。有一個PECL模塊可以完成這個功能。可以使用PEAR安裝它(pear install-f ssh2)。
③確保這個新的SSH2.SO模塊被PHP加載。編輯php.ini文件(對于CLI實用程序:/etc/php5/cli/php.ini,對于Apache實用程序:/etc/php5/apache2/php.ini;增加一行:extension=ssh2.so)。
(5)升級PHP軟件,增強軟件功能并彌補軟件缺陷,消除安全隱患。
1.6 防火墻及入侵檢測技術
1.6.1 防火墻
作為系統的第一道防線,其主要作用是監控可信任網絡和不可信任網絡之間的訪問通道,可在內部與外部網絡之間形成一道防護屏障,攔截來自外部的非法訪問并阻止內部信息的外泄,但它無法阻攔來自網絡內部的非法操作。它根據事先設定的規則來確定是否攔截信息流的進出,但無法動態識別或自適應地調整規則,因而其智能化程度很有限。防火墻技術主要有3種:數據包過濾器(packet filter)、代理(proxy)和狀態分析(stateful inspection)。現代防火墻產品通常混合使用這幾種技術。
用Linux+iptables做防火墻具有很高的靈活性和穩定性,但安裝和設定起來比較麻煩,容易出錯。設置防火墻關鍵是設置一個好的安全規則并嚴格實施,如何配置和使用已經有很多文章論述過,讀者可以自行查閱。
1.6.2 入侵檢測(IDS—Instrusion Detection System)
綜合采用了統計技術、規則方法、網絡通信技術、人工智能、密碼學、推理等技術和方法,其作用是監控網絡和計算機系統是否出現被入侵或濫用的征兆。經過不斷發展和完善,作為監控和識別攻擊的標準解決方案,IDS系統已經成為安全防御系統的重要組成部分。以下是幾款Linux平臺下的工具軟件,綜合應用它們以建立自己的IDS系統。
(1)Psad是端口掃描攻擊檢測程序的簡稱,它作為一個新工具,可以與iptables和Snort等緊密合作,展示所有試圖進入網絡的惡意企圖。這是首選的Linux入侵檢測系統。它使用了許多Snort工具,可以與fwsnort和iptables的日志結合使用,這意味著可以深入到應用層并執行一些內容分析。它可以像Nmap一樣執行數據包頭部的分析,向用戶發出警告,甚至可以對其進行配置以便自動阻止可疑的IP地址。
(2)Snort是一款輕量級且易于使用的工具,可以獨立運行,也可以與psad和iptables一起使用。從Linux的發行版本的程序庫中可以找到并安裝它,這比起過去的源代碼安裝是一個很大的進步。至于保持其規則的更新問題,也是同樣的簡單,因為作為Snort的規則更新程序和管理程序,oinkmaster也在Linux發行版本的程序庫中。
(3)系統日志。網絡管理人員要始終提高警惕,隨時注意各種可疑狀況,并且按時檢查各種系統日志文件,包括一般信息日志、網絡連接日志、文件傳輸日志以及用戶登錄日志等。在檢查這些日志時,要注意是否有不合常理的時間記載。
2 結束語
任何一種單一的安全措施其防范能力都是有限的,一個安全的系統必須采取多層次、多種安全措施、多管齊下才能更好地保證系統安全。本文根據網絡安全的木桶理論提出了一種安全模型,并對其中涉及的技術進行了闡述,由于篇幅和水平,本文只能是拋磚引玉。假如一個站點采取了以上模型并實施了各種安全措施,則入侵者要想侵入你的系統而又不被發現幾乎是不可能的。
參考文獻
[1] ?Understanding symantec’s anti-virus strategy for internet?Gateways. http://www.symantec.com/avcenter/reference/wpnavieg.pdf.
[2] ?ELLISON R J. Survivability: protecting your critical systems.IEEE Internet Computing ,December 1999.
[3] ?中華人民共和國計算機信息系統安全保護條例.http://www.fosu.edu.cn/laws/law19.htm.
[4] ?MATHIAS H, DAVID G. SNMP versions 1&2 simple?network management protocol theory and practice. International Thomson Computer Press,1995.
[5] ?STEVENS R W.TCP/IP Illustrated, Volume 1: The?Protocols, Addison Wesley, 1994.