[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 真的是很強大的一個偵錯方式,
真相永遠只有一個呀~^^/
(本頁面已被瀏覽過 182 次)