Permissions

在 Mac OS X 上將 root 的 dscl UniqueID 和 PrimaryGroupID 重置為 0

  • December 7, 2011

由於腳本非常錯誤,我的 root 的 PrimaryGroupID 是 101,UniqueID 是 101。我仍然可以訪問 root,我可以從我的管理員帳戶執行 sudo,但是 sudo 和 root 顯然沒有所有必要的權限。

我可以讀取 dscl 輸出,例如:

dscl . -read /Users/root PrimaryGroupID
PrimaryGroupID: 101

dscl . -list /Users UniqueID
root 101

dscl . -list /Groups PrimaryGroupID
wheel 0

但我不能用 dscl 改變任何東西:

sudo dscl . -change /Users/root UniqueID 101 0
<main> attribute status: eDSPermissionError
<dscl_cmd> DS Error: -14120 (eDSPermissionError)

有趣的是,當我執行時:

dscl . -read /Groups/wheel GroupMembership
GroupMembership: root

如何將 root 的 UniqueID 和 PrimaryGroupID 重置為 0。我通過 Mac OS X 安裝 DVD 登錄終端,我有一個擁有所有必要權限的超級使用者,但我不知道如何訪問目錄服務的記錄從那裡。

首先,對使用者和組數據進行備份;它儲存在 /Volumes/yourbootvolume/var/db/dslocal/nodes/Default 中,因此只需將整個目錄複製到安全的地方,以防其他任何問題。完成後,有幾種不同的方法可以將 root 的 uid 重置為 0:

使用文本編輯器可能最簡單:編輯 /Volumes/yourbootvolume/var/db/dslocal/nodes/Default/users/root.plist,查找如下部分:

<key>uid</key>
<array>
   <string>101</string>
</array>

並將“101”更改為“0”。警告:如果你弄亂了這個文件的格式,你可能會使你的系統比現在更不可用。

另一個選項是用於dscl -f打開正常系統的使用者文件,即使您是從 DVD 引導的。檢查以確保您可以通過以下方式訪問它們:

dscl -f /Volumes/yourbootvolume/var/db/dslocal/nodes/Default localonly -read  /Local/Target/Users/root

它應該列印出 root 帳戶的各種屬性,包括“UniqueID:101”。如果可行,您應該可以通過以下方式將其重新設置:

dscl -f /Volumes/yourbootvolume/var/db/dslocal/nodes/Default localonly -change  /Local/Target/Users/root UniqueID 101 0

引用自:https://serverfault.com/questions/338455