codex cli 在 Windows 沙盒环境中触发权限拒绝的解决方案
- 内容介绍
- 文章标签
- 相关推荐
背景
codex cli在 Windows 沙盒环境(windows.sandbox = "elevated")中,对工作区外的路径没有完整权限(即使加 sandbox_workspace_write.writable_roots 也不行)
[!warning]
配sandbox_mode = "danger-full-access"可以解决,但这无异于脱裤子放屁,不是推荐的工作流
解决方案
简单来说,找到设备名称、codex 沙箱用户的组名、真实路径,加上 acl 权限就行了
举个例子
先找到 codex 沙箱用户的组名
一般来说,组名是 CodexSandboxUsers
如果不确定,可以让 codex 执行 whoami /groups
获取设备名称
设备名称在 系统设置 - 系统 - 关于 - 设备规格 中可以找到,或者在 cli 中执行 hostname 得到
找到要改的路径
uv 是安装到全局路径,然后以硬链接的方式放到项目中的,所以给项目中的虚拟环境改权限是无济于事的
要想找到真实路径,可以执行 fsutil hardlink list "{项目内依赖文件的路径}"
[!tip]-
严格来说,建立硬链接后,真实文件将存在于底层,无论是缓存目录还是虚拟环境文件,都是桌面系统对其的引用,都不算是真实路径。我这里的“真实路径”,其实指的是“源文件路径”,因为硬链接模式下安装依赖时,不论是文件还是 acl 权限,都是源于缓存目录的
一般来说,是在 %localappdata%\uv\cache 下
修改权限
以管理员权限执行 icacls "{目标路径}" /grant "{设备名称}\{codex沙箱用户组名}:(OI)(CI)(RX)" /T /C
大功告成!
让codex再试试之前失败的操作吧!
网友解答:[!tip]
由于缓存文件很多很零散,一般建议先删除缓存(保留根目录)和虚拟环境,再修改权限之后再把依赖装回来
[!warning]
不过注意:硬链接需要把链接的所有文件都删除才是真的删除,如果你有多个项目、多个虚拟环境,需要先将所有虚拟环境都删除再修改权限、重装依赖,不然后者不会跟随新权限
--【壹】--:
感谢大佬!
--【贰】--:
解决一直困扰我的问题
背景
codex cli在 Windows 沙盒环境(windows.sandbox = "elevated")中,对工作区外的路径没有完整权限(即使加 sandbox_workspace_write.writable_roots 也不行)
[!warning]
配sandbox_mode = "danger-full-access"可以解决,但这无异于脱裤子放屁,不是推荐的工作流
解决方案
简单来说,找到设备名称、codex 沙箱用户的组名、真实路径,加上 acl 权限就行了
举个例子
先找到 codex 沙箱用户的组名
一般来说,组名是 CodexSandboxUsers
如果不确定,可以让 codex 执行 whoami /groups
获取设备名称
设备名称在 系统设置 - 系统 - 关于 - 设备规格 中可以找到,或者在 cli 中执行 hostname 得到
找到要改的路径
uv 是安装到全局路径,然后以硬链接的方式放到项目中的,所以给项目中的虚拟环境改权限是无济于事的
要想找到真实路径,可以执行 fsutil hardlink list "{项目内依赖文件的路径}"
[!tip]-
严格来说,建立硬链接后,真实文件将存在于底层,无论是缓存目录还是虚拟环境文件,都是桌面系统对其的引用,都不算是真实路径。我这里的“真实路径”,其实指的是“源文件路径”,因为硬链接模式下安装依赖时,不论是文件还是 acl 权限,都是源于缓存目录的
一般来说,是在 %localappdata%\uv\cache 下
修改权限
以管理员权限执行 icacls "{目标路径}" /grant "{设备名称}\{codex沙箱用户组名}:(OI)(CI)(RX)" /T /C
大功告成!
让codex再试试之前失败的操作吧!
网友解答:[!tip]
由于缓存文件很多很零散,一般建议先删除缓存(保留根目录)和虚拟环境,再修改权限之后再把依赖装回来
[!warning]
不过注意:硬链接需要把链接的所有文件都删除才是真的删除,如果你有多个项目、多个虚拟环境,需要先将所有虚拟环境都删除再修改权限、重装依赖,不然后者不会跟随新权限
--【壹】--:
感谢大佬!
--【贰】--:
解决一直困扰我的问题

