服務(wù)器、FTP、CmsTop后臺(tái)、數(shù)據(jù)庫(kù)等所有密碼,請(qǐng)?jiān)O(shè)置強(qiáng)有力密碼,簡(jiǎn)單有效降低整體風(fēng)險(xiǎn)的安全漏洞,以下是關(guān)于一些強(qiáng)密碼的建議:
§ 包括數(shù)字,符號(hào),大小寫(xiě)字母組合
§ 密碼長(zhǎng)度應(yīng)在12至14個(gè)字符,如果允許,可以更長(zhǎng)。
§ 任何避免重復(fù)的密碼,避免基于個(gè)人資料信息密碼,如生日,姓名等。
§ 定時(shí)更換密碼的習(xí)慣
盡管我們一再?gòu)?qiáng)調(diào)密碼復(fù)雜度的重要性,還依然有許多弱密碼的存在。
所以偉大的webmaster一定要在日常工作中給網(wǎng)站工作人員加強(qiáng)與灌輸安全管理意識(shí)。
互聯(lián)網(wǎng)上無(wú)時(shí)不刻都有一些人四處開(kāi)著掃描器進(jìn)行弱密碼掃描試探,SSH的22端口也不例外,在服務(wù)器上執(zhí)行兩條指令可查看所有登錄成功與失敗的日志:
# 查看成功登錄的日志,空格翻頁(yè),q退出
shell> last | less
# 查看登錄失敗的日志
shell> lastb | less
看下圖血淋淋的例子,所以在安裝操作系統(tǒng)系統(tǒng)并設(shè)置好密碼后,最好修改SSH默認(rèn)端口

