Linux

Linux 文件/文件夾權限

  • July 9, 2019

我有多個文件夾需要多個使用者訪問。具體來說,美杜莎(我用它來跟踪我還沒有備份的電視節目的劇集)、Plex(我用來將我的數字備份流式傳輸到我家周圍的各種設備)和媒體(這是我的使用者登錄名)使用 ssh 進入機器。我遇到的問題是,無論我做什麼,我都無法讓所有三個使用者同時訪問該文件夾。

我已將所有使用者添加到一個組,設置文件/文件夾權限以允許使用者、組和每個人設置的完整 rwx 權限,但似乎仍然無法讓所有三個同時工作。

所有文件/文件夾都在第二個硬碟驅動器 (sdb1) 上,而不是在引導驅動器上,以防萬一這很重要。硬碟驅動器的掛載點是 /media/media/storage2 但是我從 /media/ 開始執行所有命令,因為由於某種原因,如果我不這樣做,使用者最終將無法訪問驅動器上的任何內容。

sudo chown -R plex:server /media/當我想觀看某些內容時,我使用該命令將文件的 owner:groupOwner 更改為 plex。server 是我創建的包含所有使用者的組。

我使用該命令sudo find /media/ -type d -exec chmod 777 {} \;更改所有文件夾和sudo find /media/ -type f -exec chmod 777 {} \;所有文件的權限。

我確實意識到 777 對安全性不利,我原本打算使用 775,但在我弄清楚這一點之前,我希望 777 能解決這個問題,但事實並非如此。

我不確定我還能嘗試什麼來實現這一點。

編輯: 嘗試了 JHuffard 的建議,執行了sudo chown -R plex /media/,儘管顯示所有相關目錄和文件的sudo chgrp -R server /media/權限sudo chmod -R 777 /media/,但一切仍被鎖定。drwxrwxrwx

這些 ACL 命令僅適用於 Linux。首先,將所有所有權和權限設置為標準。

chown -R root:root /media
find /media -type d -exec chmod 0755 {} +
find /media -type f -exec chmod 0644 {} +

文件

接下來,決定如何正確使用訪問控制列表 (ACL)。(您知道有關哪些使用者和/或組需要對哪些文件或目錄進行讀取或寫入訪問的詳細資訊,但問題中沒有指定這些。)以下是一些範例。請記住,每個範例都設置了顯式 ACL,以便為文件(還不是目錄)正確定義 ACL。稍後,可以將 ACL預設 ACL 應用於目錄。下面-m是要塗抹的面膜。

# Give medusa user (u) read-write; give group_name (g) read; give others (o) read.
find /media -type f -exec setfacl -m u:medusa:rw-,g:group_name:r--,o:r--

# Give plex user (u) read-write. 
find /media -type f -exec setfacl -m u:plex:rw-

# Give server group (g) read-write. 
find /media -type f -exec setfacl -m g:server:rw-

# Give media user (u) read-write. 
find /media -type f -exec setfacl -m u:media:rw-

# Give media user (u) read-write, server group (g) read-write, others (o) read. 
find /media -type f -exec setfacl -m u:media:rw-,g:server:rw-,o:r--

目錄

應用於文件的任何 ACL 也可以應用於目錄,但略有不同的是,也可以設置預設 ACL ( -d)。通過使用該-d開關,目錄中的所有新文件系統對像都會自動繼承定義的 ACL。重要的是要記住,如果自動將 ACL 應用於新文件,則必須為目錄本身設置 ACL*和預設 ACL。*另請注意,在下面,執行 ( xin rwx) 是更改目錄 ( cd) 所必需的;但是,這並不意味著執行位適用於文件。相反,執行位僅適用於新目錄。

# For each directory itself:
find /media -type d -exec setfacl    -m u:media:rwx,g:server:rwx,o:r-x {} +

# To set a default ACL in each directory - the same command as above with the `-d` switch:
find /media -type d -exec setfacl -d -m u:media:rwx,g:server:rwx,o:r-x {} +

對每個 ACL 重複上述兩個命令,根據目標更改使用者和/或組。此操作堆疊 ACL,以便可以根據需要添加任意數量的 ACL,並為每個新文件系統對象自動分配 ACL。


可以使用“ugo”方法(例如:rwx)或八進制(例如:7)。

  • rwx
  • r--
  • rw-
  • r-x
  • 7
  • 4
  • 6
  • 5

換句話說,以下命令是等效的。

setfacl -m u:media:rwx,g:server:rwx,o:r-x {} +
setfacl -m u:media:7,g:server:7,o:5 {} +

組和其他遮罩的工作方式相同:g:groupname:---或組合如下。

u:username:---,g:groupname:---,o::---

我注意到一個冒號似乎也適用於“其他”。

u:username:---,g:groupname:---,o:---

不指定使用者名或組名會將遮罩應用於目前使用者/組所有權。


不確切知道哪些使用者或組需要什麼級別的訪問權限,很難更準確。可能需要首先進行分析,可能需要在目錄樹的更深處開始該過程。在第一次使用 ACL 時了解如何將它們全部刪除可能會有所幫助:setfacl -Rb /media. 此外,人們可能會使用info和/或man閱讀關於setfaclgetfacl和的手冊acl。還有很多關於 ACL 的問答。請務必辨別 ACL Q/A 是否適用於 Linux,因為那是有問題的作業系統。(根據主要的作業系統變體,ACL 的實現方式不同。)在此答案頂部設置的標準所有權和權限將由 ACL 增強。無論 ACL 存在於何處,您都會注意到+標誌存在 - 類似於下面的樣機。

drwxr-xr-x  2 root root 4096 Jul 8 16:00 dir_without_acl
drwxr-xr-x+ 2 root root 4096 Jul 8 16:00 dir_with_acl

訪問這些文件的服務可能需要重新啟動。

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