返回列表 发布新帖

[用户教程] 自己部署的Hermes提示权限不足?解决Hermes与用户协作目录的权限问题

283 4
发表于 5 天前 | 查看全部 阅读模式 IP:–广东–佛山–高明区

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 醉雪梅花 于 2026-6-14 21:35 编辑

注意:本篇文章仅针对自己部署的Hermes,提出权限问题解决方案。应用中心版本不存在权限问题(绿联已经帮我们设置好啦),不要搞错了哦
另外,部分操作需要SSH连接NAS,并通过root权限修改部分内容,存在一定风险,请慎重考虑后再动手。


在 NAS 上通过 Docker 自己部署 Hermes 的朋友,都会遇到这个问题:在 NAS 上直接编辑 Hermes 的配置文件、文稿后,这个文件的所有者会发生变化,Hermes 想再读写这个文件,就会提示没有权限。
01.png
这样会给我们的操作带来极大的不便,因为这就意味着协作链断了,对于 AI 助手来说,是个致命的问题。

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

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


查询自己的用户信息

假如我的用户名是 shejishi,需要用 SSH 连接 NAS 查询自己的用户名 ID 和所属的用户组 ID 。
绿联 NAS 的 SSH 需要在 控制面板-终端机 开启。
02.png
然后找个终端,比如 Windows 的 PowerShell。在窗口 ssh 连接 NAS 的 IP 地址,比如我的登录名是 shejishi,NAS IP 是 192.168. 31.116,就输入:
复制代码
窗口会要求输入密码,直接输入我们的 NAS 登录密码,出于隐私保护考虑,输密码时不会显示字符,输入后直接回车,然后输入“id”。
  1. id
复制代码
我们就会看到类似这样的输出:
image.png
意思是,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 用户,但额外加入宿主机的用户组:
image.png
这里只贴出加入宿主机的用户组的设置内容,完整的docker-compose可以看我之前的文章:
在原版里,加上加入用户组的内容就可以了。



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

只是改 Compose 可能还不够,我们在 SSH 把容器内的 hermes 用户也加入 100 组。
我们需要先找到 Hermes 的容器名称,有两种方法(方法一最简单):
方法一:去部署 Hermes 时的 Compose 文件里找
04.png
可以看到我的 Hermes 容器名是 hermesopt,这是我自己起的名字,你的很可能不同,以你查到的为准。
方法二:在 SSH 中查询
在 SSH 输入:
  1. sudo docker ps | grep hermes
复制代码
同样的输入密码,回车,就会看到输出结果了,先找到 Hermes 的镜像名,然后在它后面找到容器名。
05.png
★把 Hermes 用户加入 100 用户组:
然后,在 SSH 输入以下命令,
  1. 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 用户组的一员啦。
06.png


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

如果之前你已经动了 Hermes 的文件,导致他失去了这些文件和目录的权限,我们就需要把文件所有权还给 Hermes。
一个 省事但也许★不那么安全★的方法 供参考(后面也有提供安全但费事的方法,请自己权衡):
  • 把这个目录+文件权限全部设为755这一步有一定风险
  • 把这个目录+文件所有权还给 Hermes(10000:10000)
  • 让Hermes自己修复敏感文件的权限

比如我要修复的目录是:/volume1/docker/hermesopt/opt/data
我就在 SSH 终端输入:


    1. sudo chown -R 10000:10000 /volume1/docker/hermesopt/opt/data
    复制代码
    1. sudo chmod -R 755 /volume1/docker/hermesopt/opt/data
    复制代码
  • -R: 意思是递归,就是把目录和子目录、目录内文件全部这样修改。
  • 755: 意思是所有者可读写、其他用户可读
  • sudo: 意思是临时提升到 root 权限,因为是敏感操作,普通用户权限不足。

