客戶一個oracle突然當機了,由於業務啟動,客戶下意識的重啟了服務器,系統是起來了,准備切換到oracle用戶下啟動數據庫,可以怎麼都無法su切換,真是火上澆油呀,描述如下:
在root用戶下,su到一個普通用戶oracle,得到如下錯誤:
[root@localhost ~]# su - oracle
su: warning: cannot change directory to /home/oracle: Permission denied
su: /bin/bash: Permission denied
而oracle用戶也無法通過直接登錄,出現同樣錯誤。
這是一個非常奇怪的問題,到底是什麼導致的呢?思路如下:
1,程序執行權限問題
2,程序依賴的共享庫權限問題
3,目錄權限問題
4,根空間問題。
檢查/bin/bash,權限正確,檢查/home/oracle權限正確,檢查/lib/ld-***.so,權限也正確。
繼續調試,檢查/etc/passwd,將oracle的home設置為/tmp,把/tmp設置為777,這個權限應該是最寬松的。
而su出現同樣的錯誤。
也就是oracle用戶無法訪問777權限的/tmp。
問題到底出現在哪裡呢?
最後
通過star命令,看到了問題根本,
[root@localhost ~]#stat /
輸出如下:因為你ls是看不到的。
File: “/”
Size: 1024 Blocks: 2 IO Block: 1024 目錄
Device: 803h/2051d Inode: 2 Links: 22
Access: (0666/drw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2007-12-01 22:28:48.000000000 +0800
Modify: 2007-12-01 22:28:34.000000000 +0800
Change: 2007-12-01 23:17:35.000000000 +0800
問題出來了,這裡的權限是錯誤的,X權限的丟失造成的。
[root@localhost ~]#chmod 755 /
修改後,問題消失。
產生上述問題的方法:
第一種,chmod 666 /,可以導致。
或者,
第二種,chmod 700 /lib/ld-xxxx.so,也可以導致su失敗。
有興趣可以自己試一下。
/ 權限的丟失對於各種運行在自己用戶身份上的daemon也存在同樣的影響。