Permissions

如何將帳戶配置為對系統上的所有文件(包括 root 的文件)具有讀取權限?

  • October 7, 2021

我需要創建一種“備份操作員”帳戶,該帳戶可以讀取系統上的所有文件以復製到備份系統,而無需修改任何文件,包括屬於root.

root帳戶似乎是唯一能夠做到這一點的帳戶,但是該root帳戶並沒有被阻止執行它想要的任何東西。我能想到的另一個選擇是將帳戶放在具有讀取權限的組中,並使該帳戶成為每個使用者組的成員。Linux 中的基本rwx權限似乎並不是為此而創建的。

Linux 是否有更複雜的功能來實現這一目的,例如 ACL 可能提供的功能?

該權限適用於從遠端備份伺服器登錄並將所有文件備份到遠端伺服器的使用者。如果備份伺服器受到威脅,該帳戶應該無法登錄到正在備份的伺服器並造成一些損害。備份伺服器上的帳戶也不應該能夠登錄到備份伺服器,並且如果受到損害會造成一些損害。

我想通常情況下,人們只需以 root 身份執行備份實用程序,通過cron或通過 SSH 密鑰上的強制命令,然後相信該實用程序不會做任何危險的事情。

使用 ACL 為系統上的所有文件授予權限會有點尷尬,因為您需要為每個文件單獨設置 ACL(因為 POSIX ACL 並沒有授予對子樹的訪問權限的概念,您只有預設 ACL 會自動複製到新文件中)。這些文件的所有者可以隨意或故意刪除這些權限。安全意識強的程序(如 SSH 或 GPG)如果注意到您的文件可以被其他人讀取,也可能會生氣。(他們甚至不需要知道 ACL 就可以做到這一點,因為傳統的權限位掩蓋了 ACL 授予的權限,因此 ACL 授予的任何訪問權限在傳統的權限位中都很明顯。)

不過,其實是有辦法的。Linux功能係統包含一個功能:

CAP_DAC_READ_SEARCH

  • 繞過文件讀取權限檢查和目錄讀取和執行權限檢查;
  • 呼叫open_by_handle_at(2)
  • 使用該linkat(2) AT_EMPTY_PATH標誌創建指向由文件描述符引用的文件的連結。

(我不確定最後一個與其他的有什麼關係,但我會忽略它……)

如果您有一個特定的實用程序想要擁有該功能,您可以通過以下方式將其提供給它setcap

# setcap "CAP_DAC_READ_SEARCH+ep" /path/to/backupcmd

雖然現在,任何可以執行二進製文件的人都可以/path/to/backupcmd使用該功能。因此,您可能希望保護該特定文件不被任意使用者訪問。例如,使其由 擁有root:backup,具有權限,應該能夠執行它的使用者組rwx--x---在哪裡。backup

# chown root:backup /path/to/backupcmd
# chmod 710 /path/to/backupcmd

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