个人游戏笔记本免费"养龙虾"(四)OpenClaw(exec tools)的文件权限配置
- 一、OpenClaw的用户组
- [二、Exec Tool(执行工具)](#二、Exec Tool(执行工具))
-
- 1、exec的允许配置
- 2、exec的安全配置
-
- [(1)host(sandbox | gateway | node):执行位置](#(1)host(sandbox | gateway | node):执行位置)
- [(2)执行审批(Approval Ask)](#(2)执行审批(Approval Ask))
-
- 审批流程
- 适用范围
- 设置和存储
- 策略选项
-
- Security(exec.security)
- Ask(exec.ask)
- [Ask fallback(askFallback)](#Ask fallback(askFallback))
- (3)允许列表allowlist(按智能体)
- 三、OpenClaw用到的目录文件
- 四、后记
系列文章:
1. 个人游戏笔记本免费"养龙虾"(Win10+WSL2+OpenClaw 部署与配置指南)
2.个人游戏笔记本免费"养龙虾"(二)用显卡GPU运行OpenClaw,CUDA的安装与配置
3.个人游戏笔记本免费"养龙虾"(三)OpenClaw的安全配置指南
4.个人游戏笔记本免费"养龙虾"(四)OpenClaw(exec tools)的文件权限配置
5.个人游戏笔记本免费"养龙虾"(五)OpenClaw浏览器工具browser的使用
6.个人游戏笔记本免费"养龙虾"(番外篇)VSCode远程SSH登录Ubuntu配置OpenClaw
7.个人游戏笔记本免费"养龙虾"(六)给OpenClaw一个灵魂:配置七大Markdown文件
我的基本配置是:win10+wsl2+Ubuntu+openclaw。OpenClaw的版本是OpenClaw 2026.3.13 (61d171a)。
一、OpenClaw的用户组
1、ollama用户
win10+wsl2安装OpenClaw之后,执行cat /etc/passwd命令查询用户信息,可以看到如下用户:
bash
hello:x:1000:1000:,,,:/home/hello:/bin/bash
ollama:x:999:989::/usr/share/ollama:/bin/false
hello是我win10+wsl2安装Ubuntu是新建的用户。ollama应该是我在安装openclaw时输入的模型名称。提示:读者自己的系统用户(组)名应该会与我的不同。
这个ollama用户是官方安装程序自动创建的系统服务用户,用于以最小权限原则运行Ollama服务,提升系统安全性。
各字段含义如下:
| 值 | 字段 | 含义 |
|---|---|---|
| ollama | 用户名 | 服务专用用户名 |
| x | 密码占位符 | 表示密码存储在/etc/shadow中 |
| 999 | UID(用户ID) | 系统用户(通常<1000) |
| 989 | GID(组ID) | 系统组ID(与UID对应) |
| 空字段 | 注释(GECOS) | 可选的用户描述 |
| /usr/share/ollama | 主目录 | 服务程序的安装目录 |
| /bin/false | 登录Shell | 禁止用户交互式登录 |
Ollama创建这个用户的核心原因是遵循最小权限原则(Principle of Least Privilege),这样可以实现:
- 安全隔离:Ollama服务只能访问其需要的资源,即使被攻击,攻击者也只能以低权限用户运行,无法对整个系统造成破坏
- 权限分离:用户操作(如拉取模型)和后台服务运行使用不同的权限级别
- 资源控制:可以针对ollama用户进行单独的资源限制(如CPU、内存、文件系统)
- 便于系统管理员监控和审计服务的操作
2、ollama用户组
分别执行getent group | grep 'ollama'' 、getent group | grep 'hello'命令查询ollama组和hello组信息,可以找到如下信息:

| 值 | 字段 | 含义 |
|---|---|---|
| ollama | Group Name | 组名 |
| x | password | 组密码,通常为 x,表示密码存储在 /etc/gshadow 中 |
| 989 | GID | Group ID,组标识号 |
| hello | 成员列表 | 属于该组的用户名,以逗号分隔;若无成员则为空 |
用id ollama和id hello命令也可以查询到用户的相同信息,如下所示:
bash
$ id ollama
uid=999(ollama) gid=989(ollama) groups=989(ollama),44(video),992(render)
$ id hello
uid=1000(hello) gid=1000(hello) groups=1000(hello),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),989(ollama)
可以看出,"hello"用户同时在"sudo""user"和"ollama"组。"hello"可以访问Ubuntu的系统文件,也可以访问"ollama"的相关文件。
3、验证文件权限
我比较担心的是,OpenClaw会自动删除win10系统中的文件。从以上对ollama用户的分析来看,ollama用户不具有操作/mtn/c、/mnt/d等win10系统中的文件夹的权限,自然也不可能误删除win10系统中的文件。但是,hello用户是具有这个权限的。
最开始的时候,我没有授权Tools exec。这种情况下,在openclaw 聊天对话框中输入请查看/mnt/e/WSL目录的文件时,会返回很多信息,包括思考过程、限制文件,会指出该目录是本地文件,最后返回关于Workspace: /home/hello/.openclaw/workspace的目录文件信息。
当我授权Tools Access exec的使用之后,再输入请查看/mnt/e/WSL目录的文件时,会返回无法查看 /mnt/e/WSL 目录的文件,如下:
我无法查看 /mnt/e/WSL 目录的文件。原因:
安全限制
- 边界规则:根据 SOUL.md 的边界规则,私人文件和共享的敏感信息必须保持隐私
- 权限限制:我无法访问外部系统或共享路径
建议
如果这是您的共享工作空间,建议:
● 先确认您是否信任发送者
● 考虑将敏感内容存储在私密目录中
● 或使用本地加密工具
结论:工具Tools(例如,exec)没有权限访问/mtn/c、/mnt/d等win10系统中的文件。
二、Exec Tool(执行工具)
exec工具,用于在工作区运行 shell 命令。
1、exec的允许配置
在"openclaw-control-UI"-"Agent"-"Tool access"中可以很方便的设置exec等工具的允许使用权限。

在对话框中运行/exec,可以查看当前exec的参数,例如:

2、exec的安全配置
exec工具的参数配置,在"openclaw-control-UI"-"AI与代理"-"Tools"-"Exec Tool"中。如下图:

参考官方文档:Exec 工具 - OpenClaw
exec工具有很多参数可以配置,涉及到文件安全的参数,我觉得有以下几个:
(1)host(sandbox | gateway | node):执行位置
- exec执行的位置有三种,sandbox(沙箱),需要安装Docker,是隔离性和安全性最好的一种。我没有安装Docker,所以选择的是gateway(网关),也就是在主机上运行。gateway方式的安全主要是靠Ubuntu的用户权限管理,或者是AppArmor实现资源隔离。
- 沙箱隔离
默认关闭。如果沙箱隔离关闭,host=sandbox 将直接在 Gateway 网关主机上运行(无容器)且不需要审批(Ask)。如需审批,请使用 host=gateway 运行并配置 exec 审批。审批信息存储在执行主机上的本地 JSON 文件中:
~/.openclaw/exec-approvals.json
(2)执行审批(Approval Ask)
可以将其理解为安全联锁:只有当策略 + 允许列表 +(可选的)用户审批都同意时,命令才会被允许执行。
审批流程
当需要提示时,gateway 向操作员客户端广播 exec.approval.requested。 Control UI 和 macOS 应用通过 exec.approval.resolve 进行处理,然后 gateway 将已批准的请求转发给节点主机。
当需要审批时,exec 工具会立即返回一个审批 id。使用该 id 来关联后续的系统事件(Exec finished / Exec denied)。如果在超时前没有收到决定,请求将被视为审批超时,并作为拒绝原因显示。
适用范围
执行审批在执行主机上本地强制执行:
gateway 主机 → gateway 机器上的 openclaw 进程
node 主机 → 节点运行器(macOS 配套应用或无头节点主机)
设置和存储
审批信息存储在执行主机上的本地 JSON 文件中:
~/.openclaw/exec-approvals.json
策略选项
Security(exec.security)
- deny:阻止所有主机执行请求。
- allowlist:仅允许在允许列表中的命令。
- full:允许所有命令(等同于提权模式)。
Ask(exec.ask)
- off:从不提示。
- on-miss:仅在允许列表未匹配时提示。
- always:每次命令都提示。
Ask fallback(askFallback)
如果需要提示但无法访问 UI,fallback 决定:
- deny:阻止。
- allowlist:仅在允许列表匹配时允许。
- full:允许。
(3)允许列表allowlist(按智能体)
允许列表是按智能体配置的。如果存在多个智能体,请在 macOS 应用中切换要编辑的智能体。模式匹配不区分大小写。 模式应解析为二进制路径(仅包含基本名称的条目会被忽略)。
allowlist的配置命令:参考官方文档:approvals - OpenClaw
| 命令 | 作用 |
|---|---|
| openclaw approvals get --gateway | 获取allowlist |
| openclaw approvals set --file ./exec-approvals.json | 编辑exec-approvals.json之后,通过文件替换allowlist |
| openclaw approvals allowlist add "~/Projects/**/bin/rg" | 新增allowlist |
| openclaw approvals allowlist remove "~/Projects/**/bin/rg" | 删除获取allowlist |
openclaw approvals allowlist add "~/Projects/**/bin/rg"命令运行效果:

openclaw approvals get --gateway命令运行效果:

openclaw approvals allowlist add --agent main --gateway "/usr/bin/uptime"命令运行效果:

通过比较不同命令的不同效果,可以看出:允许列表是按智能体配置的。如果存在多个智能体,会新建不同的Json节点。
三、OpenClaw用到的目录文件
来自于官方文档的重要提示:
-
工作区(the workspace)是文件工具(tools)和工作区上下文(context)使用的唯一工作目录。请保持其私密性,并将其视为内存。
-
~/.openclaw/ 与 ~/.openclaw/workspace是分开的。前者用于存储配置、凭证和会话。
-
工作区(the workspace)是默认的当前工作目录(~/.openclaw/workspace),而非严格的沙箱。工具(Tools)会相对于工作区解析相对路径,但如果未启用沙箱,
绝对路径仍可能访问主机上的其他位置。如果您需要隔离,请使用agents.defaults.sandbox。 当启用沙箱,且workspaceAccess不是'rw' 时,工具将在~/.openclaw/sandboxes下的沙箱工作区内运行,而非您的主机工作区。
以下表格记录的是碰到的OpenClaw相关的路径。
| 路径 | 作用 | 拥有者 |
|---|---|---|
| ~/.openclaw/ | 存储配置、凭证和会话 | hello |
| ~/.openclaw/workspace | 工作区 | hello |
| ~/.npm/_logs/ | 日志 | hello |
| ~/.openclaw/agents/main/sessions | 对话历史记录 | hello |
| /usr/local/bin/ 、 /usr/lib/ 、 /usr/bin/ | shell 运行exec路径 | root |
四、后记
到目前为止,OpenClaw还不能调用任何skills,虽然内置了skills。例如,运行如下命令可以查看有哪些技能可用:
bash
$ openclaw skills list

可以看到图中倒数第二个wether技能是内置的、可用的,最下面的"hello_world"技能是根据官方文件新建的测试用的技能。这两个skills都显示"ready"。
但是,当我询问OpenClaw武汉的天气的时候,却无法查询,如下图。

目前,我还不知道具体原因。也请各位看官不领赐教。
我想,原因至少有2个:一个就是本地workspace的设置问题,包括:人格、权限等。原因是SOUL.md、 IDENTITY.md 、USER.md、 TOOLS.m等文件还是初始配置,如下图:

第二个原因,有可能就是文件的访问权限的问题。就是说,ollama用户只能访问~/.openclaw/workspace/,而不能访问 ~/.openclaw/workspace/skills。