■ 四川 賴文書
編者按: 近期筆者單位遇到Exadata數(shù)據(jù)庫(kù)未及時(shí)更改密碼導(dǎo)致定時(shí)任務(wù)無法正常運(yùn)行,就此引發(fā)歸檔日志空間占滿,最終導(dǎo)致數(shù)據(jù)庫(kù)被掛起應(yīng)用系統(tǒng)無法登錄。
筆者單位配 備 了1套Exadata X5-2的數(shù)據(jù)庫(kù)一體機(jī),為應(yīng)用提供后端數(shù)據(jù)管理,Exadata是 Oracle軟硬件整合一體化產(chǎn)品,主要用于解決超大型數(shù)據(jù)庫(kù)所存在的普遍性性能瓶頸,也就是磁盤存儲(chǔ)系統(tǒng)向數(shù)據(jù)庫(kù)服務(wù)器傳輸大量的數(shù)據(jù)。Exadata相當(dāng)于Oracle通過硬件和軟件的組合優(yōu)化有效的解決了存儲(chǔ)層和數(shù)據(jù)庫(kù)層之間的傳輸瓶頸。
Exadata數(shù)據(jù)庫(kù)一體機(jī)軟件層面的安全配置相比其他Oracle數(shù)據(jù)庫(kù)平臺(tái)也更高。此次故障也是由于我們對(duì)這方面的特性了解不夠深入,因普通的Oracle Linux用戶密碼過期引發(fā)了信息系統(tǒng)的故障,并在處理過程中大費(fèi)周折。
圖1 Oracle告警日志
運(yùn)維的同事突然接到用戶反饋,應(yīng)用系統(tǒng)無法登錄,經(jīng)確認(rèn)系統(tǒng)的Web登錄頁(yè)面能正常打開,就是輸入用戶名密碼后報(bào)錯(cuò)。對(duì)應(yīng)用服務(wù)器的操作系統(tǒng)、中間件和部署的應(yīng)用進(jìn)行檢查,均沒有發(fā)現(xiàn)任何問題,結(jié)合登錄報(bào)錯(cuò)信息,對(duì)后端數(shù)據(jù)進(jìn)行檢查,能正常ping通數(shù)據(jù)庫(kù)IP地址,也能正常Telnet應(yīng)用連接Oracle的1521端口。我們的監(jiān)測(cè)平臺(tái)北塔BTSO也對(duì)Exadata重點(diǎn)監(jiān)測(cè),以SNMP協(xié)議從Linux操作系統(tǒng)層面,同時(shí)也從數(shù)據(jù)庫(kù)實(shí)例面層作了實(shí)時(shí)監(jiān)測(cè),此時(shí)均未發(fā)現(xiàn)Oracle數(shù)據(jù)庫(kù)相關(guān)報(bào)警。
再三分析排查,基本確定引起無法登錄原因還是在后端數(shù)據(jù)庫(kù)。在檢查監(jiān)測(cè)平臺(tái)上數(shù)據(jù)庫(kù)實(shí)時(shí)運(yùn)行數(shù)據(jù)時(shí),才猛然發(fā)現(xiàn)兩臺(tái)DB(數(shù)據(jù)庫(kù))節(jié)點(diǎn)的會(huì)話數(shù)都是0,平時(shí)都是在1000左右,根據(jù)以往巡檢歷史數(shù)據(jù)的經(jīng)驗(yàn),即使在晚上也是400左右。再次查看近24小時(shí)會(huì)話數(shù)曲線圖,確認(rèn)從昨晚凌晨0點(diǎn)45分會(huì)話數(shù)開始異常,持續(xù)到現(xiàn)在。
在確定了引發(fā)故障的具體區(qū)域范圍后,立刻聯(lián)系公司高級(jí)DBA進(jìn)行遠(yuǎn)程協(xié)助診斷。通過SQLPlus能正常連接到數(shù)據(jù)庫(kù)實(shí)例,確認(rèn)Oracle數(shù)據(jù)庫(kù)也是open狀態(tài),只是用select語句進(jìn)行數(shù)據(jù)表檢索時(shí)無法返回結(jié)果,再結(jié)合數(shù)據(jù)庫(kù)的alert告警日志分析如圖1,有經(jīng)驗(yàn)的DBA很快意識(shí)到是歸檔日志空間滿了導(dǎo)致數(shù)據(jù)庫(kù)被hang住。
由于歸檔日志是Oracle數(shù)據(jù)庫(kù)在線日志文件的備份,用于恢復(fù)到任意時(shí)間點(diǎn)而不丟數(shù)據(jù),所以此時(shí)還不能急于直接清理,先檢查這些歸檔日志是否已經(jīng)有相應(yīng)備份。公司使用NBU(Veritas NetBackup Appliance)一體機(jī)對(duì)該數(shù)據(jù)庫(kù)進(jìn)行的備份,確認(rèn)備份無誤后進(jìn)行手動(dòng)清理歸檔日志所在FRA(Flash Recovery Area)快速恢復(fù)區(qū)目錄中的文件,由于是在操作系統(tǒng)手動(dòng)刪除,存儲(chǔ)數(shù)據(jù)庫(kù)相關(guān)元數(shù)據(jù)的控制文件無法感知其變化,還得在RMAN(Recovery Manager)恢復(fù)管理器使用“crosscheck archivelog all”命令進(jìn)行更新,待一系列操作完成后,數(shù)據(jù)恢復(fù)正常,用戶也能順利地登錄應(yīng)用系統(tǒng)了。
緊急的問題算是解決了,只是數(shù)據(jù)庫(kù)的歸檔日志空間為什么會(huì)滿呢?以往一直在linux層面配置了Crontab定時(shí)任務(wù),使用shell腳本自動(dòng)清除指定天數(shù)以前的歸檔日志文件,難道腳本沒有正常工作,還得進(jìn)一步排查故障的深層原因。
圖2 無法編輯Crontab
首先檢查腳本文件/home/oracle/scripts/ArchRM.sh正常,再檢查確認(rèn)腳本配置如下:
e x p o r t T Z=A s i a/Shanghai
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/dbhome_1
export ORACLE_SID=CCK02
export PATH=$PATH:$ORACLE_HOME/bin
rman target=/ log=/home/oracle/scripts/ArchRM.log < run { d e l e t e n o p r o m p t archivelog until time"sysdate-5"; #刪除5天前的oracle歸檔日志 } EOF 正找不著頭緒時(shí),用crontab -e編輯任務(wù)時(shí)居然報(bào)錯(cuò)“Authentication token expired,You (oracle) are not allowed to access to (crontab) because of pam configuration.” 如圖2所示。起初判斷報(bào)錯(cuò)為Oracle用戶沒有相關(guān)權(quán)限,于是查詢網(wǎng)上資料怎樣給普通用戶授權(quán),依次檢查各項(xiàng)配置又都是正常的。再回頭細(xì)看報(bào)錯(cuò)信息,其中Authentication token是用戶登錄Linux后生成的,由于此次一系列操作中,均是以root賬號(hào)登錄,再用命令“su- oracle”切換到Oracle用戶的,于是試著“ssh -l -u oracle@192.168.100.5”登錄居然失敗。難道是密碼記錯(cuò)了,試了多次均無果,只得以root賬號(hào)下用命令“passwd oralce”強(qiáng)制修改密碼,然后再用Oracle密碼登錄結(jié)果還是一樣,真是邪門兒了,又沒啥提示信息,診斷的方向都沒了。 我們只能再向公司資深工程師求助,反饋Exadata的Oracle用戶無法登錄Linux,剛開始他也是提出了上面改密碼的方法,可是試過了沒用。無奈只得遠(yuǎn)程協(xié)助檢查,用命令“cat /etc/passwd |grep oracle”檢查配置文件該用戶最后一列的shell類型不是“/sbin/nologin;cat /etc/shadow|grep oracle”,第二列密碼項(xiàng)也非“*”; 測(cè)試從不同網(wǎng)卡的IP進(jìn)行登錄,情況依舊;檢查了ssh配置文件“/etc/ssh/ssh_config”,未發(fā)現(xiàn)有任何對(duì)該登錄的限制;嘗試passwd修改密碼再登錄情況依舊。解決問題的思路都耗光了,到底原因在哪兒呢? 以前在學(xué)習(xí)視頻課程中,還略微記得講過pam模塊(Pluggable Authentication Module)和用戶登錄驗(yàn)證有關(guān),于是搜索關(guān)鍵字“l(fā)inux賬號(hào)密碼鎖定策略”,發(fā)現(xiàn)一篇相關(guān)文章,從RedHat Linux6開 始pam.d使 用pam_tally2.so,而 老 版 本使用的pam_tally.so的“reset”、”no_magic_root”和”no_reset”選項(xiàng)在pam_tally2.so已經(jīng)沒有了;sshd所包含的pam認(rèn)證文件是password_auth,而不是system_auth。檢查Exadata主機(jī)操作系統(tǒng)相關(guān)文件,在/etc/pam.d/sshd發(fā)現(xiàn)存在對(duì)應(yīng)的配置如圖3,導(dǎo)致輸入錯(cuò)誤密碼被鎖定而無法登錄,且賬戶已鎖定時(shí)ssh登錄默認(rèn)是不會(huì)顯示任何信息的,可以修改sshd_config文件中的配置項(xiàng)ChallengeRespo nseAuthentication?yes?。 根據(jù)以上資料使用命令“pam_tally2 -u oracle”查看oralce賬戶的鎖定情況,再運(yùn)行命令“pam_tally2?-u?oracle?-r”重置賬戶的登錄失敗次數(shù),最后用Oracle賬戶順利登錄操作系統(tǒng),定時(shí)刪除過期歸檔日志任務(wù)也正常運(yùn)行了。 圖3 pam模塊配置sshd登錄 通過學(xué)習(xí)李亞著的《Oracle Exadata技 術(shù) 詳解》,才知道了一體機(jī)的安全相關(guān)配置情況。 1.最小安裝的原則。作為數(shù)據(jù)庫(kù)服務(wù)器只需要提供數(shù)據(jù)庫(kù)服務(wù),杜絕安裝其他不相關(guān)的應(yīng)用。 2.安裝啟動(dòng)最少的服務(wù)?!巴ǔ0惭b的服務(wù)越多,發(fā)生漏洞的機(jī)會(huì)也越多”。 總而言之,新課程背景下提高小學(xué)語文教學(xué)的有效性對(duì)于提高學(xué)生的語文水平具有重要的作用。教師在教學(xué)活動(dòng)中需要具備足夠的耐性,充分了解學(xué)生在學(xué)習(xí)過程中發(fā)現(xiàn)的問題。并且在教學(xué)活動(dòng)中需要不斷創(chuàng)新教學(xué)模式、豐富教學(xué)活動(dòng),不斷提高小學(xué)語文教學(xué)活動(dòng)的有效性。 3.使用安全增強(qiáng)工具。在Exadata的Cell節(jié)點(diǎn)是開啟了iptables服務(wù),并在其中加入了相應(yīng)的安全規(guī)則。 4.網(wǎng)段隔離的原則。Exadata共包括三個(gè)網(wǎng)段,生產(chǎn)網(wǎng)對(duì)外提供數(shù)據(jù)庫(kù)服務(wù),管理網(wǎng)是用來Exadata管理員對(duì)Exadata進(jìn)行維護(hù)和管理, 而私網(wǎng)則用于各節(jié)點(diǎn)內(nèi)部通信和交換數(shù)據(jù)。 5.移除圖形界面Xwindow。Exadata的管理并不需要圖形界面,所有的工作都可以通過命令行來完成。 6.對(duì)用戶和密碼進(jìn)行加固,對(duì)于放置核心數(shù)據(jù)的數(shù)據(jù)庫(kù)服務(wù)器,主要是為了防止暴力破解之類的方法給系統(tǒng)帶來的風(fēng)險(xiǎn)。 7.移除或者限制SSH。僅允許指定用戶組里面的用戶使用SSH登錄。 8.保證軟件包保持最(較)新。新版本不僅對(duì)程序本身bug做了修復(fù),同時(shí)對(duì)已發(fā)現(xiàn)的安全漏洞進(jìn)行了修復(fù)。 9.移除特殊權(quán)限SUID/SGID。Exadata安裝完成后已經(jīng)將不需要的權(quán)限移除了。 10.對(duì)NTP進(jìn)行優(yōu)化和加固。系統(tǒng)時(shí)間大幅度跳變可能引起Exadata數(shù)據(jù)庫(kù)服務(wù)器及存儲(chǔ)服務(wù)器宕機(jī)。 11.對(duì)內(nèi)核參數(shù)進(jìn)行加固,如禁用了IP包轉(zhuǎn)送、IP源路由等。 12.增強(qiáng)共享文件系統(tǒng)的安全性。 在廠商工程師安裝部署一體機(jī)時(shí)用OneCommand程序?qū)xadata進(jìn)行初始化,并且執(zhí)行完步驟ResecureMachine后,對(duì)初始密碼進(jìn)行重置,并且修改其復(fù)雜度,以使系統(tǒng)更加安全。 但是很多客戶已有公司的一套密碼及加固標(biāo)準(zhǔn)方 案,Exadata默 認(rèn) 的 加固方案可能并不適用。如果Exadata的安全方案進(jìn)行重新設(shè)置,那么需要先解除其默認(rèn)的安全限制。從OneCommand的安裝日志中可以看到ResecureMachine這一步實(shí)際上調(diào)用“/opt/oracle.SupportTools/harden_passwords_reset_root_ssh”這個(gè)腳本,要了解此腳本做對(duì)系統(tǒng)所做的配置,就要先查看其內(nèi)容。 cat /opt/oracle.SupportTools/harden_passwords_reset_root_ssh # sed -i "s/5,5,5,5,5 /disabled , disabled, 16 , 12 , 8 / g ;" /etc/pam.d /eystem-auth 此命令將/etc/pam.d/system-auth文 件 中的 5.5.5.5 用 disabled,disabled,16,12,8 替 換,替換以后新的密碼規(guī)則變?yōu)椋翰唤邮苋魏螁巫址愋偷目诹?,不接受任何兩種字符類型混合的口令,口令字(passphrases)最小長(zhǎng)度為16位,三種字符類型混合口令最小長(zhǎng)度為12位,四種字符類型混合口令最小長(zhǎng)度為5位。其中四種字符類型分別為“數(shù)字”、“小寫字母”、“大寫字母”及“其他字符”。要解除此限制,執(zhí)行與之相對(duì)應(yīng)的逆向替換命令即可。 # sed -i " s/ disabled, disabled , 16 , 12 , 8/ 5 , 5 , 5 , 5 , 5 / g ;" /etc/pam.d /eystem-auth #/bin/rm -rf /root/.ssh 從該命令可知,resecure這一步刪除了root用戶的密鑰,就意味著root用戶的ssh等效性被移除,如果需要撤銷這一步,那么需要重新建立root用戶的ssh等效性。幸運(yùn)的是在Exadata上,想要重建某一用戶的ssh等效性,并不需要單獨(dú)對(duì)每個(gè)節(jié)點(diǎn)逐一地進(jìn)行等效性配置。Exadata提供了一個(gè)名為setup_ssh_eq.sh的腳本用于重建ssh等效性。此命令的運(yùn)行格式如下: # /o p t/o r a c l e.SupportTools/setup ssh eg.sh /opt/oracle.SupportTools/onecommand/ all_group root 操作系統(tǒng)中Oracle賬號(hào)被修改成了90天密碼過期必須更改,可通過Linux命令“chage -M 99999 oracle”,即可使該賬號(hào)的密碼永不過期,或?qū)⒚艽a過期時(shí)間配置成符合公司安全策略。 此次故障是正是由于未及時(shí)按照規(guī)定更改操作系統(tǒng)密碼導(dǎo)致定時(shí)任務(wù)無法正常運(yùn)行,從而引發(fā)歸檔日志空間占滿,最終導(dǎo)致數(shù)據(jù)庫(kù)被掛起應(yīng)用系統(tǒng)無法登錄。同時(shí)暴露出我們運(yùn)維工作中一些薄弱的環(huán)節(jié)。另外我們對(duì)于Exadata操作系統(tǒng)的安全配置不夠熟悉,未能及時(shí)發(fā)現(xiàn)用戶密碼過期的情況,導(dǎo)致排查故障時(shí)找不到正確的方向,就因?yàn)椴僮飨到y(tǒng)的小問題引發(fā)了整個(gè)應(yīng)用系統(tǒng)的故障。Exadata安全配置初步分析
解除Exadata默認(rèn)的安全限制
總結(jié)