哪吒监控后端权限过高?禁用 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,可以先查看服务启动参数:
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 服务,先列出服务名称:
systemctl list-units --type=service | grep nezha-agent然后把后续命令中的 nezha-agent.service 和配置文件路径替换为实际值。
2. 修改配置
先备份配置文件:
sudo cp /opt/nezha/agent/config.yml /opt/nezha/agent/config.yml.bak用编辑器打开它:
sudoedit /opt/nezha/agent/config.yml找到 disable_command_execute 并改成:
disable_command_execute: true如果配置文件中没有这一项,可以在顶层新增一行。注意不要加到 log: 等其他配置块的缩进下面。
3. 重启 Agent
sudo systemctl restart nezha-agent.service检查服务是否正常运行:
sudo systemctl --no-pager --full status nezha-agent.service如果使用 Agent 自带的服务管理功能,也可以在 Agent 目录中执行:
./nezha-agent service -c ./config.yml restart配置文件名和路径仍应以实际安装情况为准。
方法二:安装 Agent 时直接禁用
新装服务器时,可以在 Dashboard 生成的安装命令中加入环境变量:
NZ_DISABLE_COMMAND_EXECUTE=true示例:
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_executeValue: true这种方式适合批量处理,但安全配置最好再到主机上检查一次。当前 Agent 实现会在该开关生效后拒绝 Dashboard 的远程配置读取,也会拒绝远程修改,避免面板再次把它关闭;具体行为仍可能随版本变化,升级后应重新验证。
如果面板已经疑似被入侵,不要再通过面板操作。应当先隔离 Dashboard,在每台主机本地修改配置、重启 Agent,并轮换 Dashboard 登录凭据和 Agent 连接密钥。
如何确认禁用成功?
先在服务器上检查配置:
grep -nE '^disable_command_execute:[[:space:]]*true([[:space:]]*#.*)?$' \ /opt/nezha/agent/config.yml再确认服务已重启且没有报错:
systemctl is-active nezha-agent.servicejournalctl -u nezha-agent.service -n 50 --no-pager最后登录 Dashboard,对这台服务器尝试以下操作:
- 打开在线终端;
- 下发一条无副作用的命令,例如
id; - 尝试打开文件列表。
这些操作都应被 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 权限被盗,攻击者也无法直接借助这些功能把监控面板变成批量控制入口。
参考资料:
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

