macos 中 /system、/usr(除 /usr/local)、/bin、/sbin、/var/db 部分子目录及 /applications/utilities 系统工具默认受 sip 保护,其限制在内核层拦截访问,绕过传统权限检查,故 sudo 也无法遍历。

macOS 系统中无法遍历某些目录(如 /System、/usr、/bin 等),根本原因不是普通权限问题,而是受系统完整性保护(SIP, System Integrity Protection)限制。即使以 root 身份运行,SIP 也会阻止对受保护路径的读取、写入或执行操作。
哪些目录默认被 SIP 保护?
SIP 主要保护以下路径及其子目录:
-
/System(含/System/Library、/System/Applications) -
/usr(除/usr/local外,大部分子目录受限) -
/bin、/sbin、/var/db(部分关键子目录) -
/Applications/Utilities中的系统工具(如 Console.app、Terminal.app 的可执行文件)
注意:SIP 不影响用户主目录(~/)、/Library(非系统级)、/usr/local 或第三方安装路径(如 /opt),这些区域仍遵循常规 Unix 权限模型。
为什么 sudo ls /System 仍然失败?
因为 SIP 在内核层拦截访问请求,绕过传统权限检查。即使你用 sudo 提升为 root,系统调用(如 openat()、readdir())在进入受保护路径时会被直接拒绝,返回 Operation not permitted 错误。
验证方式:csrutil status —— 查看 SIP 当前状态(需重启后生效)ls -lO /System —— 可见部分目录标记为 restricted
不推荐但技术上可行的绕过方式(仅限调试/恢复场景)
警告:禁用 SIP 会显著降低系统安全性,可能导致系统不稳定、签名失效、更新失败,且违反 Apple 支持政策。生产环境严禁操作。
- 重启进入恢复模式(开机按住
Cmd+R),打开终端,执行:csrutil disable - 重启后即可正常访问受保护路径(包括遍历、修改、替换二进制)
- 完成调试后务必重新启用:
csrutil enable(或csrutil enable --without fs等细粒度选项,但不建议)
注意:--without fs 仅放宽文件系统读写限制,仍阻止代码注入和内核扩展加载,且 macOS 13+ 对该选项支持已收紧。
更安全、合规的替代方案
绝大多数开发、分析、自动化需求无需绕过 SIP:
- 使用
mdfind或 Spotlight API 查询系统文件元数据(如mdfind "kMDItemDisplayName == 'launchd'") - 通过
system_profiler、defaults read、plutil等授权命令获取配置与状态信息 - 将自定义脚本、工具部署到
/usr/local/bin或~/bin,避免触碰受保护区域 - 利用 Xcode 工具链(如
swiftc、lldb)在沙盒或用户空间完成调试任务
若需深度系统分析(如内核调试、驱动开发),应使用 Apple 官方支持的机制:Kernel Extensions(已弃用)、DriverKit、或在虚拟机中运行调试环境。










