[Linux] 使用 strace 指令,偵錯目錄權限怪異的問題

[Linux] 使用 strace 指令,偵錯目錄權限怪異的問題

今天專案遇到一個羅生門,

有人回報某個 log 目錄的權限有點奇怪,

只有擁有者 (owner) 本身可以進入,其他人都不能進入:

drwx------. 3 testuser testuser    57 Jun 28 16:18 log

 

嗯… 但這個目錄是另一個協力部門的模組產生的,

問了一下他們,說並沒有去設定目錄權限,

把問題又拋了回來…

 

再次跟問題回報者確認一下細節,

似乎是在舊版本的程式,才會產生這個問題。

檢查了一下 umask,在新舊版本間的值都是很正常的 0022,

檢查一下我們自己的程式,也沒有任何地方去修改 log 目錄權限,

真是有點束手無策…

 

後來想到了無敵的 strace~

在正常的機器上用 strace 執行協力的模組,

並用 grep 關注 log 相關的訊息:

strace -f ./module 2>&1 | egrep log

 

結果如下,

看來模組會先用 stat() 檢查目錄是否存在,

當不存在時,呼叫 mkdir() 並且帶了 0777 這個權限,

配上 0022 umask,得到的是 0755 (rwxr-xr-x):

stat("/tmp/log/", 0x7ffcc0b08720) = -1 ENOENT (No such file or directory)
stat("/tmp/log", 0x7ffcc0b085e0) = -1 ENOENT (No such file or directory)
mkdir("/tmp/log", 0777) = 0

 

而在有問題的機器上,帶的則是 0700 權限,

配上 0022 umask,得到的是 0700 (rwx——):

mkdir("/tmp/log", 0700) = 0

 

這下謎題終於解開了,舊版的協力模組在建立目錄時,

因為帶了 0700 權限,所以最終建立出來的目錄就只有 owner 可以進入。

至於為什麼協力模組他們說沒有設定權限?

大概只能猜是不清楚這一段的程式…

 

不管怎樣,使用 strace 真的是很強大的一個偵錯方式,

真相永遠只有一個呀~^^/

(本頁面已被瀏覽過 28 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料