因为我们没有以 root 权限登录,所以敏感操作需要用 sudo 命令临时提权,提示输密码就输密码。
★风险提示: 这样操作虽然方便,但是也存在很大的风险,敏感信息,比如对话记录、记忆文件、. env 文件中的各种 key,现在短暂暴露在所有用户的眼皮底下了。所以,我说这是 方便但危险 的操作。
★更安全的做法:这个风险大家自己权衡,如果觉得不放心,也可以直接问 Hermes,按他的指引分步骤分别给每批目录和文件授予 755、700、600 等权限
08.png
如果你和我一样,选择方便但有风险的操作,那现在是让 Hermes 出力的时候了,他已经拥有了所有文件的所有权,现在让他自己修复这些敏感信息的权限。
先让他查看目录,排查权限风险。可能你的 Hermes 会列出更多。
09.png
然后,让 Hermes 自动修复。
10.png
到这里,权限问题就全部搞定。所有 Hermes 协作目录的文件归 Hermes 所有,但我们同时也可以随时修改它。完美。


下期预告

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


我是设计虱聊科技——坚持创作有深度、高质量的作品、致力于分享干货、抵制标题党和网络垃圾,是我的座右铭。让我们共同打造互联网内容创作和知识分享的一股清流!ヾ(◍°∇°◍)ノ゙

评论4

绿联NAS私有云Lv.9绿联NAS社区管理员 绿联NAS社区会员用户 发表于 4 天前 | 查看全部 IP:–海南–海口
⚠️ 风险提醒

感谢 @设计虱聊科技 的干货分享,帖子开头已有风险提示,这里补充强调两点:

1. `chmod -R 755` 全量改权限

```bash
sudo chmod -R 755 /volume1/docker/hermesopt/opt/data
```
这会让 所有文件变成所有人可读,`.env` 里的 API Key、对话记录等敏感数据直接裸奔。建议优先用帖子里的"安全做法"——让 Hermes 分步指引授权。

2. `sed` 改容器系统文件

GID 不匹配会静默失败。建议动手前先备份:
```bash
docker exec -u root hermesopt cp /etc/group /etc/group.bak
```

感谢作者分享优质教程~请大家仔细阅读风险提示,安全操作 🤝
绿联NAS产品功能问题回复、产品功能动态更新、产品需求进度更新、产品公测组织相关事项~
设计虱聊科技楼主Lv.4 发表于 4 天前 | 查看全部 IP:–广东–佛山–高明区
绿联NAS私有云 发表于 2026-6-15 17:56
⚠️ 风险提醒

感谢 @设计虱聊科技 的干货分享,帖子开头已有风险提示,这里补充强调两点:

感谢补充细节。
SeaskyLv.1 发表于 4 天前 | 查看全部 IP:–贵州–遵义
版本比较新的hermes镜像直接设置用户权限似乎会报错。因为刚开始启动s6的时候需要root权限。
```
[hermes] ERROR: container started with --user 1000 (an arbitrary, non-hermes UID) — not supported.
To make container-written files match your HOST user, don't use --user.
Start as root (the default) and pass your host UID/GID instead:
    docker run -e HERMES_UID=$(id -u) -e HERMES_GID=$(id -g) ...
NAS users (Synology / unRAID / UGOS) can use the c aliases:
    docker run -e PUID=$(id -u) -e PGID=$(id -g) ...

```
可以使用PUID/PGID环境变量的方式设置

设计虱聊科技楼主Lv.4 发表于 3 天前 | 查看全部 IP:–河南 /全省通用
kbvQdR 发表于 2026-6-15 23:32
版本比较新的hermes镜像直接设置用户权限似乎会报错。因为刚开始启动s6的时候需要root权限。
```
[hermes]  ...

是的,感谢补充。需要先初始配置,完成初次配置后再改。

评论

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2026 绿联NAS私有云社区 版权所有 All Rights Reserved. 粤公网安备44030002002555号| 粤ICP备12028978号
关灯 在本版发帖
联系技术支持
返回顶部
快速回复 返回顶部 返回列表