disable 与 mask 的区别
在 systemd 里,disable 只是取消开机自启,服务仍可被依赖关系或人工操作拉起;mask 则把服务单元链接到 /dev/null,彻底封死启动路径,连依赖它拉起的请求也会失败。收敛服务时按“是否需要兜底防护”选择:只是不想开机自启用 disable,希望任何路径都启动不了用 mask。对已被其它单元依赖的服务做 mask 之前,先看依赖树。
基本信息
| 适用平台 | Linux(systemd:RHEL 7+、Debian 8+、Ubuntu 16.04+) |
|---|---|
| 三个动作 | 停止(stop)、取消自启(disable)、彻底屏蔽(mask) |
| 状态查询 | systemctl is-enabled、is-active、list-dependencies |
| 恢复方式 | unmask 后再 enable --now |
| 基线 | 无用服务已停且防止被拉起 |
典型使用场景
- 端口收敛:停掉并屏蔽不需要的监听服务
- 合规整改:关闭测评点名的非必需服务
- 防止复活:屏蔽容易被依赖拉起或脚本自动启动的服务
- 排障隔离:临时屏蔽有问题的服务,避免反复重启
- 变更准备:先 stop 观察,再决定 disable 或 mask
停用与屏蔽
停用与屏蔽
systemctl stop cups # 先停,观察影响
systemctl is-active cups # 确认已停止
systemctl disable --now avahi-daemon # 取消自启并立即停止
systemctl mask cups # 彻底屏蔽,防止被拉起
systemctl is-enabled cups # 预期输出 masked
systemctl list-dependencies cups | head -10 # 屏蔽前确认有无依赖方
systemctl unmask cups && systemctl enable --now cups # 需要时恢复状态读法
| 状态/命令 | 含义 | 注意点 |
|---|---|---|
| enabled | 开机自启 | 服务仍可被依赖拉起 |
| disabled | 不自启 | 人工或依赖仍可启动 |
| masked | 被屏蔽,无法启动 | 依赖它的单元也会失败 |
| is-active | 当前运行状态 | 与是否自启是两件事,需分别确认 |
| list-dependencies | 查看依赖关系 | 屏蔽前必看,避免连锁故障 |
推荐处理顺序是 stop → disable → mask:先用 stop 验证影响面,确认无问题再固化,避免一次性把服务彻底封死。
落地要点
- 对已被依赖的服务 mask 会导致依赖单元启动失败,先用 list-dependencies 确认
- 重装或升级软件包可能重建被 mask 的单元,变更后复查 is-enabled
- 把屏蔽动作写进变更单并注明恢复命令,便于快速回滚
- 容器或最小化系统中部分单元不存在,核查脚本要能容忍缺失
- 屏蔽后复查监听端口,确认服务确实不再监听
屏蔽服务属于变更操作:在远程会话中执行前确认不会影响当前管理通道(例如屏蔽网络相关服务)。