虽然路径显示为 /usr/local/bin/start.sh,但实际上可能已被删除或隐藏:
# 检查文件是否真的不存在 ls -la /usr/local/bin/start.sh # 检查文件是否被删除但仍被进程持有 sudo lsof +L1 | grep start.sh
# 查找4505进程的父进程 pstree -aps 4505 # 或使用 cat /proc/4505/status | grep PPid
启动参数中有 --restart always 参数,说明一旦容器停止docker服务器会自动把它拉起。
# 安装auditd(如未安装) sudo apt install auditd # Debian/Ubuntu sudo yum install audit # RHEL/CentOS # 监控所有execve调用 sudo auditctl -a exit,always -F arch=b64 -S execve
# 检查系统服务 systemctl list-units --all | grep -i "start" # 检查init.d服务 ls -la /etc/init.d/ | grep -i "start" # 检查systemd服务文件 sudo grep -r "/usr/local/bin/start.sh" /etc/systemd/
# 检查系统cron sudo ls -la /etc/cron*/* sudo grep -r "/usr/local/bin/start.sh" /etc/cron* # 检查用户cron sudo ls -la /var/spool/cron/crontabs/
# 检查rc.local cat /etc/rc.local # 检查profile和bashrc sudo grep -r "/usr/local/bin/start.sh" /etc/profile.d/ /etc/bash.bashrc ~/.bashrc ~/.profile # 检查supervisor配置(如安装) sudo grep -r "/usr/local/bin/start.sh" /etc/supervisor/
# 查看进程打开的文件 ls -la /proc/4505/fd # 查看进程环境变量 cat /proc/4505/environ | tr '\0' '\n' # 查看进程命令行参数 cat /proc/4505/cmdline | tr '\0' ' '
如果以上方法找不到:
检查内核模块
lsmod
检查LD_PRELOAD
cat /proc/4505/maps cat /proc/4505/environ | grep LD_PRELOAD
使用strace跟踪
sudo strace -p 4505 -f
在找到根源前可以先:
# 阻止脚本执行 sudo touch /usr/local/bin/start.sh sudo chmod 000 /usr/local/bin/start.sh sudo chattr +i /usr/local/bin/start.sh # 或重命名父进程二进制(谨慎操作)
检查系统是否有其他可疑进程
考虑运行rootkit检查工具:
sudo apt install rkhunter sudo rkhunter --check
检查系统日志:
journalctl -xe grep -i "start.sh" /var/log/*
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!