如何查找写入information级别日志且来源为*** script的脚本
问题
我需要定位写入information级别日志的脚本,目前仅能在日志的source字段中看到「*** script」选项,无法确定具体是哪个脚本执行了日志写入操作,请问有哪些可行的排查思路?
可行排查方案
1. 全局Shell执行审计
- 追加调试规则到全局或用户级Shell配置文件(
/etc/profile、/etc/bash.bashrc、~/.bashrc、~/.zshrc等),记录所有执行的命令/脚本上下文:
export PROMPT_COMMAND='echo "$(date "+%Y-%m-%d %H:%M:%S") | 执行用户: $USER | 当前路径: $PWD | 执行命令: $BASH_COMMAND" >> /var/log/shell_exec_audit.log'
- 待目标info日志生成后,匹配两者的时间戳,即可直接定位到对应执行的脚本路径。
- 排查完成后删除追加的配置即可,不会影响系统原有逻辑。
2. 日志写入入口埋点
- 首先确认当前系统写日志的公共调用入口,常见的有系统自带的
logger命令、各编程语言的日志库公共方法。 - 以
logger为例,临时替换为带审计功能的包装脚本:- 备份原二进制:
cp /usr/bin/logger /usr/bin/logger.orig - 新建
/usr/bin/logger包装脚本:
- 备份原二进制:
#!/bin/bash echo "$(date "+%Y-%m-%d %H:%M:%S") | 调用进程PID: $$ | 父进程PID: $PPID | 调用进程命令行: $(cat /proc/$$/cmdline | tr '\0' ' ') | 父进程命令行: $(cat /proc/$PPID/cmdline | tr '\0' ' ')" >> /var/log/logger_audit.log exec /usr/bin/logger.orig "$@"
- 给脚本加执行权限:
chmod +x /usr/bin/logger
- 待目标日志生成后查看
/var/log/logger_audit.log即可定位调用脚本。 - 排查完成后执行
mv /usr/bin/logger.orig /usr/bin/logger恢复原配置。
3. 系统级进程追踪
- 用
auditd配置审计规则监控日志写入入口的调用行为:
# 以监控logger调用为例 auditctl -w /usr/bin/logger -p x -k logger_call_audit
- 待日志生成后执行
ausearch -k logger_call_audit即可查看所有调用logger的进程详情,包含脚本路径、执行用户、执行时间等信息。 - 也可以用
bcc工具集的execsnoop工具实时捕获系统所有新启动的进程,匹配日志生成时间对应溯源。
4. 静态脚本特征扫描
- 若无法进行实时调试,可全量扫描系统内的可执行脚本,匹配日志写入特征:
# 扫描所有常见脚本类型中包含info级别日志写入的文件 find / -type f \( -name "*.sh" -o -name "*.py" -o -name "*.js" -o -name "*.php" \) | xargs grep -l -i "information\|info.*log" 2>/dev/null
- 对扫描结果中的脚本逐一核对日志输出逻辑,匹配
*** script的来源特征即可。
内容的提问来源于stack exchange,提问作者user3065815
相关产品推荐
相关产品推荐

