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

在 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

我怎样才能将根的 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

相关内容