我想编写一个脚本来监视文件/root/.bashrc
并让它在发生这种情况时通知我或者在没有某种身份验证的情况下阻止发生更改。
我该怎么做呢?我从来没有为这样的事情写过脚本。如果你需要我告诉你我会使用的特定语言,那将是 Python 2 或 bash。有没有更简单的方法来实现这一点?
答案1
Pyinotify,简单的方法
既然您要求Python
在解决方案的潜在变体中,那么就有 Python 的pyinotify
模块。我个人使用的是 Python 3。解决方案可以很简单,python3 -m pyinotify <FILE>
或者您可以根据需要编写一个完整的脚本。
下面是一个实际示例:
脚本
可以通过修改提供的教程来实现自定义脚本pyinotify 的官方 GitHub 存储库。由于您只关心对文件的修改,我仅为此实现了脚本,但可以对其进行修改以包含其他事件。
#!/usr/bin/env python3
import pyinotify
import sys
class EventHandler(pyinotify.ProcessEvent):
def process_IN_MODIFY(self, event):
print("File",sys.argv[1]," was modified:",event.pathname)
wm = pyinotify.WatchManager()
mask = pyinotify.IN_MODIFY
handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch(sys.argv, mask, rec=True)
notifier.loop()
以下是一个小测试:
进一步
无论哪种情况,您需要做的就是通过/etc/rc.local
或 通过以 root 权限启动命令cron
,仅此而已。输出可以发送到某种日志文件,也可以向管理员用户发送通知。就我个人而言,我会启动两个命令 - 一个以 root 权限写入日志文件,另一个监视日志文件的更改并向用户发送 GUI 通知。这里的可能性是无穷无尽的,所以请发挥您的想象力。
可以通过保存文件备份(可能在脚本开始时进行)来查找更改,一旦文件被修改 - 运行diff
或通过 Python 脚本本身差异库。您还可以将检查md5
或sha256
哈希值纳入方程式,但除了知道文件已被更改之外,它们没有什么用处。另一个问题是,运行通知程序脚本不会阻止系统离线时可能发生的更改,即如果有人启动实时 USB 或取出您的硬盘并连接到他们的机器,然后才修改文件。这可以通过加密硬盘来缓解。这也意味着您可能应该在脚本启动后立即检查更改。
至于弄清楚WHO修改了文件,您可以考虑将修改日期与以 root/sudo 身份登录的用户的日期关联起来。当然,我必须警告:这是一项有点无望的任务。具有 root 权限的恶意用户可以修改日志并抹去该用户的存在,几乎不会留下任何线索表明该用户是谁。获得 root 权限的用户甚至可以修改您的脚本。总之,避免敏感文件被修改的最佳安全措施是首先防止任何人能够打开该文件。
答案2
这可能会有用:sudo inotifywatch -r /root/.bashrc
有关详细信息,请参阅手册页。