Linux常見系統(tǒng)故障:su切換用戶帶來的疑惑
這是一個(gè)客戶的案例,客戶的一臺(tái)Oracle數(shù)據(jù)庫(kù)服務(wù)器突然宕機(jī)了,由于在線業(yè)務(wù)的需要,客戶沒有考慮太多就直接重啟了服務(wù)器,系統(tǒng)重新啟動(dòng)后沒有出現(xiàn)問題,可是接下來,當(dāng)客戶準(zhǔn)備切換到oracle用戶下啟動(dòng)數(shù)據(jù)庫(kù)時(shí),怎么都無法進(jìn)行su切換,于是問題出現(xiàn)了。
1、案例現(xiàn)象
在root用戶下,su切換到一個(gè)普通用戶oracle卻發(fā)生了錯(cuò)誤,如圖1所示。
圖1 su切換發(fā)生Permission denied錯(cuò)誤
于是,嘗試直接通過oracle用戶登錄系統(tǒng),發(fā)現(xiàn)此時(shí)的oracle用戶也無法登錄了,出現(xiàn)與上面同樣的錯(cuò)誤。
2、解決思路
從上面錯(cuò)誤提示可知是權(quán)限出現(xiàn)了問題,那么可以從權(quán)限入手進(jìn)行排查,基本思路如下:
● 用戶目錄/home/oracle權(quán)限問題。
● su程序執(zhí)行權(quán)限問題。
● 程序依賴的共享庫(kù)權(quán)限問題。
● SELinux問題導(dǎo)致。
● 系統(tǒng)根空間問題。
3、排查問題
根據(jù)上面的思路,逐一檢查,考慮到su在切換到oracle用戶時(shí)會(huì)讀取oracle目錄下的環(huán)境變量配置文件,因此,首先檢查/home/oracle目錄的權(quán)限是否存在問題:
- [root@loaclhost home]# ls -al /home|grep oracle
- drwx---- 4 oralce oinstall 4096 01-31 10:45 oracle
從輸出可知,/home/oracle目錄的屬主是oracle用戶,而oracle用戶對(duì)這個(gè)目錄具有“rwx”權(quán)限,因此,oracle用戶目錄的權(quán)限設(shè)置是正確的,可以排除這個(gè)問題。
接著檢查su執(zhí)行權(quán)限問題:
- [root@loaclhost home]# 11 /bin/su
- -rwsr-xr-x 1 root root 24120 2007-11-30 /bin/su
可見su命令執(zhí)行權(quán)限也沒有問題,這個(gè)問題也排除了。
繼續(xù)檢查su依賴的共享庫(kù)權(quán)限,使用ldd命令檢查su命令依賴的共享庫(kù)文件,如圖2所示。
圖2 通過ldd命令檢查su命令依賴的共享庫(kù)文件
根據(jù)上面的操作,依次檢查su命令依賴的每個(gè)庫(kù)文件的權(quán)限,發(fā)現(xiàn)也都是正常的,都具有可執(zhí)行權(quán)限,因此,共享庫(kù)的問題也排除了。
根據(jù)上面的思路,繼續(xù)檢查SELinux的設(shè)置,執(zhí)行命令如圖3所示。
圖3 檢查SELinux的設(shè)置
由輸出可知,SELinux處于關(guān)閉狀態(tài),這個(gè)原因也排除了。
到目前為止,問題變得撲朔迷離,到底是哪里出現(xiàn)問題了呢?作為L(zhǎng)inux運(yùn)維人員,例行檢查系統(tǒng)根分區(qū)狀態(tài)是非常必要的,那么首先檢查一下根分區(qū)的磁盤空間大小,發(fā)現(xiàn)剩余空間還有很多,排除空間問題。既然報(bào)的錯(cuò)誤是權(quán)限有問題,那么只要以權(quán)限為線索,不偏離這個(gè)核心就沒錯(cuò),于是繼續(xù)嘗試檢查/home目錄下各個(gè)用戶的權(quán)限,執(zhí)行命令如圖4所示。
圖4 檢查/home目錄下各個(gè)用戶的權(quán)限
從輸出看每個(gè)用戶的目錄權(quán)限,都是“rwx------”,即“700”,完全沒有問題。仔細(xì)檢查思路,發(fā)現(xiàn)當(dāng)前的目光一直停留在用戶對(duì)應(yīng)的目錄上,而忽略了其他輸出信息,而問題就藏在之前沒有關(guān)注的信息中。在這個(gè)命令輸出的前兩行中,第一行權(quán)限對(duì)應(yīng)的目錄是“.”,代表當(dāng)前目錄,也就是/home目錄,權(quán)限為“rwxr-xr-x”,即“755”,第二行權(quán)限對(duì)應(yīng)的目錄是“..”,也就是根目錄,權(quán)限卻為“rw-rw-rw-”,即“666”,此時(shí),問題終于查找到了,原來是根目錄權(quán)限問題。
將根目錄權(quán)限設(shè)置為“rw-rw-rw-”,顯然是不正常的。在正常情況下根目錄的權(quán)限應(yīng)該是“755”,為何設(shè)置成了這樣,很大的可能是誤操作。通過ls命令查看根目錄的權(quán)限時(shí)展示不是很清楚,也容易被很多運(yùn)維人員忽略,其實(shí)我們可以通過另一個(gè)命令stat來詳細(xì)查看每個(gè)目錄的權(quán)限,如圖5所示。
圖5 通過stat命令查看根目錄權(quán)限
通過這個(gè)命令,可以很清晰地看到,根目錄的權(quán)限是“0666”,這才是導(dǎo)致su執(zhí)行失敗的根本原因。
4、解決問題
知道了問題產(chǎn)生的原因,解決問題就非常簡(jiǎn)單,執(zhí)行如下命令:
- [root@localhost ~]# chmod 755 /
然后就可順利執(zhí)行su切換命令。
最后,做個(gè)簡(jiǎn)單的總結(jié),這個(gè)問題主要是由于根目錄沒有可執(zhí)行權(quán)限,而Linux下所有的操作都是在根目錄下進(jìn)行的,進(jìn)而導(dǎo)致/home/oracle目錄沒有執(zhí)行權(quán)限。其實(shí)根目錄權(quán)限的丟失對(duì)于系統(tǒng)中運(yùn)行的每個(gè)用戶存在同樣的影響。因此,在權(quán)限出現(xiàn)問題時(shí),一定要注意根目錄的權(quán)限。