马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 醉雪梅花 于 2026-6-14 21:35 编辑
注意:本篇文章仅针对自己部署的Hermes,提出权限问题解决方案。应用中心版本不存在权限问题(绿联已经帮我们设置好啦),不要搞错了哦。 另外,部分操作需要SSH连接NAS,并通过root权限修改部分内容,存在一定风险,请慎重考虑后再动手。
在 NAS 上通过 Docker 自己部署 Hermes 的朋友,都会遇到这个问题:在 NAS 上直接编辑 Hermes 的配置文件、文稿后,这个文件的所有者会发生变化,Hermes 想再读写这个文件,就会提示没有权限。 这样会给我们的操作带来极大的不便,因为这就意味着协作链断了,对于 AI 助手来说,是个致命的问题。
我们都知道,Hermes 的容器内用户是 hermes:hermes。假设我在 NAS 上的用户是 shejishi:1013,那么问题的本质就变成, Hermes 容器内的用户(hermes:hermes)和 NAS 上的宿主用户(shejishi:1013)不在同一个世界,不能互相产生关联。
最优雅的解决方案是:把 Hermes 容器内的 hermes 用户,加入到宿主机的用户组里。这样 hermes 和 shejishi 属于同一组,就可以共享组内文件的读写权限。
✿ 查询自己的用户信息
假如我的用户名是 shejishi,需要用 SSH 连接 NAS 查询自己的用户名 ID 和所属的用户组 ID 。 绿联 NAS 的 SSH 需要在 控制面板-终端机 开启。 然后找个终端,比如 Windows 的 PowerShell。在窗口 ssh 连接 NAS 的 IP 地址,比如我的登录名是 shejishi,NAS IP 是 192.168. 31.116,就输入: 窗口会要求输入密码,直接输入我们的 NAS 登录密码,出于隐私保护考虑,输密码时不会显示字符,输入后直接回车,然后输入“id”。 我们就会看到类似这样的输出:
意思是,shejishi 这个账号的 id 是 1013,所属的普通用户组 id 是 100。那我们直接把 Hermes 的用户也加入 100 这个普通用户组,他们就是可以协作的队友了。 关键点: 用户组:100(users)
注意: 每个人的用户 ID 和用户组 ID 不一样,要实际查一下,下面过程中代换进去,不要直接抄我的。
✿ 修改 Hermes 的 docker-compose.yaml
我们可以在 Hermes 的 docker-compose.yaml 中添加 user 和 group_add 参数,让容器内的 hermes 用户加入宿主机的用户组。 这里注意,不能为了省事直接指定 user: "1013:100",让容器内所有操作都以 shejishi 用户执行,因为这样的话,容器自己的初始化脚本会出问题,会无法启动。 更好的做法是保留容器内的 hermes 用户,但额外加入宿主机的用户组: 这里只贴出加入宿主机的用户组的设置内容,完整的docker-compose可以看我之前的文章: 在原版里,加上加入用户组的内容就可以了。
✿ 在SSH把docker内的Hermes用户加入普通用户组
只是改 Compose 可能还不够,我们在 SSH 把容器内的 hermes 用户也加入 100 组。 我们需要先找到 Hermes 的容器名称,有两种方法(方法一最简单): 方法一:去部署 Hermes 时的 Compose 文件里找 可以看到我的 Hermes 容器名是 hermesopt,这是我自己起的名字,你的很可能不同,以你查到的为准。 方法二:在 SSH 中查询 在 SSH 输入:
- sudo docker ps | grep hermes
复制代码同样的输入密码,回车,就会看到输出结果了,先找到 Hermes 的镜像名,然后在它后面找到容器名。 ★把 Hermes 用户加入 100 用户组: 然后,在 SSH 输入以下命令, - docker exec -u root hermesopt sed -i 's/^users:x:100:/users:x:100:hermes/' /etc/group
复制代码★ 这条命令里,hermesopt 就是刚才查到的我的 Hermes 的容器名,你要替换成自己的。
输入后,回车,不显示任何结果是正常的,不用管它,直接让Hermes帮你验证是否成功加入100组,或者在Hermes的终端中输入id查询。 这样,容器里的 Hermes 用户就成为 100 用户组的一员啦。
✿ 把Hermes目录下的所有文件权限还给Hermes
如果之前你已经动了 Hermes 的文件,导致他失去了这些文件和目录的权限,我们就需要把文件所有权还给 Hermes。 一个 省事但也许★不那么安全★的方法 供参考(后面也有提供安全但费事的方法,请自己权衡): - 把这个目录+文件权限全部设为755(这一步有一定风险)
- 把这个目录+文件所有权还给 Hermes(10000:10000)
- 让Hermes自己修复敏感文件的权限
比如我要修复的目录是:/volume1/docker/hermesopt/opt/data 我就在 SSH 终端输入:
- sudo chown -R 10000:10000 /volume1/docker/hermesopt/opt/data
复制代码- sudo chmod -R 755 /volume1/docker/hermesopt/opt/data
复制代码- -R: 意思是递归,就是把目录和子目录、目录内文件全部这样修改。
- 755: 意思是所有者可读写、其他用户可读
- sudo: 意思是临时提升到 root 权限,因为是敏感操作,普通用户权限不足。
因为我们没有以 root 权限登录,所以敏感操作需要用 sudo 命令临时提权,提示输密码就输密码。 ★风险提示: 这样操作虽然方便,但是也存在很大的风险,敏感信息,比如对话记录、记忆文件、. env 文件中的各种 key,现在短暂暴露在所有用户的眼皮底下了。所以,我说这是 方便但危险 的操作。 ★更安全的做法:这个风险大家自己权衡,如果觉得不放心,也可以直接问 Hermes,按他的指引分步骤分别给每批目录和文件授予 755、700、600 等权限。 如果你和我一样,选择方便但有风险的操作,那现在是让 Hermes 出力的时候了,他已经拥有了所有文件的所有权,现在让他自己修复这些敏感信息的权限。 先让他查看目录,排查权限风险。可能你的 Hermes 会列出更多。 然后,让 Hermes 自动修复。 到这里,权限问题就全部搞定。所有 Hermes 协作目录的文件归 Hermes 所有,但我们同时也可以随时修改它。完美。
✿ 下期预告
大家有遇到过 Hermes 工作时间长了以后,Memory 经常满、失忆的情况吗,下篇咱们聊聊本地部署 Hermes 的第二大脑——大名鼎鼎的 Hindsight,但是本地版。不花钱。 我们下期见。
我是设计虱聊科技——坚持创作有深度、高质量的作品、致力于分享干货、抵制标题党和网络垃圾,是我的座右铭。让我们共同打造互联网内容创作和知识分享的一股清流!ヾ(◍°∇°◍)ノ゙
|