在仅剩标准用户的Mac上恢复本地账户管理员权限的技术方案

本文详细介绍了当macOS系统的admin组被清空,导致所有账户均为标准用户时,如何通过恢复环境和特定命令行工具(如sudo、dseditgroup)重新授予账户管理员权限的具体步骤,适用于Apple Silicon Mac和macOS Tahoe环境。

我最近在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命令行工具创建配置文件:

  1. 启动到恢复环境。

  2. 如果需要,输入FileVault恢复密钥以访问恢复环境。

  3. 如果您需要使用FileVault恢复密钥解锁,解锁后选择"Exit to Recovery"(退出到恢复)选项。

  4. 从恢复窗口,点击"Disk Utility"(磁盘工具)。

  5. 验证"Data"卷是否已挂载。

    如果"Data"卷未挂载,点击磁盘工具中的"Mount"(挂载)按钮来挂载它。

    如果启用了FileVault,您需要输入一个已启用FileVault的账户的密码来挂载Data卷。

  6. 退出磁盘工具。

  7. 使用"Utilities"(实用工具)菜单打开"Terminal"(终端)。

  8. 运行以下命令,在/Volumes/Data/private/etc/sudoers.d目录下创建一个名为fixadmin的文件:

    1
    
    touch /Volumes/Data/private/etc/sudoers.d/fixadmin
    
  9. 运行以下命令,使用nano命令行文本编辑器编辑/Volumes/Data/private/etc/sudoers.d/fixadmin文件:

    1
    
    /Volumes/Macintosh\ HD/usr/bin/nano /Volumes/Data/private/etc/sudoers.d/fixadmin
    
  10. 将以下行添加到fixadmin文件中:

    1
    
    username_goes_here          ALL = (ALL) /usr/sbin/dseditgroup
    

    该文件应按以下方式格式化: A. 输入您希望授予其使用sudo运行dseditgroup命令行工具权限的用户账户的账户短名称。 B. 按下Tab键创建一个制表符分隔的空格 C. 输入该行的其余部分: ALL = (ALL) /usr/sbin/dseditgroup 例如,如果相关用户账户的账户短名称是username,则条目应如下所示:

    1
    
    username          ALL = (ALL) /usr/sbin/dseditgroup
    
  11. 验证该行格式是否正确。

  12. 要保存更改,请同时按下键盘上的Control键和X键(Control + X)。

  13. 系统将提示您保存未保存的更改。提示时,请保存更改。

  14. 重新启动到macOS。

  15. 以您授予了使用sudo运行dseditgroup命令行工具权限的账户登录。

  16. 打开终端并运行以下命令,将管理员权限授予指定的用户账户:

    1
    
    sudo dseditgroup -o edit -a username_goes_here -t user admin
    

    例如,如果相关用户账户的账户短名称是username,则命令应如下所示:

    1
    
    sudo dseditgroup -o edit -a username -t user admin
    
  17. 验证所需账户现在是否拥有管理员权限。

  18. 通过运行以下命令从/private/etc/sudoers.d目录中移除fixadmin文件:

    1
    
    sudo rm /private/etc/sudoers.d/fixadmin
    
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计