传统但可用的开机自启点
rc.local 是传统但至今有效的开机自启入口:在多数发行版上仍可通过启用 rc-local 服务运行,往里塞一行命令就能长期驻留。
为什么容易被漏掉
正因为「过时」,不少巡检清单里已经删掉了这一项。检查时要同时看文件内容、执行权限与服务启用状态,三者缺一都不能下结论。
基本信息
| 文件 | /etc/rc.local(需可执行权限) |
|---|---|
| 服务 | systemctl status rc-local |
| 检查要点 | 内容与权限位、服务状态一起看 |
| 现状 | 部分发行版默认未启用该服务 |
| 同类入口 | /etc/rc.d 下的初始化脚本与 rc 目录 |
| 权限要求 | 查看普通用户可行,修改需 root |
典型使用场景
- 排查传统开机自启入口是否被利用
- 与 systemd 单元清点互补
- 确认 rc.local 是否仍在生效
- 清理后复验开机行为
- 复盘时说明覆盖了哪些自启入口
检查 rc.local 状态
检查 rc.local 状态
ls -l /etc/rc.local 2>/dev/null
cat /etc/rc.local 2>/dev/null
systemctl status rc-local 2>/dev/null | head -n 15
systemctl is-enabled rc-local 2>/dev/null
wc -l /etc/rc.local 2>/dev/null输出逐列读法
| 检查项 | 含义 | 正常/异常 |
|---|---|---|
| 权限位 | 是否可执行 | 无可执行位时不会运行,属无效配置 |
| 文件内容 | 开机执行的命令 | 出现下载、脚本或后台进程即为可疑 |
| 服务状态 | enabled 或 disabled | 需与文件是否存在一起判断 |
| 文件尾部 | exit 0 之后的行 | 尾部追加是常见后门手法 |
文件存在但没有可执行权限时不会被执行:检查必须同时看权限位与服务状态,只凭文件存在下结论容易出错。
后门常写在文件尾部(exit 0 之后或最后几行):只读开头几行会漏掉,建议完整查看并统计行数后再做判断。
判断是否真正生效
- 文件存在且具备可执行权限
- rc-local 服务处于启用并正在运行的状态
- 脚本内容中确实有会被执行的命令
- 发行版提供的兼容单元正确指向该文件
发行版之间的差异
- 部分发行版不再自带 rc-local 兼容单元,需要自行创建
- 有的发行版把该文件放在 /etc/rc.d 下,路径要先确认
- 启用方式各版本不同,操作前先查本机可用的做法
- 判断以服务状态与实际执行结果为准,不只看文档描述
一并排查的自启入口
- SysV init 脚本与 /etc/rc.d 目录
- systemd 自定义单元与 timer
- crontab 中的 @reboot 条目
- 各用户的登录脚本与 profile 文件