mask 是什么
mask 是 systemd 里最彻底的屏蔽方式:它在 /etc/systemd/system 下为目标单元建立指向 /dev/null 的符号链接,systemd 见到这个链接就认为单元不可用,依赖、socket 激活、手动启动全都会被拒绝。disable 只是取消开机自启,不是屏蔽。等保与最小化整改里屏蔽多余服务,用它最可靠。
基本信息
| 屏蔽 | systemctl mask <单元> |
|---|---|
| 恢复 | systemctl unmask <单元> |
| 本质 | /etc/systemd/system 下指向 /dev/null 的软链 |
| 对比 disable | 只取消自启,仍可手动或被依赖拉起 |
| 适用平台 | 所有使用 systemd 的发行版 |
典型使用场景
- 等保整改:把不需要的服务彻底关死,防止被依赖拉起
- 临时屏蔽可疑服务,处置完成后再恢复
- 屏蔽发行版自带但业务不用的服务,如打印与文件共享
- 迁移窗口期防止旧服务在新主机抢端口
- 与 disable 叠加,确保重启后仍不会被拉起
操作与确认
操作与确认
systemctl status cups.service # 先看状态与当前是否被使用
systemctl list-dependencies --reverse cups.service # 查反向依赖评估影响
systemctl disable --now cups.service # 先停止并取消自启
systemctl mask cups.service # 彻底屏蔽
systemctl status cups.service # 期望显示 Loaded: masked
ls -l /etc/systemd/system/cups.service # 确认指向 /dev/null
systemctl unmask cups.service # 需要时恢复几种状态对比
| 状态 | 含义 | 还能被拉起吗 |
|---|---|---|
| enabled | 开机会自启 | 能,手动也能起 |
| disabled | 不开机自启 | 能,手动或被依赖时起 |
| masked | 链接到 /dev/null | 不能,任何方式都拒绝 |
| masked-runtime | 仅本次运行期屏蔽 | 重启后失效 |
被别的单元依赖的服务一旦 mask,依赖链上的目标可能启动失败;动手前用 systemctl list-dependencies --reverse 看清谁依赖它,并安排在维护窗口内操作。
mask 只对 systemd 单元生效:用 sysv 兼容脚本或由计划任务调起的进程不受影响,验收时要一并确认。
等保常屏蔽的服务
- 打印服务:cups 及其 socket 单元,服务器通常完全用不到
- 蓝牙与多媒体:bluetooth、ModemManager 等桌面组件
- 局域网发现:avahi-daemon 以及配套的 socket 单元
- 文件共享:smb、nfs-server、rpcbind 按业务取舍
- 自动挂载:autofs,无需求时关闭可减少攻击面
整改常见写法是先 disable --now 停掉并取消自启,再 mask 固化,最后用 systemctl list-unit-files 核对状态是否与清单一致。