“值得尝试的事情”

“值得尝试的事情”

我的生产服务器上的某个进程(我从另一个 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 单行命令。然后只需让它在后台运行(例如通过screennohup)并等到备份完成,您就会得到一个进程名称和 PID。

除非你有一个 rootkit,并且该 rootkit 旨在掩盖其活动不被 DTrace/SystemTap 发现,并且假设你正确使用了 DTrace 或 SystemTap 命令,那么将要找出导致这种情况的原因。但这也是最难的方法。

相关内容