Linux

有效或真實 uid 為 root 的程序在訪問文件時是否仍受文件的權限位限制?

  • August 5, 2020

來自 Didi Kohen 對Do屬於基於能力的安全的回答 ?sudo``su

在 Unix 和 Linux 中有兩個級別的權限:標準使用者和超級使用者(通常稱為 root)。

標準使用者只能通過所有權、組成員資格或ACL 訪問他有權訪問的文件。

超級使用者擁有對所有內容的權限(對於這個答案,我們將忽略 SELinux 之類的東西),在使用者空間內沒有限制。

當一個程序有一個有效或真實的 uid 是 root 並嘗試訪問一個文件時,它是否仍然受文件的權限位限制?或者,就像引用所說的(如果我理解正確的話),擁有 euid root 將覆蓋文件的權限位?

例如,

  • 當文件的所有者不是root並且其組與程序的有效組或補充組不匹配時,“其他”文件的權限位是否適用於該程序?如果文件不允許其他人讀或寫或執行,程序是否還能讀或寫或執行?
  • 當文件的所有者是root,並且“使用者”的文件的權限位不允許讀取,寫入或執行時,程序仍然可以讀取,寫入或執行文件嗎?

是否有可能使有效或真實 uid 為 root 的程序無法訪問文件?例如,通過更改文件的權限位?

在傳統的 Unix 中,root可以做任何事情。

但是在現代 Linux(可能是其他 Unix)上,它現在具有功能。這裡討論的功能是CAP_DAC_OVERRIDE,任何具有此功能的程序都將忽略文件權限(除了x,請參閱其他答案)。

大多數係統將設置為向後兼容模式,因此當程序將其有效使用者 ID 更改為 root 時,它將獲得所有功能,而當有效使用者 ID 從 root 更改時,它將放棄功能。

有一些方法可以避免丟棄功能,這可用於將某些功能傳遞給非根程序。還有一種方法可以在不成為 root 的情況下獲得能力,這與程序如何成為 root 的工作方式類似。

重要的是有效使用者 ID,真實和保存的使用者 ID 只允許您將這些 ID 複製到其他 ID 之一(例如有效使用者 ID)。

SE_linux 和 namespaces/cgroups,可以限制 root 可以做什麼。

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