天天看點

Linux目錄權限導緻程序打開檔案失敗的問題

最近在開發一個服務端程式,測試過程發現了一個小問題,借此記錄下。

場景的描述大緻是這樣的:程式以root使用者啟動,打開一個檔案A,fork一個子程序以非root使用者運作,改變檔案A的屬主為子程序的運作使用者;子程序在運作過程可能會重新打開檔案A

問題就是由重新打開檔案A觸發的,示範如下:

假設我把程式放在/root/test目錄下(預設情況下/root目錄的權限會特殊些,隻為友善示範, 實際上一般不會把程式安裝在該目錄下)

1.啟動程式

[root@localhost test]# ./sbin/server 
[root@localhost test]# ps auxf | grep server | grep -v grep
root        .  .      ?        Ss   :   : server: master
nobody      .  .      ?        S    :   :  \ server: worker
           

2.子程序執行重新打開檔案A的操作後收到一條錯誤

收到這樣一條錯誤一開始以為是檔案A的權限有問題

3.檢視檔案A的權限

[root@localhost test]# ls -l logs/
-rw-r--r--  nobody root  Oct  : error.log
           

4.接着檢視是否目錄權限問題

[root@localhost test]# ls -ld
drwxr-xr-x  root root  Oct  09:
           

都沒有發現問題,索性再看一下上級目錄權限呗

[root@localhost test]# ls -ld /root
drw-r-x---  root root  Oct  : /root
[root@localhost test]# ls -ld /
drwxr-xr-x  root root  Oct  09: /
           

問題就出在/root目錄沒給其他使用者權限(通過id指令得知子程序的有效使用者不屬于root使用者組),給其他使用者加上x權限(隻加r權限依然不能解決問題,本例需要的是能進入/root目錄的權限)再測試一下就可以了,測試完記得把/root的權限還原

啰嗦了這麼多,本例問題的原因總結一句話:程序的有效使用者沒有進入檔案A所在目錄或間接上級目錄的權限。

繼續閱讀