(1) 修改SSH服務(wù)端口
修改SSH配置文件,將其監(jiān)聽(tīng)端口更改為大于10000的值,發(fā)揮您的想象力:
shell> vi /etc/ssh/sshd_config
# 指定端口號(hào)
Port 22345
修改iptables軟件防火墻把默認(rèn)的22端口改為剛才指定的端口:
# 也可以使用 setup來(lái)進(jìn)行配置iptables軟件防火墻
shell> vi /etc/sysconfig/iptables
# 重啟iptables,或者使用 service iptables restart
shell> /etc/init.d/iptables restart
注意:關(guān)于SSH, FTP這些端口的修改,一定要在修改后立即進(jìn)行連接測(cè)試,以防由于誤操作,斷開(kāi)了當(dāng)前連接而無(wú)法再次連接主機(jī)。
(2) 禁止root賬戶(hù)遠(yuǎn)程登錄
通過(guò)修改默認(rèn)端口基本上可以阻擋99%惡意掃描信息(根據(jù)個(gè)人觀察),緊接著要做的就是禁止root遠(yuǎn)程直接登錄。因?yàn)橥ㄟ^(guò)分析掃描日志,你會(huì)發(fā)現(xiàn)root賬戶(hù)試探的次數(shù)一直是永居榜首:
shell> vi /etc/ssh/sshd_config
# 禁止root賬戶(hù)登錄
PermitRootLogin no
然后創(chuàng)建個(gè)普通賬戶(hù),當(dāng)我們需要遠(yuǎn)程連接的時(shí)候,先通過(guò)普通賬戶(hù)登錄,再su -到root。普通賬戶(hù)的用戶(hù)名需要你費(fèi)心思創(chuàng)造個(gè)奇葩的,想到admin這樣的用戶(hù)名請(qǐng)先去反思:
shell> useradd yaoniming3000
shell> passwd yaoniming3000
使用普通賬戶(hù)登錄服務(wù)器后執(zhí)行su –切換
# 注意su后面有個(gè)減號(hào),是同時(shí)切換環(huán)境變量的意思
shell> su –
同樣,修改完畢,還是立即進(jìn)行連接測(cè)試,以防無(wú)法連接主機(jī)
(3) 限制服務(wù)器IP或VPN登入
如果有條件,強(qiáng)烈建議配置服務(wù)器的遠(yuǎn)程登錄權(quán)限只能通過(guò)特定IP段或VPN方可登入。
(1) 按需加載 PHP 解析
具體作法是在 httpd.conf 主配置中不加載 PHP解析,而把 AddType 配置項(xiàng)放到每個(gè)虛擬主機(jī)配置文件中。例如:
shell> vi /etc/httpd/conf.d/php.conf # 取消默認(rèn)PHP解析,在需要解析PHP虛擬主機(jī)中加入:
AddHandler php5-script .php
AddType text/html .php
CmsTop默認(rèn)的二級(jí)域名虛擬主機(jī)中,靜態(tài)域名一定不允許進(jìn)行PHP解析,它們包含:
www.domain.com
img.domain.com
upload.domain.com
以及其他所有的靜態(tài)發(fā)布點(diǎn),客戶(hù)自行做二次開(kāi)發(fā)時(shí)也需遵守此項(xiàng)約定。Nginx依此原則進(jìn)行配置。
(2) 禁用PHP敏感函數(shù)
很多木馬程序和服務(wù)器攻擊都是利用PHP內(nèi)置的敏感函數(shù),因此需要在配置文件中禁用這些敏感函數(shù),以下列出一些函數(shù),可以根據(jù)實(shí)際情況配置:
shell> vi /etc/php.ini
disable_functions =
exec,shell_exec,system,popen,escapeshellcmd,escapeshellarg,gzuncompress,proc_open,proc_get_status,show_source,gzinflate,phpinfo
重啟Apache方生效。
(3) 限制PHP 腳本的執(zhí)行目錄
如果網(wǎng)站不幸被植入了木馬,通過(guò)限制PHP腳本的執(zhí)行目錄,可以禁止木馬程序?yàn)g覽操作系統(tǒng)的系統(tǒng)文件,進(jìn)而產(chǎn)生更大的破壞,一共有兩步操作:
shell> vi /etc/php.ini
open_basedir = /data/www/:/tmp/
如果是Apache,還可以限定每個(gè)虛擬主機(jī)的執(zhí)行目錄
……
php_admin_value open_basedir "/data/www:/tmp"
注意以上紅色部分有差異,并且/tmp目錄是必須要給的。
重啟 Apache 生效。
(4) 開(kāi)啟動(dòng)態(tài)虛擬主機(jī)的訪問(wèn)日志
一定要開(kāi)啟所有可執(zhí)行PHP腳本虛擬主機(jī)的訪問(wèn)日志,以便有跡可循:
……
CustomLog logs/admin.domain.com-access_log
(5) 開(kāi)啟PHP日志文件
在關(guān)閉display_errors后建議把錯(cuò)誤信息記錄下來(lái),便于查找服務(wù)器運(yùn)行的原因:
shell> vi /etc/php.ini
log_errors = On
error_log = /var/log/php/php_error.log # 注意日志目錄需要Apache寫(xiě)權(quán)限
這個(gè)日志并不會(huì)像Apache一樣輪滾,需要手動(dòng)清理或?qū)懡財(cái)嗄_本。
(1) 數(shù)據(jù)目錄和數(shù)據(jù)文件的安全性
設(shè)置MySQL數(shù)據(jù)目錄為700,即只有啟動(dòng)數(shù)據(jù)庫(kù)的用戶(hù)可以讀寫(xiě)數(shù)據(jù)庫(kù)文件,保證了本地?cái)?shù)據(jù)文件的安全。
shell> chmod 700 /www/mysql
設(shè)置MySQL日志目錄為770,即只有數(shù)據(jù)庫(kù)用戶(hù)和組成員可以查看
shell> chmod 770 /var/log/mysql
(2) 本地日志文件安全性
有些用戶(hù)在本地登陸或備份數(shù)據(jù)庫(kù)的時(shí)候?yàn)榱藞D方便,有時(shí)會(huì)在命令行參數(shù)里直接帶了數(shù)據(jù)庫(kù)的密碼,如:
shell> mysql -uroot –ptest
shell> mysqldump -uroot -ptest test > test.sql
這些命令會(huì)被shell記錄在歷史文件里,比如bash會(huì)寫(xiě)入用戶(hù)目錄的.bash_history文件,如果這些文件不慎被讀,那么數(shù)據(jù)庫(kù)的密碼就會(huì)泄漏。所以我們?cè)?span lang="EN-US">shell登陸及備份的時(shí)候不要在-p后直接加密碼,而是在提示后再輸入數(shù)據(jù)庫(kù)密碼。
另外用戶(hù)本地登陸數(shù)據(jù)庫(kù)后執(zhí)行的SQL命令也會(huì)被MySQL記錄在用戶(hù)目錄的.mysql_history文件里。如果數(shù)據(jù)庫(kù)用戶(hù)用SQL語(yǔ)句修改了數(shù)據(jù)庫(kù)密碼,也會(huì)因.mysql_history文件而泄漏。所以必要時(shí)我們可以這樣做:
shell>rm ~/.bash_history ~/.mysql_history
shell>ln -s /dev/null ~/.bash_history
shell>ln -s /dev/null ~/.mysql_history
(3) 數(shù)據(jù)庫(kù)賬戶(hù)的配置
請(qǐng)不要直接使用數(shù)據(jù)庫(kù)root賬戶(hù)來(lái)進(jìn)行CmsTop數(shù)據(jù)庫(kù)的管理,并配置數(shù)據(jù)庫(kù)root賬戶(hù)只允許本地連接數(shù)據(jù)庫(kù)。
針對(duì)每個(gè)數(shù)據(jù)庫(kù)設(shè)置不同的用戶(hù)、密碼、連接限制權(quán)限,如果您不熟悉SQL可借助phpMyAdmin圖形化web界面來(lái)進(jìn)行配置。
mysql> select user,host from mysql.user;
+--------------+------------------+
| user | host |
+--------------+------------------+
| cmstop | 192.168% |
| cmstop | localhost |
| root | localhost |
(4) 數(shù)據(jù)庫(kù)的外網(wǎng)訪問(wèn)
數(shù)據(jù)庫(kù)一般不需要通過(guò)外網(wǎng)訪問(wèn),所以也不需要配置外網(wǎng)IP,開(kāi)放外網(wǎng)端口,當(dāng)數(shù)據(jù)庫(kù)與應(yīng)用分開(kāi)時(shí),應(yīng)該通過(guò)內(nèi)網(wǎng)IP來(lái)進(jìn)行連接。
(5) phpMyAdmin的訪問(wèn)控制
使用phpMyAdmin來(lái)進(jìn)行數(shù)據(jù)庫(kù)管理,不要為了圖方便,將該目錄放置到CmsTop的系統(tǒng)目錄中運(yùn)行。
可以單獨(dú)配置一個(gè)域名來(lái)進(jìn)行訪問(wèn),并且不要進(jìn)行公網(wǎng)DNS解析,讓外網(wǎng)直接訪問(wèn)。
(1) authkey 加密密鑰修改
該密鑰用于Cookie數(shù)據(jù)加密,為了保證用戶(hù)數(shù)據(jù)安全,請(qǐng)部署完畢后立即進(jìn)行修改:
shell> vi cmstop/config/config.php
authkey => # 請(qǐng)修改長(zhǎng)度超過(guò)40并盡可能復(fù)雜的字符串
(2) 修改默認(rèn)配置前綴:_cmstop
shell> vi cmstop/config/cache.php
shell> vi cmstop/config/cookie.php
shell> vi cmstop/public/img/js/config.js
(3) 個(gè)性化后臺(tái)域名
請(qǐng)不要使用如admin,back等易于猜測(cè)的后臺(tái)域名,同時(shí)我們強(qiáng)烈建議后臺(tái)域名不要通過(guò)公網(wǎng)DNS解析,最好手動(dòng)綁hosts文件訪問(wèn)。
如果有條件的話,后臺(tái)更應(yīng)該放置在VPN以及內(nèi)網(wǎng)下訪問(wèn)。
shell> vi cmstop/config/define.php
define('ADMIN_URL', 'http://admin.domain.com/');
同時(shí)需要對(duì)應(yīng)修改您的虛擬主機(jī)域名配置。
目錄權(quán)限的配置非常重要,80%的網(wǎng)站系統(tǒng)入侵后成功掛馬,基本上是權(quán)限設(shè)置不正確引起的。CmsTop系統(tǒng)目錄權(quán)限配置的原則為:
這樣即使黑客侵入了網(wǎng)站目錄,也不能輕易讓木馬在可執(zhí)行PHP腳本的目錄下運(yùn)行。
CmsTop需要配置可寫(xiě)的子目錄為(截至20130830):
cmstop/data
cmstop/public/upload
cmstop/public/www
cmstop/public/img/apps/special/templates
cmstop/public/img/apps/special/scheme
上述目錄都是禁止執(zhí)行PHP的。
(1) 目錄權(quán)限配置方法
# 首先修改整個(gè)系統(tǒng)目錄的屬主與屬組,很多大哥喜歡用apache:apache來(lái)修改,這就意味著Apache對(duì)任意目錄和文件均有寫(xiě)權(quán)限,這是非常不明智的。
# root可以修改為FTP或SFTP賬戶(hù)的用戶(hù)名,這樣可以保證FTP賬戶(hù)有寫(xiě)權(quán)限
shell> cd cmstop/
shell> chown –R root:apache .
# 其次對(duì)整個(gè)目錄配置成目錄755,文件644權(quán)限
shell> find . -type d | xargs chmod 755
shell> find . -type f | xargs chmod 644
# 最后再對(duì)需要可寫(xiě)的目錄設(shè)置為可寫(xiě)
shell> chmod -R 777 data/ public/upload/ public/www/ public/img/apps/special/templates/ public/img/apps/special/scheme/
(2) 模版目錄
雖然CmsTop后臺(tái)提供了在線修改模版的功能,提供了一定的方便,但是一旦黑客通過(guò)其他途徑拿到了后臺(tái)帳號(hào)密碼,并進(jìn)入了后臺(tái),就可以在線修改模版并植入木馬程序。
為了安全起見(jiàn),我們強(qiáng)烈的建議用戶(hù)不允許在線修改模版,因?yàn)槟惴奖?,黑客們也喜歡。
通過(guò)FTP或SFTP軟件來(lái)進(jìn)行模版修改,同時(shí)開(kāi)啟FTP與SFTP的操作日志。
(3) 定時(shí)檢查日志與會(huì)員登錄日志
作為網(wǎng)站webmaster,養(yǎng)成定時(shí)查看日志的習(xí)慣才是好同志。
通過(guò)開(kāi)啟CmsTop后臺(tái)的操作日志,并定時(shí)查看是否有非法登入后臺(tái)的管理員賬戶(hù),是否有非法訪問(wèn)后臺(tái)地址的行為。

