首页/安全/取证与溯源速查/rc.local 与开机执行脚本
Linux 取证135 条

rc.local 与开机执行脚本

rc.local 由 rc-local.service 在启动末端执行,很多发行版默认不再创建该文件;一旦出现内容,通常是人为添加的启动项。

取证与溯源速查安全更新于 2026-10-13

rc.local 开机脚本

/etc/rc.local 源自 SysV 时代,在现在的系统上由 rc-local.service 这个兼容单元负责执行。它写法简单、能放任意命令,至今仍是常见的持久化位置,同时也常被运维用来放自定义启动项,判断时要区分两者。

基本信息

文件/etc/rc.local、RHEL 系的 /etc/rc.d/rc.local
执行方式由 systemd 的 rc-local.service 单元拉起
权限要求文件需要可执行权限,首行解释器要正确
单元状态systemctl status rc-local.service、systemctl is-enabled
适用平台多数主流 Linux 发行版
扩展目录部分发行版提供 /run/rc.local.d 之类的补充目录

典型使用场景

  • 排查开机自启的持久化脚本
  • 确认业务自定义启动项是否仍在执行
  • 检查单元已启用但脚本文件缺失的异常情况
  • 分析重启后出现的未知进程来源
  • 与 shell 启动文件、计划任务一起完成持久化面盘点

最小示例

最小示例
cat /etc/rc.local 2>/dev/null                     # 阅读脚本内容
ls -l /etc/rc.local /etc/rc.d/rc.local 2>/dev/null
systemctl status rc-local.service --no-pager | head -12
systemctl is-enabled rc-local.service
ps -ef | head                                      # 结合运行中的进程定位来源
stat -c '%n mtime=%y ctime=%z' /etc/rc.local 2>/dev/null

观察项与信号

观察项含义异常信号
文件内容开机执行的命令含下载、解码或重定向语句
可执行权限是否会被实际执行缺少执行位时脚本被跳过
单元状态是否启用与运行结果失败信息会出现在 status 输出中
首行解释器决定用哪个 shell 解释与实际语法不匹配会静默失败
文件时间戳mtime 与 ctime改动时刻与重启记录可对照
单元已启用但文件不存在,或文件存在却没有可执行权限,都会导致脚本被跳过;这两种情况都要在结论里说明。
新系统上部分发行版默认不再创建 /etc/rc.local,该文件出现本身就是值得追查的信号。
阅读脚本内容即可,不要为了验证而手动执行;脚本可能包含启动服务、下载文件等改变状态的命令。

易错点

  • 只看文件不看单元状态:脚本可能因未启用或缺少执行权限而从未运行,忽略这点会得出错误结论
  • 手动执行脚本做验证:可能启动服务或触发下载,直接改变系统状态
  • 混淆业务启动项与持久化脚本:需要结合文件时间戳与账号使用记录区分
  • 忽略首行解释器:解释器与语法不匹配时脚本静默失败,表现为似乎没有配置

数据来源与参考

  • systemd 官方文档(rc-local.service)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