剪藏#剪藏#设计虱聊科技

NAS上Docker部署的Hermes与用户目录权限协作完全指南——Hermes不会再提示没有读写权限了

2026 年 7 月 2 日1 分钟
分享Twitter / XTelegram微博
NAS上Docker部署的Hermes与用户目录权限协作完全指南——Hermes不会再提示没有读写权限了 封面

Hi,我是执着于持续分享NAS、AI、数码、家电、软件技巧相关知识,坚持创作有深度、高质量作品的博主 设计虱聊科技。期待您的关注。

在 NAS 上通过 Docker 自己部署 Hermes 的朋友,都会遇到这个问题:在 NAS 上直接编辑 Hermes 的配置文件、文稿后,这个文件的所有者会发生变化,Hermes 想再读写这个文件,就会提示没有权限。

这样会给我们的操作带来极大的不便,因为这就意味着协作链断了,对于 AI 助手来说,是个致命的问题。

Notion image

我们都知道,Hermes 的容器内用户是 hermes:hermes。假设我在 NAS 上的用户是 shejishi:1013,那么问题的本质就变成, Hermes 容器内的用户(hermes:hermes)和 NAS 上的宿主用户(shejishi:1004)不在同一个世界,不能互相产生关联。

最优雅的解决方案是:把 Hermes 容器内的 hermes 用户,加入到宿主机的用户组里。这样 hermes 和 shejishi 属于同一组,就可以共享组内文件的读写权限。

Notion image

✿ 查询自己的用户信息

假如我的用户名是 shejishi,需要用 SSH 连接 NAS 查询自己的用户名 ID所属的用户组 ID

绿联 NAS 的 SSH 需要在 控制面板-终端机 开启,其他 NAS 同理。

Notion image

然后找个终端,比如 Windows 的 PowerShell。在窗口 ssh 连接 NAS 的 IP 地址,比如我的登录名是 shejishi,NAS IP 是 192.168. 31.116,就输入:

JAVASCRIPT
ssh shejishi@192.168.31.116

窗口会要求输入密码,直接输入我们的 NAS 登录密码,出于隐私保护考虑,输密码时不会显示字符,输入后直接回车,然后输入id

我们就会看到类似这样的输出:

Notion image

意思是,shejishi 这个账号的 id 是 1013,所属的普通用户组 id 是 100。那我们直接把 Hermes 的用户也加入 100 这个普通用户组,他们就是可以协作的队友了。

关键点: 用户组:100(users)

注意: 每个人的用户 ID 和用户组 ID 不一样,要实际查一下,下面过程中代换进去,不能直接抄我的。

✿ 修改 Hermes 的 docker-compose.yaml

我们可以在 Hermes 的 docker-compose.yaml 中添加 usergroup_add 参数,让容器内的 hermes 用户加入宿主机的用户组。

这里注意,不能为了省事直接指定 user: "1013:100",让容器内所有操作都以 shejishi 用户执行,因为这样的话,容器自己的初始化脚本会出问题,会无法启动。

更好的做法是保留容器内的 hermes 用户,但额外加入宿主机的用户组

JAVASCRIPT
services:
  hermes:
    image: ghcr.io/nousresearch/hermes-agent:latest
    container_name: hermes
    # 以上保持不变↓下面是增加的:
    user: "10000:100"
    group_add:
      - "100"
    # 以下保持不变……

这里省略的具体yaml配置,可以在我之前文章中完整yaml的基础上,增加上面的三行就可以了。注意把100换成你查到的自己的用户组。

在NAS上部署Hermes|手把手教程&踩坑总结

✿ 在SSH把docker内的Hermes用户加入普通用户组

只是改 Compose 可能还不够,我们在 SSH 把容器内的 hermes 用户也加入 100 组。

我们需要先找到 Hermes 的容器名称,有两种方法:

方法一:去部署 Hermes 时的 Compose 文件里找

