我最近在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目录中。以下过程将创建一个存储在纯文本文件fixadmin中的sudo配置,该文件将从恢复环境中创建,并存储在该Mac启动磁盘的可写部分中的/private/etc/sudoers.d目录里。
该配置文件的作用是允许一个原本只有标准用户权限的用户账户以root权限运行dseditgroup命令行工具,从而使用dseditgroup命令行工具将该用户账户自身(或另一个账户)添加到名为admin的本地组中。此过程的最终结果是将管理员权限授予被添加到admin组的账户。
前提条件:
- 对相关Mac的物理访问权限。
- 用于以root权限运行
dseditgroup命令行工具的账户的账户短名称 - 如果Mac使用FileVault加密,您将需要FileVault恢复密钥以及已启用FileVault的账户的密码。
一旦满足了前提条件,请使用以下流程为sudo命令行工具创建配置文件:
-
启动到恢复环境。
-
如果需要,输入FileVault恢复密钥以访问恢复环境。
-
如果您需要使用FileVault恢复密钥解锁,解锁后选择"Exit to Recovery"(退出到恢复)选项。
-
从恢复窗口,点击"Disk Utility"(磁盘工具)。
-
验证"Data"卷是否已挂载。
如果"Data"卷未挂载,点击磁盘工具中的"Mount"(挂载)按钮来挂载它。
如果启用了FileVault,您需要输入一个已启用FileVault的账户的密码来挂载Data卷。
-
退出磁盘工具。
-
使用"Utilities"(实用工具)菜单打开"Terminal"(终端)。
-
运行以下命令,在
/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文件中:1username_goes_here ALL = (ALL) /usr/sbin/dseditgroup该文件应按以下方式格式化: A. 输入您希望授予其使用sudo运行
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 admin例如,如果相关用户账户的账户短名称是
username,则命令应如下所示:1sudo dseditgroup -o edit -a username -t user admin -
验证所需账户现在是否拥有管理员权限。
-
通过运行以下命令从
/private/etc/sudoers.d目录中移除fixadmin文件:1sudo rm /private/etc/sudoers.d/fixadmin