Files

觸摸:無法觸摸“測試”:權限被拒絕

  • April 18, 2020

我正在嘗試在目錄中創建一個文件,但我得到:

`touch`: cannot touch ‘test’: Permission denied

這是我的命令:

[user@xxx api]$ ls -l
total 184
...
drwxrwxr-x  2 root root   4096 2016-04-12 14:38 public 
..
[user@xxx api]$ cd ./public
[user@xxx public]$ touch test
touch: cannot touch ‘test’: Permission denied

如果您沒有寫入執行權限,則無法編輯公共目錄的內容。

  • 您表示您正在嘗試創建一個新文件。如果該test文件在 中不存在publictouch將嘗試創建一個新文件。如果沒有對父目錄的寫入執行權限,它就無法做到這一點。遍歷目錄需要execute;需要 write 才能為新文件添加 inode 條目。顯然,您沒有這些權限中的一項或兩項。
  • 如果test文件已經存在於 中publictouch預設情況下會更新文件的修改時間。由於修改日期/時間儲存在文件的 inode 中,因此只需要對該文件的訪問權。如果文件已經存在,您將需要使用類似命令檢查文件的權限以確定您是否具有寫入權限。ls -l public/test

目錄上的權限位遮罩rwxrwxr-x, 表示:

  • 使用者,即目錄的root所有者,具有對目錄的寫入權限,第一個rwx塊所示。該使用者還可以讀取目錄(r位)並遍歷它以訪問其內容(x位)。
  • 組的成員root,即目錄上的組,本身不是root使用者,也具有類似的權限來讀取、寫入和遍歷目錄,如第二個rwx塊所示

r-x如最後一個塊所示,所有其他使用者只有讀取和執行權限。如前所述,對於目錄,執行權限允許您遍歷該目錄並訪問其內容。請參閱此問題以更清楚地了解這一點。

我如何獲得權限?

您將需要與您的系統管理員(可能是您!)交談以執行以下操作之一:

  • 使用類似的命令使您成為目錄的****所有者public/chown user public/。如果您是唯一需要擁有編輯權限的使用者,這將是合適的。
  • 可能創建一個具有合適名稱的新組,並使用類似的命令publiceditors將其設置為目錄上的組。確保您和任何其他需要能夠修改目錄的使用者被列為該組的成員。這種方法適用於多個使用者需要編輯功能的情況。public/``chgrp publiceditors public/
  • 使您的使用者帳戶成為root的成員(我不建議這樣做)。
  • 為您提供**登錄或偽裝root**的訪問權限,例如使用密碼sudo或密碼su``root
  • 使用類似的命令更改目錄的權限授予所有使用者寫入權限chmod o+w public。請注意,這使框上的每個人都能夠編輯和刪除公共目錄中的文件。*您可能不想要這個!

*在沒有其他訪問控制強制執行的情況下,例如核心中的強制訪問控制。

目錄上下文中的讀執行權限是什麼意思?

假設您在 Linux 機器上,在目錄上,讀取權限位允許您讀取目錄列表。寫權限位允許您更新列出的目錄,這是創建文件*、編輯文件名、取消連結(刪除)文件所必需的。執行位允許您遍歷目錄、訪問其文件等。有關Linux 目錄權限的更多資訊。

  • 實際上,您正在將文件連結到目錄中。大多數情況下,您會在創建文件時執行此操作,但還有更複雜的範例。例如,對最初存在於文件系統中其他地方的文件進行硬連結將需要對連結的目標目錄的寫訪問權,儘管事實上您沒有創建新文件。

為什麼要對目錄進行訪問?

您需要能夠寫入目錄以添加對您正在添加的文件的相關 inode 的引用。

引用自:https://unix.stackexchange.com/questions/276142