Sudo

已刪除的組是否仍可通過 Linux 中的主組發揮作用?

  • March 21, 2022

通過我建構的分析程序,我遇到了一個錯誤,其中使用者將主要組設置為此後刪除的組(不再在 /etc/group 文件中)。為了確定影響範圍,我進行了一些測試並遇到了一些奇怪的行為:

  • 即使一個組被刪除,如果它是使用者的主要組,並且在 sudoers 文件中有與其 ID 相關聯的權限,則使用者仍將獲得這些權限。
  • 如果之後創建了一個組,它可能會獲得與先前刪除的組相同的組 ID,然後使用者的主 ID 將成為該組。

看來,對於 sudoers 中的權限檢查,/etc/group 文件和使用者的主要組都是單獨搜尋的,因此主要組不必是實際組?

問題: 這是正確的嗎?我錯過了什麼?我不確定為什麼客戶刪除了主要組,但這似乎不對。

設備規格:

Linux Ubuntu 20.04.1

5.13.0-1017-天藍色 x86_64

重現步驟:

  1. 創建新使用者:sudo useradd testuser 這創建了使用者和一個單獨的同名新組,該組成為其主要組。
  2. 檢查新使用者組:groups testuser 結果:’testuser:testuser'
  3. 通過命令刪除新組:sudo groupdel testuser 收到以下錯誤消息:groupdel: cannot remove the primary group of user ’testuser'
  4. 通過手動文件調整刪除新組:sudo nano /etc/group 這確實有效,因為我可以簡單地刪除相關組的最後一行並保存文件
  5. 再次檢查新使用者組:groups testuser 結果:’testuser:組:找不到組 ID 1003 1003 的名稱'
  6. 嘗試以新使用者身份登錄,刪除組成功後,仍然可以登錄
  7. 嘗試使用新使用者執行 sudo 命令按預期失敗:’testuser 不在 sudoers 文件中。將報告此事件'
  8. 以特權帳戶重新登錄(具有 sudo 權限)
  9. 在 sudoers 文件中賦予在步驟 4 中刪除的組名 sudoer 權限:sudo nano /etc/sudoers 然後將其添加到文件中: %testuser ALL=(ALL:ALL) ALL
  10. 以新使用者身份登錄並再次執行 sudo 命令仍然失敗:’testuser 不在 sudoers 文件中。將報告此事件'
  11. 在 sudoers 文件中賦予在步驟 4 中刪除的組 id sudoer 權限:sudo nano /etc/sudoers 然後將其添加到文件中: %#1003 ALL=(ALL:ALL) ALL
  12. 以新使用者身份登錄並再次執行 sudo 命令成功,使用者現在擁有 SUDO 權限(我真的希望不是這樣)
  13. 創建一個新組:sudo groupadd testforid 使用 ID 1003創建的新組
  14. 再次檢查新使用者組:groups testuser 結果:’testuser:testforid'

是的,“已刪除”組仍然作為主要組工作;事實上,從未創建過的團體作為主要團體工作。

這是因為最終對使用者和組而言最重要的是他們的標識符。使用者與其主要組之間的映射,例如in /etc/passwd,關聯標識符。在您的範例中,testuser分配了主要組 1003;該組是否被命名(/etc/group在您的情況下)是無關緊要的。當您授予組 1003sudo權限時,testuser通過該組被授予這些權限。

使用者名和標識符遵循相同的規則:最終重要的是使用者標識符。給定使用者擁有的文件通過標識符而不是名稱與該使用者相關聯,並且該關聯在使用者被刪除時仍然存在。也可以使用系統上沒有匹配使用者的使用者標識符創建文件。

多個使用者名和組名也可以分別關聯同一個使用者和組id;映射不需要是雙射的。因此,權限等可以根據使用者/組標識符來定義,並且這些標識符可以有 0 個或多個與其關聯的名稱。

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