在Mac OS X上将dscl的UniqueID和PrimaryGroupID重置为0

由于脚本错误,我的根的PrimaryGroupID是101,UniqueID是101.我仍然可以访问root,我可以从我的pipe理员帐户运行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 

我如何重置根的UniqueID和PrimaryGroupID为0.我通过Mac OS X安装DVDloginterminal,我有一个超级用户所有必要的权利,但我没有弄清楚如何访问目录服务的logging从那里。

首先,备份用户和组的数据; 它存储在/ 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”。 警告:如果你弄乱了这个文件的格式,你可以使你的系统比现在更加不可用。

另一种select是使用dscl -f打开常规系统的用户文件,即使是从DVD引导而已。 检查以确保您可以访问他们:

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

它应该打印出根帐户的各种属性,包括“UniqueID:101”。 如果这有效,你应该能够设置它回来:

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