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

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

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