在仅含标准用户账户的Mac上授予本地用户账户管理员权限
我最近在LinkedIn上看到一篇帖子,发帖人显然从macOS上名为admin的本地组中移除了所有被分配了管理员权限的账户,随后难以从此状态中恢复。
在macOS上,admin组的成员身份是授予管理员权限的关键,这意味着现在这台Mac只剩下拥有标准用户权限的账户。
过去,存在从恢复环境中修复此问题的方法,这些方法使用恢复环境中的chroot命令行工具,将活动文件系统从恢复环境切换到Mac的常规启动磁盘,然后运行dseditgroup命令行工具,将一个或多个本地用户账户重新添加到启动磁盘的admin组中。
然而,看起来chroot命令目前在Apple Silicon Mac的macOS Tahoe可用的恢复环境中不起作用。启动时,它会报告错误然后退出。
随着chroot命令行工具在恢复环境中不再工作,这似乎关闭了为运行macOS Tahoe的Apple Silicon Mac重新将用户添加到admin组的大部分途径。但是,经过一些研究,我发现了一种使用sudo命令行工具的替代方法。更多详情,请见下文。
此方法利用了macOS上sudo命令行工具的一项能力,即使用为sudo工具正确格式化的配置文件,这些配置文件以纯文本文件的形式存储在/private/etc/sudoers.d目录中。以下过程将创建一个sudo配置,该配置存储在一个名为fixadmin的纯文本文件中,该文件将从恢复环境中创建并存储在Mac启动磁盘可写部分的/private/etc/sudoers.d目录中。
该配置文件的作用是允许一个原本只有标准用户权限的用户账户,以root权限运行dseditgroup命令行工具,从而使得该用户账户能够使用dseditgroup命令行工具将自己(或另一个账户)添加到名为admin的本地组中。此过程的最终结果是,被添加到admin组的账户将获得管理员权限。
先决条件:
- 对相关Mac的物理访问。
- 用于以
root权限运行dseditgroup命令行工具的账户的短名称。 - 如果Mac使用FileVault加密,您将需要FileVault恢复密钥以及一个启用了FileVault的账户的密码。
一旦满足先决条件,请使用以下过程为sudo命令行工具创建配置文件:
- 启动到恢复环境。
- 如果需要,输入FileVault恢复密钥以访问恢复环境。
- 如果您需要使用FileVault恢复密钥解锁,解锁后选择“退出到恢复”选项。
- 在恢复窗口中,点击“磁盘工具”。
- 验证“数据”卷是否已挂载。
- 如果“数据”卷未挂载,请在磁盘工具中点击“挂载”按钮进行挂载。
- 如果启用了FileVault,您需要输入一个启用了FileVault的账户的密码来挂载数据卷。
- 退出磁盘工具。
- 通过“实用工具”菜单打开“终端”。
- 运行以下命令,在
/Volumes/Data/private/etc/sudoers.d目录中创建一个名为fixadmin的文件:1touch /Volumes/Data/private/etc/sudoers.d/fixadmin - 运行以下命令,使用
nano命令行文本编辑器编辑/Volumes/Data/private/etc/sudoers.d/fixadmin文件:1/Volumes/Macintosh\ HD/usr/bin/nano /Volumes/Data/private/etc/sudoers.d/fixadmin - 将以下行添加到
fixadmin文件中:此文件应按以下方式格式化: A. 输入您希望授予权限以使用1username_goes_here ALL = (ALL) /usr/sbin/dseditgroupsudo运行dseditgroup命令行工具的用户账户的账户短名称。 B. 按Tab键创建一个制表符空格。 C. 输入该行的其余部分:ALL = (ALL) /usr/sbin/dseditgroup例如,如果相关用户账户的账户短名称是username,则条目应如下所示:1username ALL = (ALL) /usr/sbin/dseditgroup - 验证该行格式是否正确。
- 要保存更改,请同时按下键盘上的
Control键和X键 (Control + X)。 - 系统将提示您保存未保存的更改。出现提示时,保存更改。
- 重新启动进入macOS。
- 以您授予了使用
sudo运行dseditgroup命令行工具权限的账户登录。 - 打开“终端”并运行以下命令,为指定用户账户授予管理员权限:
例如,如果相关用户账户的账户短名称是
1sudo dseditgroup -o edit -a username_goes_here -t user adminusername,则该命令应如下所示:1sudo dseditgroup -o edit -a username -t user admin - 验证所需账户现在是否拥有管理员权限。
- 通过运行以下命令,从
/private/etc/sudoers.d目录中删除fixadmin文件:1sudo rm /private/etc/sudoers.d/fixadmin