我正在运行一个(复杂的)脚本,它似乎在某个时候修改了一个文件。我希望当脚本/程序尝试写入、chmod、chown 或执行我不同意的任何其他尝试时收到警告。我希望该程序能够正常访问文件系统的其余部分。
拒绝访问是一种解决方案,但由于我必须以 root 身份运行脚本,因此它不起作用。该脚本可以覆盖任何访问控制设置。即使我可以以非 root 身份运行该脚本,该脚本也可能决定在访问失败时采用不同的分支。这就是为什么我更喜欢访问警告而不是拒绝访问。有没有解决方案(例如SE Linux)?
答案1
有几种方法可以做到这一点:
审计
使用以下命令启用文件的auditd监控(确保服务auditd
正在运行后):
auditctl -a exit,always -F path=/path/to/file
然后查看/var/log/audit/audit.log
一下发生了什么事。
完成后使用以下命令删除规则:
auditctl -d 退出,始终 -F path=/path/to/file
扇通知
fanotify 是一个专为病毒扫描程序而设计的系统。它允许一个程序在另一个程序打开任何文件时接收事件通知。然后,监视程序可以执行诸如拒绝访问文件或仅记录文件之类的操作。这里的优点是监视程序可以简单地等待事件而不执行任何操作,因此尝试打开文件的程序只是延迟。在监视程序允许其继续之前,它不会失败或成功。
但这条路线的问题是 fanotify 是新的,并且没有任何简单的命令行实用程序可以用来访问它。您必须编写自己的脚本(如果任何脚本库有接口)或程序。
答案2
如果在 Linux 上,chattr +i the-file
甚至会阻止对文件进行任何修改操作root
(另一个除外chattr
)。
答案3
如果您的系统支持 dtrace(Solaris 及其衍生产品、FreeBSD、Oracle Linux、Mac OS X),则 dtrace 脚本可以记录甚至阻止任何用户(包括 root)对您想要的文件执行上述操作。
dtrace 还可以用于冻结有罪的进程,让您决定恢复或终止它。
答案4
对于需要细粒度文件系统访问的小型脚本编写工作,但人们希望避免处理复杂的审计工具,gentoo 的“沙箱”实用程序非常方便。特别是,它提供了一种简单的方法来交互式地启用和禁用对选定文件的写访问(用于测试然后部署场景)。
在 Gentoo 上它是默认可用的,但在其他发行版上安装应该不会太困难。
http://git.overlays.gentoo.org/gitweb/?p=proj/sandbox.git;a=summary
在内部,它是在引入“libsandbox.so”库的 LD_PRELOAD 机制之上实现的,该库拦截和过滤文件系统调用。它还配备了简洁的交互式 shell 包装器,因此只需输入“sandbox”即可进入受保护的 shell。
支持 OP(假写入)特别要求的功能: http://devmanual.gentoo.org/function-reference/sandbox-functions/index.html