(4) 檢查后臺(tái)robots.txt文件
如果后臺(tái)可以通過(guò)外網(wǎng)直接訪問(wèn),請(qǐng)注意檢查后臺(tái)訪問(wèn)目錄的robots.txt文件,防止搜索引擎抓取,某天您發(fā)現(xiàn)百度能直接搜索到網(wǎng)站后臺(tái)地址,這是很尷尬的事情啊。
shell> vi cmstop/public/admin/robots.txt
User-agent: *
Disallow: /
CmsTop使用過(guò)程中,如發(fā)現(xiàn)已知的安全漏洞, 官方會(huì)在第一時(shí)間修復(fù)漏洞并提供補(bǔ)丁包,并通知我們的客戶(hù)及時(shí)打上補(bǔ)丁,避免再次入侵,造成更大損失。
如果您在使用過(guò)程中發(fā)現(xiàn)有入侵現(xiàn)象,請(qǐng)及時(shí)與我們聯(lián)系,我們會(huì)安排工程師進(jìn)行網(wǎng)站掃描與清理工作。
如果您在使用過(guò)程中自行發(fā)現(xiàn)了隱藏的程序漏洞,也請(qǐng)及時(shí)與我們聯(lián)系,我們會(huì)慷慨的贈(zèng)予禮品表示感謝。
如果網(wǎng)站因?yàn)槟承┰虮蝗肭只虮粧祚R,可以通過(guò)以下簡(jiǎn)易手段進(jìn)行排查,快速解決問(wèn)題,另外也請(qǐng)及時(shí)聯(lián)系我們的技術(shù)支持人員,進(jìn)行排查。
(1) 模版文件檢查
一般模版文件植入木馬,都是通過(guò)訪問(wèn)動(dòng)態(tài)腳本加載模版運(yùn)行,一般都要接收外部參數(shù),通過(guò)以下三句指令進(jìn)行基本的檢查:
shell> grep –rl “_REQUEST”templates/
shell> grep –rl “_POST”templates/
shell> grep –rl “preg_replace”templates/
(2) 可執(zhí)行PHP目錄檢查
可執(zhí)行PHP目錄有public/app,public/mobile,public/wap等,同樣通過(guò)以上指令進(jìn)行檢查,搜索的是木馬的特征碼。鑒于木馬的變種實(shí)在是太多,就不詳細(xì)舉例了:
shell> grep –rl “特征” public/app
…
(3) 定期檢查訪問(wèn)日志文件
通常入侵會(huì)來(lái)自于前臺(tái)的動(dòng)態(tài)域名,可通過(guò)以下指令對(duì)訪問(wèn)日志的URL進(jìn)行分組排序并分析:
#查看訪問(wèn)次數(shù)最多的url
cat /var/log/httpd/app.domain-access_log |tail -10000|awk '{print $7}'|sort|uniq -c|sort -nr|less
如果您有多臺(tái)Web服務(wù)器,則需要分別查看。
CmsTop默認(rèn)提供了備份腳本,每天凌晨對(duì)網(wǎng)站程序和模版以及數(shù)據(jù)庫(kù)進(jìn)行備份,腳本文件路徑請(qǐng)與CmsTop技術(shù)支持聯(lián)系。
網(wǎng)站的附件由于可能容量較大,需要客戶(hù)手動(dòng)備份或通過(guò)其他硬件設(shè)備支持。
webmaster需要定時(shí)查看備份腳本是否還在正常運(yùn)行。以防出現(xiàn)故障后無(wú)法回復(fù)。
如果您的服務(wù)器運(yùn)行了不止CmsTop一個(gè)產(chǎn)品,還有如DiscuzX、DedeCMS等開(kāi)源產(chǎn)品,請(qǐng)及時(shí)關(guān)注這些產(chǎn)品的安全信息,并做好補(bǔ)丁工作。
另外如果您的服務(wù)器使用Apache,可以參考1.3.3進(jìn)行虛擬主機(jī)的PHP執(zhí)行限制,可以有效的防范跨站攻擊。
猛擊以下地址可查閱已知產(chǎn)品的漏洞: