我们有一个 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