必须通过系统角色定义、权限配置文件与运行时策略三者协同实现差异化访问控制:一、定义三层静态角色(管理员、普通用户、受限用户)并分别配置auth.json、AGENTS.md和hermes_base_env.py;二、在skills_guard.py中校验用户OpenID与工具白名单,对敏感操作加上下文限制;三、通过hermes_base_env.py隔离用户环境,强制chroot沙箱;四、用OAuth登录绑定飞书/企微/钉钉身份,实时校验token与部门角色;五、支持基于会话的动态提权(如debug触发+验证码确认)并审计全程。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您正在部署Hermes Agent并需要对不同用户实施差异化访问控制,则必须通过系统角色定义、权限配置文件与运行时策略三者协同实现。以下是具体操作路径:
一、定义系统角色与访问边界
角色划分是权限管理的基础,Hermes Agent支持三层静态角色模型,每类角色对应独立的工具调用能力集与资源可见范围。
1、系统管理员角色需在~/.hermes/auth.json中显式声明"role": "admin",该角色自动获得tools/skills_guard.py中所有技能的无条件执行权。
2、普通用户角色通过AGENTS.md文件中的"permanently authorized"字段标识,其可访问工具集由tools/skills_guard.py中allow_list字段动态加载。
3、受限用户角色必须在environments/hermes_base_env.py中设置user_restricted: true,并在skills_guard.py中为每个工具函数添加@restricted_access装饰器,仅放行file_read、shell_exec(沙箱内)等白名单操作。
二、配置工具访问策略文件
tools/skills_guard.py是核心权限策略执行点,所有工具调用前均触发该模块的校验逻辑,确保命令不越界。
1、打开tools/skills_guard.py,定位到def check_permission(user_id: str, tool_name: str)函数体。
2、在return True前插入基于用户OpenID的硬编码白名单判断,例如:if user_id == "ou_abc123" and tool_name in ["file_write", "web_search"]: return True。
3、为敏感工具如code_execution_tool.py添加额外上下文校验,例如:if "sudo" in command or re.search(r"rm\s+-rf", command): raise PermissionDeniedError("Root-level operations prohibited")。
三、启用环境变量隔离机制
environments/hermes_base_env.py用于实现用户级资源隔离,避免跨用户数据混用或凭证泄露。
1、在hermes_base_env.py中为每个用户创建独立子目录结构,例如os.environ["HERMES_USER_HOME"] = f"/var/hermes/users/{user_openid}"。
2、将该环境变量注入所有工具调用上下文,使file_tools.py默认工作路径锁定在用户专属目录内。
3、在shell_exec工具中强制追加chroot参数,例如subprocess.run(["chroot", os.environ["HERMES_USER_HOME"], "sh", "-c", command]),阻断对宿主文件系统的访问。
四、配置OAuth认证与用户身份绑定
~/.hermes/auth.json存储用户身份凭证,其内容直接影响权限校验链路的起点是否可信。
1、使用hermes auth login命令触发OAuth 2.0授权流程,获取飞书/企业微信/钉钉平台返回的合法user_id与access_token。
2、将返回的user_id写入auth.json的"user_id"字段,同时将access_token存入"oauth_token"字段并设置15分钟自动刷新机制。
3、在每次消息处理前,调用platforms/feishu/verify_user.py验证token有效性,并从飞书API实时拉取用户所属部门与角色标签,覆盖本地缓存的角色定义。
五、实施运行时动态权限升降级
权限不应静态固化,Hermes Agent支持基于会话上下文的临时提权与降权,由trajectory.py记录全程变更。
1、当检测到用户连续三次输入含"debug"关键词的指令时,自动触发临时提权流程,在当前session中激活code_execution_tool。
2、提权操作需二次确认:向用户发送带数字验证码的富文本消息,仅当收到匹配验证码后才修改session.permissions字典。
3、每次提权操作均写入audit_log,包含timestamp、user_id、granted_tool、duration_seconds三项不可篡改字段。


















