同样的zsh脚本可以列出 当我运行在终端。
起先为"LOUSTATION",失败取自:"The LaunchATION"拥有同名用户ID,同名,同名脚本.
这种组合使得这看起来像Unix许可问题.
测试结果并非如此。
有用的歧义是启动上下文:访问从终端成功,从.失败,仍然在受保护文件夹外的路径成功.
我在macOS 15.6.1(达尔文24. 6.0)上复制了这个,在.
测试后探测器被取出.
为什么第一次检查是错的 明显的嫌疑人是文件所有权、错误的家目录或作为另一个用户运行的工作。
探测器在接触档案前打印了这些事实: 两种运行产生了这个差异: 检查终端启动代理在用户 / uid / / 内部的列表条目 读取文件列表条目 工作目录不同,但脚本在.下使用绝对路径,所以没有解释否认.
负控更为重要:启动代理可以读取同一用户拥有的另一个目录.
改变所有权或模式比特不能解释为什么只有发射背景改变了结果。
自有层是隐私背景 在这个机器上,访问决定是附加在进程是如何启动的,而不只是uid
501.
终端有一个允许访问用户文档文件夹的隐私背景 。
启动的进程没有继承这一访问。
正因为如此,这些观察可以一并是真的:报告预期的用户。
指向预期的主目录。
该主目录的其他普通文件是可读的 。
在返回下读取 。
因此,最小的诊断不是另一个。
从交互应用程序和计划进程运行一个相同的读取,然后在桌面、文档或下载之外添加一个控制路径。
如果用户和路径正确,控制成功,并且只有被保护的文件夹失败,则调查预定过程的macOS隐私上下文.
管道可以隐藏否认 我的第一个探测器包含这行:它印出,然后印出。
在zsh中,管道的默认状态是其上个指令状态.
成功打印出错误文本, 因此管道虽然失败, 仍然看起来成功 。
这足以将明显的隐私否定转化为缺失的下游数据.
对于一个诊断脚本,在探测器前允许管道故障:我用最小的控制检查了行为:默认返回,并启用。
在更大的工作,抓住和处理状态 立即,而不是让另一个命令覆盖。
如果任务不需要保护文件夹, 请移动所需的输入和状态到一个无保护的应用程序目录中 。
从这次试验的两种发射背景来看,下面的负控制路径都是可以读取的。
如果工作必须读取文档,则将此作为单独的许可要求,从实际发射代理测试.
一个成功的终端运行并不能证明计划的进程有相同的访问权限.
我没有测试全磁盘访问(Full Disk Access),即一个系统启动Daemon,桌面,或下载,因此这个结果不能确定这些配置是如何表现的.
实用规则是狭义的:同样的uid和同义不会使"终端"和"发射代理"的等同阅读器成为.
比较发射背景,保持外向负控制,使管道报告实际失败的指令.