Notion image

可以看到我的 Hermes 容器名是 hermesopt,这是我自己起的名字,你的很可能不同,以你查到的为准。

方法二:在 SSH 中查询

在 SSH 输入:

JAVASCRIPT
sudo docker ps | grep hermes

同样的输入密码,回车,就会看到输出结果了,先找到 Hermes 的镜像名,然后在它后面找到容器名。

Notion image

把 Hermes 用户加入 100 用户组

在 SSH 输入以下命令,

JAVASCRIPT
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 用户组的一员啦。

Notion image

✿ 把Hermes目录下的所有文件权限还给Hermes

如果之前你已经动了 Hermes 的文件,导致他失去了这些文件和目录的权限,我们就需要把文件所有权还给 Hermes。

一个 省事但也许★不那么安全★的方法 供参考(后面也有提供安全但费事的方法,请自己权衡):

(1)把这个目录+文件权限全部设为755(这一步有一定风险)

(2)把这个目录+文件所有权还给 Hermes(10000:10000)

(3)让Hermes自己修复敏感文件的权限

比如我要修复的目录是:/volume1/docker/hermesopt/opt/data

我就在 SSH 终端输入:

JAVASCRIPT
sudo chmod -R 755 /volume1/docker/hermesopt/opt/data
sudo chown -R 10000:10000 /volume1/docker/hermesopt/opt/data
  • -R: 意思是递归,就是把目录和子目录、目录内文件全部这样修改。

  • 755: 意思是所有者可读写、其他用户可读

  • sudo: 意思是临时提升到 root 权限,因为是敏感操作,普通用户权限不足。

因为我们没有以 root 权限登录,所以敏感操作需要用 sudo 命令临时提权,提示输密码就输密码。

★风险提示: 这样操作虽然方便,但是也存在很大的风险,敏感信息,比如对话记录、记忆文件、. env 文件中的各种 key,现在短暂暴露在所有用户的眼皮底下了。所以,我说这是 方便但危险 的操作。

Notion image

这个风险大家自己权衡,如果觉得不放心,也可以直接问 Hermes,按他的指引分步骤分别给每批目录和文件授予 755、700、600 等权限。

Notion image

如果你和我一样,选择方便但有风险的操作,那现在是让 Hermes 出力的时候了,他已经拥有了所有文件的所有权,现在让他自己修复这些敏感信息的权限。

先让他查看目录,排查权限风险。可能你的 Hermes 会列出更多。

Notion image

然后,让 Hermes 自动修复。

Notion image

到这里,权限问题就全部搞定。所有 Hermes 协作目录的文件归 Hermes 所有,但我们同时也可以随时修改它。完美。

✿ 下期预告

大家有遇到过 Hermes 工作时间长了以后,Memory 经常满、失忆的情况吗,下篇咱们聊聊本地部署 Hermes 的第二大脑——大名鼎鼎的 Hindsight,但是本地版。不花钱。

Notion image

坚持创作有深度、高质量的作品、致力于分享干货、抵制标题党和网络垃圾,是我的座右铭。

关注我,蹲后续。您的支持对我真的很重要O(∩_∩)O)。让我们共同打造互联网内容创作和知识分享的一股清流!ヾ(◍°∇°◍)ノ゙

原文地址: https://mp.weixin.qq.com/s?__biz=MzUxNDg0NTY4NQ==&mid=2247485730&idx=1&sn=bfdf12fe75d88bec69ecb163fce2daaa&chksm=f8b625aeeb874ae480a1fe8e998a5d2c83a6d9d3b1b6d350be8647597eb8e15d6aab4249c4c0&mpshare=1&scene=1&srcid=0702FwtUaV1vdflJMVl3mMVN&sharer_shareinfo=2c2272b8a98fb1c525b0541cfbab0bc4&sharer_shareinfo_first=2c2272b8a98fb1c525b0541cfbab0bc4#rd

相关文章