Mac上禁止程序访问特定文件夹需组合使用ACL规则、App沙盒隔离或受限用户账户三种方法:ACL通过sudo chmod +a添加拒绝型权限;沙盒化App可重签名禁用文件访问能力;非沙盒程序则应隔离至无权访问敏感路径的受限账户运行。

Mac上禁止某个程序访问特定文件夹,需绕过系统默认的“文件和文件夹”隐私授权界面——该界面只允许开启权限,无法针对性屏蔽单个App对某路径的读写。必须组合使用终端ACL规则与应用沙盒隔离,否则程序仍可通过路径直连、符号链接或辅助进程绕过限制。
用chmod +a添加拒绝型ACL规则
这一步直接在文件系统层拦截访问请求,比防火墙更精准,且不依赖网络栈。系统级拒绝优先级高于任何用户态授权。
打开终端,执行以下命令:
sudo chmod +a "user:用户名:deny:read,write,execute,file_inherit,directory_inherit" /路径/到/目标文件夹
将“用户名”替换为运行该程序的账户名(如当前登录用户是alice,则写alice);将“/路径/到/目标文件夹”替换成实际路径,例如/Users/alice/PrivateDocs。
【必须用sudo执行,否则权限不足;若漏掉file_inherit和directory_inherit,子文件和子文件夹将不受保护】
执行后无提示即表示成功。可运行ls -le /路径/到/目标文件夹验证是否已添加deny条目。
启用App Sandbox并禁用文件访问能力
适用于从Mac App Store安装或自带签名的沙盒化App。此方法从运行时环境层面切断文件系统调用通路,比ACL更彻底,但仅对支持沙盒的App有效。
第一步:确认App是否已启用沙盒。在终端中运行xattr -pl com.apple.security.app-sandbox /Applications/目标App.app,若有输出则已启用。
第二步:编辑App的entitlements文件。需先解包App:右键→“显示包内容”→进入Contents → MacOS目录,找到可执行文件名(如Notion),用codesign -d --entitlements - /Applications/Notion.app/Contents/MacOS/Notion查看当前权限声明。
第三步:创建新entitlements.plist,内容包含<key>com.apple.security.files.user-selected.read-write</key><false/>,并用codesign --force --sign - --entitlements 新entitlements.plist /Applications/目标App.app重签名。
【重签名后App图标可能变灰,且下次系统更新时签名会被清除,需重新操作】
创建受限用户账户隔离运行
当程序既非沙盒App又频繁越权访问时,最稳妥的方式是将其与主账户物理隔离。新建一个无权访问敏感路径的账户,所有操作在此账户下进行。
步骤一:打开“系统设置”→“用户与群组”,点击锁图标解锁,再点“+”添加新用户。
步骤二:类型选“标准”,不要选“管理员”或“儿童”;账户名称设为app_restricted,密码设为强密码。
步骤三:登录新账户,在访达中右键点击目标文件夹→“显示简介”→底部“共享与权限”→点击锁图标解锁→将app_restricted用户权限设为“无访问权”。
步骤四:将待限制的程序拖入该账户的/Applications文件夹(或直接在此账户下安装),以后只从此账户启动该程序。
这一步完成后,该程序在app_restricted账户中运行时,连ls /Users/alice/PrivateDocs都会返回Permission denied。

















