由于脚本存在严重缺陷,我的 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
我怎样才能将根的 UniqueID 和 PrimaryGroupID 重置为 0。我通过 Mac OS X 安装 DVD 登录终端,我有一个拥有所有必要权限的超级用户,但我不知道如何从那里访问目录服务的记录。
答案1
首先,备份用户和组数据;它存储在 /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