ACL Reader New (开发预览版)
ACL Reader New 是一款用于探索 macOS 文件系统扩展访问控制列表 (ACL) 的实验性工具。本项目旨在挑战一个系统级难题:在复杂的 macOS 权限体系中,尝试通过递归算法追踪权限条目的原始继承源头。
[!CAUTION] 注意: 本项目目前处于活跃开发阶段。由于 macOS 权限继承逻辑的复杂性(如权限缩减、系统拦截、非标准继承等),“继承项溯源”功能目前仍存在不确定性,扫描结果仅供参考。
🔍 项目初衷
在 macOS 中,了解一个文件“有什么权限”相对直观,但了解这些权限“从哪里来”却充满挑战。本项目尝试通过以下技术路径探索解决之道:
🛠️ 技术路径
基础 ACL 解析:深度调用底层 Darwin.acl API,解析并展示包含读取、写入、属性修改等全部 13 种细分权限位。
尝试性溯源算法:构建 performClimb 逻辑,沿路径向上递归查找父目录,试图匹配并定位继承权限的显式定义点。
📊 现状说明
递归查找局限:目前的递归逻辑在处理“权限位缩减”或“非标准继承”场景时,可能无法精准对应到物理源头路径。
启发式匹配:引入了初步的子集匹配逻辑 (MatchGrade.compatible),尝试在权限不完全匹配时提供可能的源头建议。
系统拦截处理:初步识别因 SIP (系统完整性保护) 或沙盒限制导致的溯源中断,并标记为“系统受限”。
✨ 主要功能
可视化条目列表:基于 SwiftUI 构建,动态区分 Allow 与 Deny 类型。
遗传标志解析:识别 file_inherit、directory_inherit 等关键标志。
沙盒访问兼容:内置 NSOpenPanel 授权引导,解决手动输入路径导致的权限拒绝问题。
⚙️ 系统要求与安装
环境要求
系统版本: macOS 15.5 或更高
开发工具: Xcode 16+
权限: 建议开启“完全磁盘访问权限”以获得最佳溯源体验
💻 技术实现细节
桥接处理:通过 Bridging-Header.h 引入 <membership.h>,利用 mbr_uuid_to_id 实现 UUID 到用户名的转换。
核心挑战:ACE 溯源逻辑目前仍处于持续优化中。目前的难点在于如何更精准地模拟内核判断“哪些项有资格遗传给子项”的边界逻辑。
🚧 路线图 (Roadmap)
[ ] 溯源准确性优化:针对更多极端样本(如多重继承冲突)进行压力测试。
[ ] 置信度 UI 反馈:在界面上区分“确定”与“推测”的匹配结果。
[ ] 深层权限修改:探索在安全环境下修改 ACL 的可能性。
⚖️ 声明
这是一个个人探索性质的项目,代码中可能存在逻辑疏漏。
诚邀指教:如果您在溯源算法、POSIX 权限位处理或 macOS 权限继承机制上有更好的见解,欢迎通过 Issues 交流或提交 Pull Request。
