Ubuntu 24.04 Cockpit 安全安装与运维手册(脱敏版)

适用对象:Ubuntu 24.04 LTS 服务器。本文中的 <管理网段><服务器IP><管理员账户> 均为占位符;请替换为本环境的实际值,勿在文档、终端记录或截图中写入密码、私钥、真实公网 IP 等敏感信息。

1. 用途、边界与推荐架构

Cockpit 是 Linux 的 Web 管理界面,默认通过 HTTPS 的 TCP 9090 端口提供服务。它可作为 SSH 的备用管理入口:当 sshd 服务停止、但操作系统、网络与 Cockpit 本身仍在运行时,可登录 Cockpit 的终端执行:

sudo systemctl restart ssh
sudo systemctl status ssh

Cockpit 不是带外管理工具。若系统宕机、网络故障、内核卡死或磁盘/引导异常,Cockpit 同样无法访问。生产服务器应同时配置厂商 BMC/IPMI/Redfish、远程 KVM 和远程电源控制,作为最终恢复通道。

推荐架构:

日常管理:SSH(仅密钥)
备用入口:Cockpit(仅管理网段访问 9090)
最终恢复:BMC/IPMI/远程 KVM(独立于操作系统)

2. 安装或升级 Cockpit

Ubuntu 24.04 原始仓库中的 Cockpit 版本较旧。优先使用 noble-backports 的版本。

先查看可用版本:

sudo apt update
apt-cache policy cockpit cockpit-ws cockpit-bridge

若候选版本来自 noble-backports,安装或升级:

sudo apt install -t noble-backports cockpit

若系统提示找不到 noble-backports,说明 APT 软件源被自定义过;先由系统管理员在 Ubuntu 软件源配置中启用 noble-backports,再执行上述命令。

启用 Cockpit 开机启动并立即开始监听:

sudo systemctl enable --now cockpit.socket

验证:

systemctl is-enabled cockpit.socket
systemctl status cockpit.socket --no-pager

预期结果中应包含 enabledactive (listening)

3. 版本与漏洞核验

3.1 CVE-2026-4631

Cockpit 曾披露 CVE-2026-4631:旧版的登录页“连接到(Connect to)”远程登录功能存在未认证远程代码执行风险。攻击者只需能访问 Cockpit 的 9090 端口,不需要合法用户名或密码。

  • 上游修复版本:Cockpit 360
  • Ubuntu 24.04 原始仓库中的 314-1 低于修复版本,不应继续作为运行版本。
  • 截至本文编写时,Ubuntu 24.04 Backports 提供的 Cockpit 362 高于修复版本。

检查已安装版本:

cockpit-bridge --version
dpkg-query -W -f='${binary:Package} ${Version}\n' cockpit cockpit-ws cockpit-bridge

cockpit-bridge --version 显示 360 或更高才满足上游修复版本要求。常规更新操作:

sudo apt update
sudo apt install -t noble-backports cockpit

不要仅依赖“9090 不暴露公网”来替代升级。受控内网中的失陷终端、过宽的 VPN 权限或横向移动同样可能访问该端口。

参考资料:

4. 禁用“连接到”远程主机登录

如果 Cockpit 只用于管理本机,应禁用登录页的“连接到”输入框。该设置保留本机 https://<服务器IP>:9090 登录与本机管理功能,不影响 SSH 服务。

编辑配置:

sudo mkdir -p /etc/cockpit
sudoedit /etc/cockpit/cockpit.conf

写入或在既有 [WebService] 段中加入:

[WebService]
LoginTo=false

若文件中已有 [WebService],不要重复创建该段,仅添加 LoginTo=false

应用配置:

sudo systemctl restart cockpit.socket

重新打开 Cockpit 登录页后,“连接到”输入框应消失。

5. 网络与防火墙控制

Cockpit 默认监听 TCP 9090。仅允许指定的管理 VLAN、跳板机或 VPN 网段访问;不要向整个办公网或公网开放。

5.1 修改默认端口(示例:38080)可选操作,非必须

Cockpit 由 systemdcockpit.socket 监听端口。不要直接修改系统自带的 unit 文件;使用 drop-in 配置覆盖默认监听地址。

创建配置目录并编辑 drop-in:

sudo mkdir -p /etc/systemd/system/cockpit.socket.d
sudoedit /etc/systemd/system/cockpit.socket.d/listen.conf

写入以下内容,将默认 9090 改为 38080

[Socket]
ListenStream=
ListenStream=38080

第一条空的 ListenStream= 是必需的:它用于清除原 unit 中的默认 9090 监听配置,再由第二条指定新端口。

加载并应用配置:

