Mac OS High Sierra下sudo命令报错(sudoers语法错误)的解决方法
修复Mac OS High Sierra下空sudoers文件导致的sudo错误
别担心,这个问题核心就是/etc/sudoers文件为空,导致sudo无法解析权限规则,咱们可以通过Mac的恢复模式来修复,步骤如下:
步骤1:进入恢复模式
重启你的Mac,开机过程中按住Command + R,直到屏幕出现苹果标志或进度条,等待进入恢复模式界面。
步骤2:打开终端
在恢复模式的顶部菜单栏,点击「实用工具」→「终端」,调出终端窗口。
步骤3:挂载系统盘为可读写模式
恢复模式下系统盘默认是只读状态,得先改成可读写:
- 先查看系统盘的标识符,执行命令:
在输出里找标注为APFS Volume(或Mac OS Extended)的系统盘,通常标识符是diskutil list/dev/disk1s1,对应挂载点是/Volumes/Macintosh HD(如果你的磁盘改了名字,就用实际名称)。 - 执行挂载命令(把
diskXsY替换成你找到的标识符):
看到提示“Volume ... mounted successfully”就说明挂载成功了。diskutil mountRW /dev/diskXsY
步骤4:重建sudoers文件
现在咱们创建一个符合Mac默认配置的sudoers文件:
- 执行以下命令(如果系统盘不是Macintosh HD,替换成实际名称):
cat > /Volumes/Macintosh\ HD/etc/sudoers << 'EOF' # sudoers file. # # This file MUST be edited with the 'visudo' command as root. # # See the sudoers man page for the details on how to write a sudoers file. # Defaults env_reset Defaults env_keep += "BLOCKSIZE" Defaults env_keep += "COLORFGBG COLORTERM" Defaults env_keep += "__CF_USER_TEXT_ENCODING" Defaults env_keep += "CHARSET LANG LANGUAGE LC_ALL LC_COLLATE LC_CTYPE" Defaults env_keep += "LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME" Defaults env_keep += "LINES COLUMNS" Defaults env_keep += "LSCOLORS" Defaults env_keep += "SSH_AUTH_SOCK" Defaults env_keep += "TZ" Defaults env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY" Defaults env_keep += "EDITOR VISUAL" Defaults env_keep += "HOME MAIL" root ALL=(ALL) ALL %admin ALL=(ALL) ALL %wheel ALL=(ALL) ALL EOF - 设置正确的文件权限(sudoers必须是440权限,归属root:wheel):
chmod 440 /Volumes/Macintosh\ HD/etc/sudoers chown root:wheel /Volumes/Macintosh\ HD/etc/sudoers
步骤5:验证sudoers文件语法
执行命令检查文件是否有语法错误:
visudo -c -f /Volumes/Macintosh\ HD/etc/sudoers
如果输出显示/Volumes/Macintosh HD/etc/sudoers: parsed OK,说明文件没问题。
步骤6:重启系统
关闭终端窗口,在恢复模式界面点击「苹果菜单」→「重启」,回到正常系统后,测试一下sudo ls命令,应该就能正常执行了。
内容的提问来源于stack exchange,提问作者CUH
相关产品推荐
相关产品推荐

