Permissions
在 Mac OS X 上將 root 的 dscl UniqueID 和 PrimaryGroupID 重置為 0
由於腳本非常錯誤,我的 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