如何调查 Linux 上目录权限的修改?

如何调查 Linux 上目录权限的修改?

我们有一个 Ubuntu 12.04/apache 服务器和“/var/www/foo”目录以及 root 权限。

有些东西反复更改该目录的权限。

问题:我们如何调查,什么改变了权限?

答案1

您可以使用审核来调查以发现这一点。在 ubuntu 中,该包称为auditd.

使用该命令开始调查文件或文件夹:

auditctl -w /var/www/foo -p a
  • -w表示查看文件/文件夹
  • -p a意味着监视文件属性的变化

现在开始tail -f /var/log/audit/audit.log。当属性更改时,您将在日志文件中看到类似以下内容:

type=SYSCALL msg=audit(1429279282.410:59): arch=c000003e syscall=268 success=yes exit=0
  a0=ffffffffffffff9c a1=23f20f0 a2=1c0 a3=7fff90dd96e0 items=1 ppid=26951 pid=32041
  auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts5
  ses=4294967295 comm="chmod" exe="/bin/chmod"
type=CWD msg=audit(1429279282.410:59):  cwd="/root"
type=PATH msg=audit(1429279282.410:59): item=0 name="/var/www/foo" inode=18284 dev=00:13
  mode=040700 ouid=0 ogid=0 rdev=00:00

我执行chmod 700 /var/www/foo来触发它。

  • 在第一行,你会看到
    • 哪个可执行文件做到了:exe="/bin/chmod"
    • 进程的pid:pid=32041
    • 您还可以找出它是哪个用户:uid=0在我的例子中是 root 。
  • 在第三行中,您会看到更改后的模式:mode=040700

答案2

我认为没有任何方法可以回答您如何知道过去更改权限的原因,但您可以使用 lsof 命令来查看在任何给定时间哪些用户或进程正在使用文件。你可以尝试将其放在 cron 上并可能捕获它。如果某些东西正在随机更改您的文件权限,并且您不知道它是什么,则可能很难找到它。

您可以使用“chattr”命令防止文件权限被更改。 Chattr 会锁定文件,以便即使是 root 用户也无法在不先运行相应的 chattr 命令的情况下进行修改。

chattr +i filename (使文件名的属性“不可变”,注意没有人可以写入该文件) chattr -i filename (删除不可变标志,以便可以再次更改文件所有权和权限。)

答案3

如果没有auditctl系统,您可以使用以下命令开始调查:

$ ls -lc /path/to/folder

这将“显示 ctime 并按名称排序”,以便显示上次更改文件夹的时间。也许您可以使用此信息将其连接到 cron 作业,或者在查看更改时登录的用户时,将更改连接到用户触发的事件。

要查看上次登录、会话持续时间以及带有时间戳的更多信息,请使用以下命令:

$ last | more

相关内容