在 docker-compose.yml 中添加以下参数:
services:
ntfy:
image: binwiederhier/ntfy
container_name: ntfy
volumes:
- ./cache:/var/cache/ntfy # 确保持久化,auth.db 会存放在这里
environment:
- NTFY_AUTH_FILE=/var/cache/ntfy/auth.db
- NTFY_AUTH_DEFAULT_ACCESS=deny-all # 默认拒绝匿名访问,也可设为 read-only
command: serve
ports:
- 8080:80
进入容器终端:docker exec -it ntfy sh
创建管理员 (Admin):ntfy user add –role=admin <你的用户名>
创建普通用户并分配权限(例如只允许 bob 往 alerts 发消息):
ntfy user add bob
ntfy access bob alerts write-only
查看当前权限列表:ntfy access
基础权限分配指令 你需要进入容器执行命令。权限级别分为:read-write (rw), read-only (ro), write-only (wo), deny (none)。
通配符权限:如果你有多个以 home- 开头的 Topic,可以批量授权:ntfy access bob “home-*” read-write
完全禁止:覆盖默认权限,禁止某用户访问特定 Topic:ntfy access bob private_topic deny
1. 生成 Token
进入容器内部,为指定用户创建一个永久或有有效期的令牌:
bash
# 进入容器
docker exec -it ntfy sh
# 为用户 bob 创建一个 Token(默认永久有效)
ntfy token add bob
# 或者创建一个有效期为 30 天的 Token
ntfy token add bob --expires 30d
移除特定用户的 Topic 权限如果你想删除之前为用户设置的特定权限,使其恢复到系统的默认状态(auth-default-access),请在 access 命令中不指定权限参数: # 语法:ntfy access <用户名> <Topic名称>
docker exec -it ntfy ntfy access alice my_topic
彻底禁止访问 (Deny)如果你不是想删除规则,而是想显式地封杀某个用户对特定 Topic 的访问(即便默认权限是允许的),请将其设为 none 或 deny:docker exec -it ntfy ntfy access bob private_alerts none
清理匿名用户权限如果你之前允许了所有人(匿名)查看某个 Topic,现在想撤销:docker exec -it ntfy ntfy access everyone public_topic
验证移除结果每次操作后,建议运行以下命令确认权限表已更新:docker exec -it ntfy ntfy access
在 ntfy 中,权限级别(Permission Levels)决定了用户对特定 Topic(主题)的交互能力。以下是各级别的详细用途和典型场景:
1. read-write (rw) – 读写权限
- 用途:允许用户既能发布(Publish)消息,也能订阅(Subscribe)并查看历史记录。
- 场景:
- 管理员/主用户:需要完全控制某个 Topic 的交互。
- 协作频道:团队成员之间互发通知,大家都能发也能收。
2. read-only (ro) – 只读权限
- 用途:仅允许接收和查看消息,无法向该 Topic 发送任何内容。
- 场景:
- 终端接收设备:例如你的手机 App 只需要接收告警,不需要通过该 Topic 反馈数据。
- 公告板:只允许服务器发送系统通知,普通用户仅负责“听”。
3. write-only (wo) – 只写权限
- 用途:仅允许发布消息,无法看到该 Topic 的任何已有内容或实时订阅。
- 场景:
- 外部服务/脚本推送到自建服务器:例如 Uptime Kuma 或 IoT 传感器只需要在出故障时“喊一嗓子”,它们不应该(也没必要)看到其他历史消息。
- 安全性增强:防止泄露 Token 的脚本被恶意利用来窥探频道历史。
4. deny (none) – 拒绝访问
- 用途:禁止任何形式的发布或订阅。
- 场景:
- 精准屏蔽:如果你设置了全局
read-only,但想禁止某个特定用户访问敏感的admin-alerts频道,可以显式设为deny。 - 临时封禁:无需删除用户,通过权限覆盖快速切断其访问。
- 精准屏蔽:如果你设置了全局










