为何Mac特定文件需执行一次sudo后才能打开,一段时间后又失效?
Mac WhatsApp视频文件权限异常问题排查
问题现象
Mac上特定WhatsApp视频文件出现权限异常:
- 拥有读取权限但无法打开,执行
file命令提示Operation not permitted - 使用
sudo执行file命令后,普通用户无需sudo即可正常读取,注销重登后仍可访问 - 约24小时后文件会再次变为无法访问状态
- rsync备份该文件时同样报错
operation not permitted - 对比同目录可正常访问的文件,xattr扩展属性一致
相关命令及输出
1. 查看文件权限及执行file命令
$ cd Downloads $ ls -l "WhatsApp Video 2024-05-02 at 15.06.16.mp4" -rw-r--r--@ 1 smith staff 16807637 May 2 15:19 WhatsApp Video 2024-05-02 at 15.06.16.mp4 $ file "WhatsApp Video 2024-05-02 at 15.06.16.mp4" WhatsApp Video 2024-05-02 at 15.06.16.mp4: cannot open: Operation not permitted
2. 使用sudo执行file命令
$ sudo file "WhatsApp Video 2024-05-02 at 15.06.16.mp4" Password: WhatsApp Video 2024-05-02 at 15.06.16.mp4: ISO Media, MP4 v2 [ISO 14496-14]
3. sudo执行后普通用户可读取文件
$ file "WhatsApp Video 2024-05-02 at 15.06.16.mp4" WhatsApp Video 2024-05-02 at 15.06.16.mp4: ISO Media, MP4 v2 [ISO 14496-14]
4. 查看文件扩展属性(xattr)
$ xattr -l "WhatsApp Video 2024-05-02 at 15.06.16.mp4" xattr: [Errno 1] Operation not permitted: 'WhatsApp Video 2024-05-02 at 15.06.16.mp4' $ sudo xattr -l "WhatsApp Video 2024-05-02 at 15.06.16.mp4" com.apple.macl: com.apple.provenance: com.apple.quarantine: 0087;6633e72d;WhatsApp; $ xattr -l "WhatsApp Video 2024-05-02 at 15.06.16.mp4" com.apple.macl: com.apple.provenance: com.apple.quarantine: 0087;6633e72d;WhatsApp;
原因分析
问题的核心是**com.apple.macl扩展属性**触发的macOS强制访问控制(MACL)限制:
- MACL是macOS的安全机制,会对来自特定应用(如WhatsApp)的文件添加访问策略,定期拦截普通用户的读取请求
- 使用
sudo执行命令时,root权限绕过了MACL限制,同时刷新了文件的权限缓存,因此普通用户在一段时间内可正常访问 - 约24小时后,系统会重新校验MACL策略,限制再次生效,导致文件无法访问
com.apple.quarantine属性仅标记文件来源,不会导致定时权限回收,并非问题根源
解决方法
- 移除MACL属性:执行
xattr -d com.apple.macl "WhatsApp Video 2024-05-02 at 15.06.16.mp4"(若普通用户无法执行,可先用sudo执行一次xattr命令,或直接用sudo执行移除操作) - 调整WhatsApp权限:在「系统设置-隐私与安全性-文件与文件夹」中,确保WhatsApp拥有Downloads文件夹的访问权限,减少新接收文件被添加严格MACL限制的概率
内容的提问来源于stack exchange,提问作者DanB
相关产品推荐
相关产品推荐

