File-Permissions

在 linux 中訪問文件時如何解決“權限被拒絕”錯誤?

  • June 9, 2019

我的問題是關於在以特定使用者身份訪問文件時出現“權限被拒絕”錯誤時的一般故障排除,這是一個具體範例,我可以在其中使用一些額外的幫助:

作為使用者’builder’,我的主目錄中有一個屬於組’builders’的文件夾’repo’。目前內容如下:

$ pwd
/home/builder/repo
$ ls -la
total 4
drwxr-sr-x 2 builder builders  20 Jun  9 02:28 .
drwxr--r-- 4 builder builder  123 Jun  7 23:36 ..
-rw-rw-r-- 1 builder builders   5 Jun  9 02:18 status

因此,我可以看到“builders”組中的每個人都應該能夠訪問該“status”文件。應該注意的是,作為“builder”使用者,我可以閱讀它,文件沒有損壞且可讀,即cat /home/builder/repo/status返回其內容。

但是,由於某種原因,我無法以另一個使用者的身份訪問它 - 恰好在 builders 組中的“ec2-user”:

$ whoami
ec2-user
$ groups
ec2-user adm wheel systemd-journal docker builders
$ ls -la /home/builder/repo/status
ls: cannot access /home/builder/repo/status: Permission denied
$ cat /home/builder/repo/status
cat: /home/builder/repo/status: Permission denied

我顯然遺漏了一些東西,但我仍然試圖回答為什麼屬於同一組的使用者無法訪問該文件。還有什麼可以告訴我我需要做什麼(例如作為超級使用者或所有者)來正確授予對目錄/文件的組訪問權限 - 或者只是找出為什麼讀取權限對某些使用者不起作用?我為自己找到的唯一答案就是仔細檢查所有權資訊和訪問控制位,但在上面的範例中,一切看起來都不錯。

您收到權限被拒絕錯誤,因為該/home/builder目錄缺少x組和其他人的(執行)位。這可以防止組成員和其他人更改/home/builder目錄或訪問下面的任何內容。

根據是否只是意外設置,您可以將x組的(執行)位添加到/home/builder

chmod g+x /home/builder  

如果您希望組成員僅訪問子文件夾並阻止他們列出 的內容/home/builder,您可以添加x(執行)位並r從文件夾中刪除(讀取)位。

chmod g+x,g-r /home/builder

您可能還想更改上述o(其他)的權限或將其完全刪除。


對於此類問題namei非常有幫助,因為它可以顯示路徑下文件的所有權限。您應該以有權獲得所需輸出的使用者身份執行它。

# namei -olm /tmp/test/testdir/status 
f: /tmp/test/testdir/status
dr-xr-xr-x root root /
drwxrwxrwt root root tmp
drwxr-x--x root root test
drwxr-xr-x root root testdir
-rw-r--r-- root root status

引用自:https://serverfault.com/questions/970699