哪吒监控后端权限过高?禁用 Web SSH 的正确方法

1494 字
7 分钟
哪吒监控后端权限过高?禁用 Web SSH 的正确方法

哪吒监控很好用,但它不只是一个“只读监控面板”。为了支持在线终端、批量任务和文件管理,Dashboard 可以向 Agent 下发操作,而常见的一键安装又会让 Agent 以 root(Windows 上通常是 SYSTEM)权限运行。

这意味着:一旦 Dashboard 管理员账号、登录会话或面板本身失守,攻击者可能借助在线终端直接控制所有已接入的服务器。

如果你只需要 CPU、内存、硬盘、流量和告警功能,最稳妥的做法是从每台服务器的 Agent 端关闭命令执行能力。

本文所说的 “Web SSH” 是哪吒面板里的在线终端功能。关闭它不会修改系统的 SSH 服务,也不会关闭服务器的 22 端口。

应该关闭哪个选项?#

哪吒 Agent 提供了下面这个配置项:

disable_command_execute: true

按照哪吒官方 Agent 配置文档,将它设为 true 后,Agent 将不再接受 Dashboard 下发的以下任务:

  • 命令执行
  • 在线终端
  • 文件列表及相关文件管理操作

这个限制在 Agent 端执行。换句话说,即使网页上仍能看到终端入口,Agent 也会拒绝任务。仅仅隐藏前端按钮、修改主题或用 Nginx 屏蔽某个页面,都不能提供同等级别的保护。

方法一:修改已经安装的 Agent#

1. 找到实际配置文件#

不同安装方式、系统和版本的路径可能不同,不要直接假设配置文件一定在哪里。对于使用 systemd 的 Linux,可以先查看服务启动参数:

Terminal window
sudo systemctl cat nezha-agent.service | grep -E 'ExecStart='

输出通常类似:

ExecStart=/opt/nezha/agent/nezha-agent -c /opt/nezha/agent/config.yml

-c 后面的路径就是当前服务使用的配置文件。常见路径包括:

/opt/nezha/agent/config.yml
/opt/nezha/config.yml
/etc/nezha/config.yml

如果安装了多个 Agent 服务,先列出服务名称:

Terminal window
systemctl list-units --type=service | grep nezha-agent

然后把后续命令中的 nezha-agent.service 和配置文件路径替换为实际值。

2. 修改配置#

先备份配置文件:

Terminal window
sudo cp /opt/nezha/agent/config.yml /opt/nezha/agent/config.yml.bak

用编辑器打开它:

Terminal window
sudoedit /opt/nezha/agent/config.yml

找到 disable_command_execute 并改成:

disable_command_execute: true

如果配置文件中没有这一项,可以在顶层新增一行。注意不要加到 log: 等其他配置块的缩进下面。

3. 重启 Agent#

Terminal window
sudo systemctl restart nezha-agent.service

检查服务是否正常运行:

Terminal window
sudo systemctl --no-pager --full status nezha-agent.service

如果使用 Agent 自带的服务管理功能,也可以在 Agent 目录中执行:

Terminal window
./nezha-agent service -c ./config.yml restart

配置文件名和路径仍应以实际安装情况为准。

方法二:安装 Agent 时直接禁用#

新装服务器时,可以在 Dashboard 生成的安装命令中加入环境变量:

Terminal window
NZ_DISABLE_COMMAND_EXECUTE=true

示例:

Terminal window
curl -L https://raw.githubusercontent.com/nezhahq/scripts/main/agent/install.sh -o agent.sh \
&& chmod +x agent.sh \
&& env NZ_SERVER=monitor.example.com:443 \
NZ_TLS=true \
NZ_CLIENT_SECRET='请替换为真实密钥' \
NZ_DISABLE_COMMAND_EXECUTE=true \
./agent.sh

实际使用时,优先复制哪吒 Dashboard 为该服务器生成的安装命令,只增加 NZ_DISABLE_COMMAND_EXECUTE=true,不要照抄示例中的域名和占位密钥。

安装完成后仍建议打开实际的 config.yml,确认其中已经写入:

disable_command_execute: true

方法三:从 Dashboard 下发配置#

当前版本可以在 Dashboard 的 Agent 配置中添加或修改:

Option: disable_command_execute
Value: true

这种方式适合批量处理,但安全配置最好再到主机上检查一次。当前 Agent 实现会在该开关生效后拒绝 Dashboard 的远程配置读取,也会拒绝远程修改,避免面板再次把它关闭;具体行为仍可能随版本变化,升级后应重新验证。

如果面板已经疑似被入侵,不要再通过面板操作。应当先隔离 Dashboard,在每台主机本地修改配置、重启 Agent,并轮换 Dashboard 登录凭据和 Agent 连接密钥。

如何确认禁用成功?#

先在服务器上检查配置:

Terminal window
grep -nE '^disable_command_execute:[[:space:]]*true([[:space:]]*#.*)?$' \
/opt/nezha/agent/config.yml

再确认服务已重启且没有报错:

Terminal window
systemctl is-active nezha-agent.service
journalctl -u nezha-agent.service -n 50 --no-pager

最后登录 Dashboard,对这台服务器尝试以下操作:

  1. 打开在线终端;
  2. 下发一条无副作用的命令,例如 id
  3. 尝试打开文件列表。

这些操作都应被 Agent 拒绝,而服务器的监控数据仍能正常上报。不要只以“页面上没有 Web SSH 按钮”作为验证结果。

进一步降低风险#

关闭 Web SSH 是最关键的一步,但不是完整的安全方案。还可以继续做以下加固:

  • 为 Dashboard 使用独立强密码和多因素认证,不与其他网站复用密码;
  • 通过防火墙、VPN、Cloudflare Access 或反向代理访问控制限制管理后台入口;
  • 保持 Dashboard、Agent 和操作系统安全更新;
  • 不需要内网穿透时设置 disable_nat: true
  • 不允许面板强制更新 Agent 时设置 disable_force_update: true
  • 定期检查 Dashboard 登录记录、Agent 配置和主机上的异常进程;
  • 条件允许时,以最小权限用户运行 Agent,并验证监控指标是否仍能完整采集。

disable_auto_update: true 需要谨慎决定。关闭自动更新可以减少供应链和意外升级风险,但也可能让 Agent 长期停留在有漏洞的旧版本。如果关闭,就应建立明确的手动更新和安全公告跟踪流程。

总结#

哪吒监控的风险并不在于“有一个终端按钮”,而在于高权限 Agent 接受来自中心面板的远程操作。对于只把哪吒当作监控工具的用户,建议在每台 Agent 上设置:

disable_command_execute: true

然后重启 Agent,并分别验证在线终端、远程命令和文件管理都已失效。这样即使 Dashboard 权限被盗,攻击者也无法直接借助这些功能把监控面板变成批量控制入口。

参考资料:

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
哪吒监控后端权限过高?禁用 Web SSH 的正确方法
https://blog.is-w.com/posts/nezha-disable-web-ssh/
作者
Nova
发布于
2025-04-19
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Nova
慢慢折腾,认真记录,每一天都有新的收获。
公告
欢迎来到我的博客,随便看看不用客气!
分类
标签
站点统计
文章
19
分类
6
标签
29
总字数
21,750
运行时长
0
最后活动
0 天前