服務(wù)器巡檢方式較多,主要分為手工巡檢和自動(dòng)巡檢,巡檢內(nèi)容也因信息系統(tǒng)各異側(cè)重不同。本文主要對(duì)Linux服務(wù)器日常巡檢內(nèi)容和批量自動(dòng)巡檢進(jìn)行探討,從而提高管理員工作效率。
Linux服務(wù)器日常巡檢,除了硬件必須現(xiàn)場(chǎng)檢查環(huán)境溫濕度、設(shè)備風(fēng)扇和設(shè)備狀態(tài)燈等外,其他都可以遠(yuǎn)程登錄控制臺(tái)通過(guò)命令方式加以檢查。巡檢內(nèi)容主要包括Linux系統(tǒng)、CPU、內(nèi)存、文件系統(tǒng)、網(wǎng)絡(luò)服務(wù)、安全、日志、定時(shí)任務(wù)和應(yīng)用等方面。
系統(tǒng)主要檢查系統(tǒng)內(nèi)核版本、發(fā)行版本、主機(jī)名、是否啟用SELinux、默認(rèn)語(yǔ)言、編碼、系統(tǒng)當(dāng)前時(shí)間和最后啟動(dòng)時(shí)間等。
# uname –a
//查看內(nèi)核版本情況
# head -n 1 /etc/issue
//查看系統(tǒng)發(fā)行版本
# hostname
//查看計(jì)算機(jī)名
# /usr/sbin/sestatus
//查看SELinux啟用狀態(tài)
# cat /etc/sysconfig/i18n
//查看系統(tǒng)語(yǔ)言和編碼
# date +'%F%T'
//查看系統(tǒng)當(dāng)前時(shí)間
# uptime
//查看系統(tǒng)最后啟動(dòng)時(shí)間
# cat /proc/cpuinfo
通過(guò)該命令,可以詳細(xì)了解CPU的品牌、型號(hào)、個(gè)數(shù)、頻率、核數(shù)、超線程等信息。
# top
top命令動(dòng)態(tài)顯示,可以詳細(xì)查看CPU使用情況,%us表示用戶占用CPU百分比,%sy系統(tǒng)占用CPU百分比,%ni進(jìn)程占用CPU百分比,%id空閑CPU百分比,%wa等待輸入輸出CPU百分比,%wa一般不能高于20%-30%。top命令還提供了系統(tǒng)1分鐘前、5分鐘前和15分鐘前負(fù)載平均值,類似命令uptime。
主要檢查服務(wù)器內(nèi)存總量、已使用內(nèi)存、可用內(nèi)存、緩存、Swap交換分區(qū)信息??捎脙?nèi)存過(guò)低,系統(tǒng)負(fù)載過(guò)重,會(huì)造成系統(tǒng)速度緩慢。
# free –m
//查看內(nèi)存使用情況
主要檢查文件系統(tǒng)掛載情況,文件系統(tǒng)分區(qū)情況、文件系統(tǒng)空間使用情況、inode使用情況和目錄所占空間大小等。如果文件系統(tǒng)可用空間低于20%,需要及時(shí)刪除無(wú)用數(shù)據(jù)或擴(kuò)充存儲(chǔ)空間。
# cat /etc/fstab
//查看文件系統(tǒng)掛載表
# fdisk –l
//查看文件系統(tǒng)分區(qū)情況
# df –lh
//查看文件系統(tǒng)空間使用情況
# df –i
//查看inode使用情況
# du -sh /opt
//查看目錄/opt所占空間大小
通過(guò)網(wǎng)絡(luò)檢查,了解網(wǎng)卡IP地址配置、系統(tǒng)路由表、網(wǎng)絡(luò)所有連接、網(wǎng)絡(luò)TCP/UDP監(jiān)聽(tīng)端口和系統(tǒng)后臺(tái)服務(wù)等。
# ifconfig –a
//查看IP地址配置
# route –n
//查看系統(tǒng)路由表
# netstat –an
//查看網(wǎng)絡(luò)連接
# netstat -lntp
//查看網(wǎng)絡(luò)TCP監(jiān)聽(tīng)端口
# netstat –lnup
//查看網(wǎng)絡(luò)UCP監(jiān)聽(tīng)端口
# chkconfig –list
//查看系統(tǒng)后臺(tái)服務(wù)
# /etc/rc.d/rc.local
//查看自啟動(dòng)服務(wù)
系統(tǒng)安全檢查環(huán)節(jié)非常重要。通過(guò)安全檢查,可以知道系統(tǒng)賬號(hào)、組和用戶權(quán)限是否異常,系統(tǒng)密碼策略、用戶最近登錄系統(tǒng)情況,當(dāng)前哪些用戶在線等。
# cut -d: -f1 /etc/passwd
//查看系統(tǒng)所有用戶
# cut -d: -f1 /etc/group
//查看系統(tǒng)所有組
# grep -v "#" /etc/login.defs | grep -E"PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE"
//檢查系統(tǒng)密碼策略
# last
//用戶最近登錄系統(tǒng)情況
# w
//當(dāng)前在線用戶
Linux系統(tǒng)擁有強(qiáng)大的日志記錄功能,能忠實(shí)記錄系統(tǒng)內(nèi)核和各類程序、服務(wù)產(chǎn)生的錯(cuò)誤信息、警告信息和其他普通信息。這些信息有助于管理員了解系統(tǒng)的運(yùn)行狀況、賬號(hào)登錄注銷操作情況、系統(tǒng)面臨安全威脅等,對(duì)系統(tǒng)故障診斷至關(guān)重要。系統(tǒng)日志以syslog格式存儲(chǔ)。
# more /var/log/message
//查看系統(tǒng)報(bào)錯(cuò)日志
# more /var/log/secure
//查看系統(tǒng)安全日志
# more /var/log/boot.log
//查看系統(tǒng)引導(dǎo)日志
Linux的定時(shí)任務(wù)守護(hù)進(jìn)程是crond,類似Windows系統(tǒng)的計(jì)劃任務(wù),可周期性地執(zhí)行系統(tǒng)任務(wù)和用戶應(yīng)用或腳本。用戶數(shù)據(jù)備份或數(shù)據(jù)庫(kù)導(dǎo)出備份等,都可編寫成腳本放入定時(shí)任務(wù)周期執(zhí)行。
# crontab –l
//查看當(dāng)前用戶的計(jì)劃任務(wù)
檢查指定應(yīng)用程序是否在線運(yùn)行,主要檢查該應(yīng)用程序的進(jìn)程是否正常運(yùn)行即可。例如檢查nginx網(wǎng)站服務(wù)器:
# ps -ef|grep nginx
隨著Linux服務(wù)器數(shù)量增多,如果管理員登錄控制臺(tái),手工輸入各類指令對(duì)服務(wù)器性能指標(biāo)、系統(tǒng)日志進(jìn)行逐臺(tái)巡檢,并將命令輸出結(jié)果采集匯總,效率不高。
SecureCRT是常用的終端仿真程序,有完善的腳本支持功能(如圖1),可批量對(duì)Linux服務(wù)器進(jìn)行自動(dòng)巡檢。
腳本工作目錄是D:work,在該目錄下創(chuàng)建Linux服務(wù)器清單文件linux-ip.txt,該文件由服務(wù)器IP、root用戶和root密碼三部分組成,空格分開。如:
192.168.1.1 root Abcd1234
192.168.1.2 root Abcd1234
...
圖1 SecureCRT腳本執(zhí)行界面
下面的SecureCRT執(zhí)行腳本,以查看Linux內(nèi)核信息為例,批量對(duì)所有Linux服務(wù)器進(jìn)行自動(dòng)巡檢,并將巡檢內(nèi)容采集后記錄成文本文件,供管理員進(jìn)一步分析匯總生成巡檢報(bào)告,非常實(shí)用,有興趣的朋友可根據(jù)實(shí)際巡檢內(nèi)容對(duì)腳本代碼進(jìn)行擴(kuò)展。
#$language ="VBScript"
#$interface = "1.0"
Sub Main
Const ForReading = 1
Dim fso,file1,line,params,path
path = "d:work"
Set fso = CreateObject("Scripting.FileSystem Object")
Set file1 = fso.Open TextFile(path & "linux-ip.txt" ,Forreading, False)
crt.Screen.Synchronous= True
DO While file1.AtEnd OfStream <> True
line = file1.ReadLine
if line<>"" then
params = Split (line)
if params(0)<>"" then
On Error Resume next
'SSH登錄Linux服務(wù)器
crt.Session.Connect "/SSH2 /L " & params(1) & "/PASSWORD " & params(2)& " /C AES-128 /M MD5 " ¶ms(0)
crt.Screen.waitFor String "~]#"
'以IP地址為文件名記錄SecureCRT session 日志
crt.session.LogFile Name = path & params(0)&".txt"
crt.session.Log(true)
'查看操作系統(tǒng)內(nèi)核信息
crt.Screen.Send"uname -a" & chr(13)
crt.Screen.waitFor String "]#"
crt.Session.Disconnect
End if
End if
loop
crt.Screen.Synchronous= False
file1.Close
End Sub