File-Permissions
在 linux 中訪問文件時如何解決“權限被拒絕”錯誤?
我的問題是關於在以特定使用者身份訪問文件時出現“權限被拒絕”錯誤時的一般故障排除,這是一個具體範例,我可以在其中使用一些額外的幫助:
作為使用者’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