以 root 权限执行单条命令,是 macOS 上管理特权操作的标准入口。
macOS 默认禁用 root 账户,管理员通过 admin 组和 sudo 提权。首次使用输入当前用户密码,默认在同一终端缓存约 5 分钟;sudo -k 立即失效,sudo -v 续期。sudo -l 查看当前用户被允许的命令,sudo -i 打开 root 登录 shell,sudo -u 用户 命令 切换身份执行。
边界:sudo 只提升 Unix 权限,不绕过 TCC 和 SIP。终端没有“完全磁盘访问”“屏幕录制”等授权时,sudo 一样失败;受 SIP 保护的系统文件即使 root 也不能改。修改 /etc/sudoers 必须用 sudo visudo,语法错误会让所有提权入口失效。
# 1. 先续期,避免长脚本执行到一半才提示输密码
% sudo -v
# 2. 查看当前用户被授予了哪些命令
% sudo -l
# 3. 以其他用户身份执行;_www 是系统内置的 Web 用户
% sudo -u _www id -un
# 4. 脚本里非交互执行,凭证未缓存时立即失败而不是卡住
% sudo -n /usr/bin/true; echo $?
# 5. 修改 sudoers 前后都做语法检查
% sudo visudo -c
# 6. 立即清掉当前终端的 sudo 缓存
% sudo -k
# 7. 用 -- 结束选项解析,避免命令参数被 sudo 误读
% sudo -- /bin/ls -la /var/root
/etc/sudoers 写错一行,可能导致无人能提权;始终 sudo visudo,并用 visudo -c 验证,保留 Recovery 或其他管理员账户作为退路。echo 密码 | sudo -S,密码会进历史、进程参数或日志。sudo 能解决权限拒绝:访问受 TCC 保护的目录(桌面、文档、邮件、其他 App 数据)需要给终端“完全磁盘访问”,不是 root 权限问题。sudo 默认重置环境变量,PATH、PYTHONPATH、代理变量可能不同;脚本里用绝对路径,必须保留时显式用 sudo -E 并确认安全。sudo -i 进入 root 登录 shell,sudo -s 只开一个 root shell,两者加载的配置不同;排查环境差异时先确认当前 shell 和 PATH。pam_tid.so 配到 /etc/pam.d/sudo_local 启用 Touch ID,但系统更新可能覆盖 /etc/pam.d/sudo,改 sudo_local 更稳。dscl — 查看管理员组成员和用户属性。security — 钥匙串与签名身份,常和提权脚本一起用。sudo — 对照 Linux 的 sudoers 和缓存策略。whoami — 对照身份查询。合上页面,先回答,再展开对照。
sudo 的凭证缓存按什么范围生效?为什么新终端又要输密码?sudo 不能解决“终端无法访问桌面文件”的问题?sudo visudo 编辑并在保存前后运行 visudo -c;写错可能导致所有用户无法提权,需要 Recovery 修复。
小程序版
微信扫码,随时查命令