sudo systemctl daemon-reload
sudo systemctl restart cockpit.socket

验证新端口与旧端口:

sudo ss -ltnp 'sport = :38080'
sudo ss -ltnp 'sport = :9090'

第一条应显示 Cockpit 监听;第二条不应有输出。新的访问地址为:

https://<服务器IP>:38080
5.2 按管理网段放行端口

UFW 示例(将占位网段替换为实际受信任管理网段;端口应与实际 Cockpit 监听端口一致):

sudo ufw allow from <管理网段> to any port 9090 proto tcp
sudo ufw status numbered

若已将端口改为 38080,应改用:

sudo ufw allow from <管理网段> to any port 38080 proto tcp
sudo ufw status numbered

确认不再需要旧端口的 UFW 规则后,再根据 sudo ufw status numbered 显示的编号移除旧的 9090 放行规则。

确认端口监听状态:

sudo ss -ltnp 'sport = :9090'

通过浏览器访问默认端口时:

https://<服务器IP>:9090

若已修改端口,则使用新的端口,例如:

https://<服务器IP>:38080

应使用可信 TLS 证书;不要长期忽略浏览器的证书告警。

6. 账户与权限策略

6.1 SSH 保持仅密钥登录

Cockpit 的网页本机登录使用 PAM/系统账户密码,独立于 sshd 的密码认证策略。因此可以同时保持 SSH 仅允许密钥登录:

sudo sshd -T | grep passwordauthentication

预期:

passwordauthentication no
6.2 使用普通 sudo 账户登录 Cockpit

推荐使用命名的普通管理账户(例如 <管理员账户>),不要日常直接使用 root 登录 Cockpit。该账户加入 sudo 组后,可在 Cockpit 中开启“管理权限”,并执行重启系统、重启服务、更新和网络管理等操作。

检查账户的组:

groups <管理员账户>

若输出没有 sudo,由已有管理员执行:

sudo usermod -aG sudo <管理员账户>

随后让该账户退出并重新登录。

6.3 禁止 root 的 Cockpit 登录

Cockpit 新安装默认禁止 root Web 登录。若之前为了测试删除了限制项,建议恢复:

sudoedit /etc/cockpit/disallowed-users

确保文件中有单独一行:

root

root 密码可保留为 BMC/物理控制台等紧急恢复用途,但不应成为日常 Cockpit 登录凭据。使用普通 sudo 账户能保留可追溯的审计身份,并降低密码泄露后的影响范围。

7. 登录与浏览器问题处理

修改 Cockpit 配置或升级后,如果普通浏览器窗口的“登录”按钮持续转圈,而无痕窗口可以正常登录,通常是该站点的旧缓存或 Cookie 未清除,并非 Cockpit 服务故障。

处理方法:

  1. 关闭该 Cockpit 页面。
  2. Ctrl + F5 强制刷新,或清除 <服务器IP> / 管理域名对应的站点数据(Cookie、缓存)。
  3. 重新打开 https://<服务器IP>:9090 并登录。

若无痕窗口也无法登录,再收集以下信息进行排查:

sudo systemctl status cockpit.socket cockpit.service --no-pager
sudo journalctl -u cockpit.socket -u cockpit.service --since '15 minutes ago' --no-pager
sudo sed -n '1,80p' /etc/cockpit/cockpit.conf

日志可用于故障分析;共享日志前应检查并删除真实用户名、主机名、IP、令牌等敏感信息。

8. 日常检查清单

每次系统维护或至少每月执行:

sudo apt update
sudo apt upgrade
cockpit-bridge --version
systemctl is-enabled cockpit.socket
sudo sshd -T | grep passwordauthentication

确认以下条件持续满足:

  • Cockpit 版本为 360 或更高,并持续跟进 Ubuntu 安全更新。
  • /etc/cockpit/cockpit.conf 包含 LoginTo=false
  • 9090 仅允许指定管理网段访问。
  • SSH 仍为 passwordauthentication no
  • 日常使用普通 sudo 账户,root 在 /etc/cockpit/disallowed-users 中。
  • BMC/IPMI/远程 KVM 可独立访问并定期验证。

9. 最小安全配置速查

Cockpit:noble-backports,版本 >= 360
启动:cockpit.socket 已 enabled 且 active (listening)
端口:TCP 9090 或自定义端口(如 38080),仅受信任管理网段
功能:LoginTo=false
登录:普通 sudo 账户
SSH:仅密钥登录,PasswordAuthentication no
兜底:BMC/IPMI/远程 KVM
Copyright © https://yan-jian.com 2023 - 2026 All Right Reserved all right reserved,powered by Gitbook更新时间: 2026-09-09 09:20:09

results matching ""

    No results matching ""