有什么方法可以确定 Linux/Apache 服务器上的文件是如何被删除的?

有什么方法可以确定 Linux/Apache 服务器上的文件是如何被删除的?

问题:

我在异地 Linux/Apache 服务器上丢失了几个目录。我已经从 httpd 错误日志中追踪到它们丢失的时间,并且我有一份该机器的 SSL 登录列表(包括网络地址)。

有几个人可以访问我机器上的帐户,所以我想确认这些文件是被意外删除还是故意删除的。如果我能确定会话来自外部网络地址,那么我就可以肯定这是故意的。否则我将需要更多信息。

问题:

有没有办法确定哪个用户帐户(我的还是 root)、网络会话或进程删除了这些文件?我并不担心恢复它们,因为备份是最近的。

相关问题:

我尝试查看我自己帐户的 bash 历史记录(除 root 之外唯一具有权限的帐户),但它似乎只能追溯到我的 SSL 会话的开始。这是否意味着 bash 历史记录被篡改了,还是这是正常现象?

答案1

默认情况下,不会记录此信息(想象一下日志会变得多大)。您可以使用 auditctl 或 inotify/iwatch 添加日志(有趣的选项,请查看),或者您的控制面板日志或 ftp 日志(通常都在 /var/log 的某个地方)或 bash 历史记录可能会帮助您稍微追踪一下。检查您的 HTTP 访问日志,以防某些 GET 请求设法执行此操作(不太可能,但有可能)

如果您的历史记录不存在,则表示它已被清除。这可以手动完成,也可以使用 .bash_logout 或 .logout 文件中的命令完成。

另外,它是 SSH 而不是 SSL :)

答案2

清理总是很困难。您可以使用的资源:

要确定谁登录以及从哪里登录:

  • 最后/最后日志
  • /var/log/secure(大多数时候显示成功和失败的登录)

确定当时发生的情况:

  • ausearch(假设您正在审计;如果不是,您可能考虑开始)
  • sar(确定系统当时是空闲还是繁忙)

如果自事件发生以来没有发生太多变动,目录上的 mtime 可能会有有用的信息(可能没有,但无论如何我通常喜欢收集这类数据)

未来,让每个有权访问机器的人都拥有自己的帐户。你现在拥有的帐户非常愚蠢,因为你刚刚发现了原因;你无法知道谁做了什么。

答案3

仅当您关闭 shell 时才会写入 bash 历史记录(您可以为当前会话停用该 shell)。在正在运行的 bash 会话中,您无法在 bash 历史记录文件中看到在该会话中输入的命令 - 关闭该会话,启动一个新会话,然后您应该能够看到它。

答案4

唯一可靠的方法是运行系统会计(如 sar 或类似程序)。其他方法可能会给你答案,但不能保证:

  1. bash 历史记录无法保证,因为 (a) 存在历史记录限制;(b) 默认情况下不会立即写入;(c) 您必须搜索所有用户帐户的所有 bash 历史记录;(d) 历史记录选项会影响行为;(e) 用户可以清除自己的 bash 历史记录(防止其被写入文件。)

  2. sftp 默认不记录交易,但如果需要,可以在 sftp 服务器上启用此功能。通过 sftp 或 ftp 添加或删除的文件不会记录到 shell 历史记录文件或任何其他地方。

在您的特定情况下,如果您尚未运行会计,那么您唯一的办法就是搜索所有用户帐户的 shell 命令历史记录,希望它能够保留下来。

相关内容