Featured image of post 升级MacOS12.x(Monterey)后sudo失效问题及解决方式

升级MacOS12.x(Monterey)后sudo失效问题及解决方式

问题

升级到 MacOS Monterey 以后会强行恢复 sudoers 文件到默认状态,即使用户在 admin 组里也无法使用 sudo

当然,此时也是无法修改 sudoers 文件的

过程

在谷歌搜索了一下,果然已经有人遇到了类似问题,在解决过程中参考了外网的3篇帖子

尝试

首先找到了这篇帖子: r/MacOS,虽然没有解决问题,但从中学到了从Finder里直接拷贝系统文件的方法,需要权限时会弹框确认(指纹or密码)

  1. SHIFT + CMD + . 显示隐藏文件
  2. 拷贝 /etc/sudoers 文件到可编辑目录
  3. 修改文件,加入我的用户(比如user)和免密设置,如下
1
2
3
4
5
##
# User specification
root        ALL=(ALL:ALL) ALL
user        ALL=(ALL:ALL) NOPASSWD:ALL
##
  1. 再从 Finder 里直接拷贝修改后的问题替换原文件
  2. 此时执行 sudo 命令仍然会报错 sudo: /etc/sudoers is owned by uid xxx, should be 0

解决uid问题

之后又在 StackExchange 里学到了两种方式解决这个问题:

  1. 开机按 CMD + S 进入 recovery 模式,以root权限执行如下命令后,即可解决
1
2
3
4
mount -uw /
chown root:wheel /etc/sudoers
chmod 440 /etc/sudoers
reboot
  1. 利用 Apple Script 修改文件权限,弹框确认权限(指纹or密码)
1
osascript -e 'do shell script "chown root:wheel /etc/sudoers; chmod 440 /etc/sudoers; chmod -N /etc/sudoers" with administrator privileges'

后记

事实上,完全可以直接用Apple Script修改 /etc/sudoers 文件,比如 这篇文章 里提到的方式

创建一个 /tmp/sudoers 文件,按需修改,然后直接替换 /etc/sudoers 文件即可,如下

1
osascript -e 'do shell script "cat /tmp/sudoers > /etc/sudoers; chown root:wheel /etc/sudoers" with administrator privileges'
Built with Hugo
主题 StackJimmy 设计