我的生产服务器上的某个进程(我从另一个 Web 开发人员那里继承的一个项目)正在创建 mysql 数据库和站点文件的每日备份。备份存储在/var/www/html/nightlybackup/
,我想将它们移入其中/var/www/backups/
,并删除不再存在的目录并添加新目录。
我怎样才能开始解开这个过程的定义,以便我可以做出一些改变?
我正在使用 Debian 8
答案1
“值得尝试的事情”
随机抽样/探索
- 找到罪犯的几率:50%
- 难度:简单(假设你知道你在看什么)
在以下位置查找不寻常/意外的命令:
~/bin
任何互动用户ps -ef
(以 root 身份)处理任何你不知道的事情crontab -e
编辑crontab
(cron 表)文件以确定它是否每 X 分钟/小时/天作为 cron 作业运行一次。~/.profile
或~/.bashrc
任何用户/usr/local/bin
对于不属于托管包的任何文件/opt
- 脚本语言实例:bash、java、perl、python、ruby 等 - 您尚未启动,或者其
PPID
(父 PID)ps
未引导至您熟悉的进程树,并且您知道它没有执行此操作 - 看看他们是否将脚本/可执行文件命名为与目录相同的名字:(
find / -iname \*nightly\*
可能会返回许多误报,因此也许添加| less
是明智的)
他们可以用许多其他方法来实现这一点,例如从 Java 应用程序服务器、Perl CGI 脚本等等,但这些只是一个开始。
黑客式快速半可靠轮询方法
- 找到罪犯的几率:95%
- 难度:简单(只需运行我在 5 分钟内编写的这个脚本即可)
nohup lsof -r 2 +D /var/www/html/nightlybackup 2>&1 | gzip > nightlybackup-writers.txt.gz &
简而言之:
nohup
防止在您关闭终端或 SSH 会话时退出命令行。lsof
“列出打开的文件”,并这样做递归地在目录 (+D
) 上,再次发生的无限期地(-r
),并且每 2 秒刷新一次。- 如果您获得大量结果,请使用 gzip 压缩,以防止快速填满磁盘。
- 您可以使用命令查看结果
zless
。
此命令可能会对性能产生重大影响,尤其在 (1) 旧内核或 (2) 基于 HDD 的系统上。因此,请运行它一小段时间并确定它使用了多少 CPU/磁盘,如果太多,请终止该进程。
你必须让它继续运行期间夜间备份过程执行的时间。对于任何能够可靠地检测此程序的机制来说,情况通常都是如此。
终极瑞士军刀
- 找到罪犯的几率:99.999999%
- 困难:极端(需要操作系统开发人员级别的知识,或者幸运的话可以复制一个可以执行您想要的操作的预制脚本)
两个都跟踪和系统水龙头是最终的用于监控系统中特定活动模式的工具。DTrace 可以说是更好的,但很多人似乎认为它是抛掷或者 SystemTap 更好,因为它是 Linux 的“原生”版本(DTrace 最初是为 Solaris 设计的,后来才添加进来)。
您可以编写 DTrace 或 SystemTap 命令/脚本来捕获谁在写入该目录中的任何路径。这里是 Server Fault 上的一个示例,以及指向一系列DTrace 单行命令。然后只需让它在后台运行(例如通过screen
或nohup
)并等到备份完成,您就会得到一个进程名称和 PID。
除非你有一个 rootkit,并且该 rootkit 旨在掩盖其活动不被 DTrace/SystemTap 发现,并且假设你正确使用了 DTrace 或 SystemTap 命令,那么将要找出导致这种情况的原因。但这也是最难的方法。