Sudo
已刪除的組是否仍可通過 Linux 中的主組發揮作用?
通過我建構的分析程序,我遇到了一個錯誤,其中使用者將主要組設置為此後刪除的組(不再在 /etc/group 文件中)。為了確定影響範圍,我進行了一些測試並遇到了一些奇怪的行為:
- 即使一個組被刪除,如果它是使用者的主要組,並且在 sudoers 文件中有與其 ID 相關聯的權限,則使用者仍將獲得這些權限。
- 如果之後創建了一個組,它可能會獲得與先前刪除的組相同的組 ID,然後使用者的主 ID 將成為該組。
看來,對於 sudoers 中的權限檢查,/etc/group 文件和使用者的主要組都是單獨搜尋的,因此主要組不必是實際組?
問題: 這是正確的嗎?我錯過了什麼?我不確定為什麼客戶刪除了主要組,但這似乎不對。
設備規格:
Linux Ubuntu 20.04.1
5.13.0-1017-天藍色 x86_64
重現步驟:
- 創建新使用者:
sudo useradd testuser
這創建了使用者和一個單獨的同名新組,該組成為其主要組。- 檢查新使用者組:
groups testuser
結果:’testuser:testuser'- 通過命令刪除新組:
sudo groupdel testuser
收到以下錯誤消息:groupdel: cannot remove the primary group of user ’testuser'- 通過手動文件調整刪除新組:
sudo nano /etc/group
這確實有效,因為我可以簡單地刪除相關組的最後一行並保存文件- 再次檢查新使用者組:
groups testuser
結果:’testuser:組:找不到組 ID 1003 1003 的名稱'- 嘗試以新使用者身份登錄,刪除組成功後,仍然可以登錄
- 嘗試使用新使用者執行 sudo 命令按預期失敗:’testuser 不在 sudoers 文件中。將報告此事件'
- 以特權帳戶重新登錄(具有 sudo 權限)
- 在 sudoers 文件中賦予在步驟 4 中刪除的組名 sudoer 權限:
sudo nano /etc/sudoers
然後將其添加到文件中:%testuser ALL=(ALL:ALL) ALL
- 以新使用者身份登錄並再次執行 sudo 命令仍然失敗:’testuser 不在 sudoers 文件中。將報告此事件'
- 在 sudoers 文件中賦予在步驟 4 中刪除的組 id sudoer 權限:
sudo nano /etc/sudoers
然後將其添加到文件中:%#1003 ALL=(ALL:ALL) ALL
- 以新使用者身份登錄並再次執行 sudo 命令成功,使用者現在擁有 SUDO 權限(我真的希望不是這樣)
- 創建一個新組:
sudo groupadd testforid
使用 ID 1003創建的新組- 再次檢查新使用者組:
groups testuser
結果:’testuser:testforid'
是的,“已刪除”組仍然作為主要組工作;事實上,從未創建過的團體作為主要團體工作。
這是因為最終對使用者和組而言最重要的是他們的標識符。使用者與其主要組之間的映射,例如in
/etc/passwd
,關聯標識符。在您的範例中,testuser
分配了主要組 1003;該組是否被命名(/etc/group
在您的情況下)是無關緊要的。當您授予組 1003sudo
權限時,testuser
通過該組被授予這些權限。使用者名和標識符遵循相同的規則:最終重要的是使用者標識符。給定使用者擁有的文件通過標識符而不是名稱與該使用者相關聯,並且該關聯在使用者被刪除時仍然存在。也可以使用系統上沒有匹配使用者的使用者標識符創建文件。
多個使用者名和組名也可以分別關聯同一個使用者和組id;映射不需要是雙射的。因此,權限等可以根據使用者/組標識符來定義,並且這些標識符可以有 0 個或多個與其關聯的名稱。