要使用inotify提升Ubuntu系统安全性,首先需安装inotify-tools(包含inotifywait和inotifywatch核心工具),用于监控文件系统事件。通过以下命令安装:
sudo apt-get update && sudo apt-get install inotify-tools
安装完成后,可通过inotifywait -h验证是否安装成功。
针对系统关键路径(如/etc(配置文件)、/bin//sbin(系统命令)、/usr/bin(用户命令)、/var/log(日志文件)),使用inotifywait实时监控文件的修改、创建、删除、属性变更等事件,记录操作时间、路径及用户信息。例如,监控/etc目录的脚本:
#!/bin/bash
TARGET="/etc"
LOG_FILE="/var/log/inotify_etc_audit.log"
inotifywait -mr --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w%f %e' -e modify,create,delete,attrib $TARGET | while read date time file event; do
echo "$date $time File: $file Event: $event User: $(whoami)" >> $LOG_FILE
done
将脚本设为后台运行(nohup /path/to/script.sh &),可及时发现未经授权的配置篡改或恶意文件植入。
为提升监控精度,可将inotify与auditd(Linux审计框架)结合,通过auditd记录触发inotify事件的用户身份、进程信息,实现事件溯源。步骤如下:
sudo apt-get install auditd/etc/audit/rules.d/audit.rules,添加需监控的路径(如/etc/sudoers):-w /etc/sudoers -p wa -k sudoers_changes # 监控sudoers文件的写、属性变更
-w /etc/passwd -p wa -k passwd_changes # 监控用户账户文件的变更
sudo systemctl restart auditdausearch命令,获取触发事件的用户信息(如之前“监控特定用户操作”的示例),实现“文件变更→用户身份”的精准关联。通过脚本判断inotify监控到的事件类型,对高风险操作(如/etc/shadow被修改、/bin目录下创建可疑可执行文件)发送邮件、短信或Slack通知,提醒管理员及时处理。例如,在监控脚本中添加告警逻辑:
if [[ "$file" == "/etc/shadow" && "$event" == "modify" ]]; then
echo "ALERT: /etc/shadow was modified at $date $time by $(whoami)" | mail -s "Security Alert: /etc/shadow Modified" admin@example.com
fi
或使用curl发送Slack通知(需提前配置Webhook):
curl -X POST -H 'Content-type: application/json' --data '{"text":"ALERT: Suspicious file change detected in '$TARGET'"}' https://hooks.slack.com/services/XXX/XXX/XXX
快速响应可将安全事件的损失降至最低。
合理配置inotify参数,防止因监控范围过大或事件过多导致系统资源占用过高:
/etc/sysctl.conf,增加以下配置(需root权限):fs.inotify.max_user_watches=524288 # 每个用户可监控的最大文件/目录数(默认约8192)
fs.inotify.max_user_instances=128 # 每个用户可创建的最大inotify实例数
fs.inotify.max_queued_events=1024 # 单个实例可排队的最大事件数
运行sudo sysctl -p使配置生效。/etc而非/),避免监控临时文件或日志目录(可通过-e参数过滤无关事件,如-e modify,create)。inotifywait的-m(持续监控)和-r(递归监控)参数,结合脚本批量处理事件,减少系统调用次数。通过脚本实现自动修复或阻断操作,降低安全风险。例如:
/etc/sudoers文件:若检测到未经授权的修改,自动还原为备份版本并记录日志:if [[ "$file" == "/etc/sudoers" && "$event" == "modify" ]]; then
cp /etc/sudoers.bak /etc/sudoers # 还原备份
echo "$(date): /etc/sudoers was modified and restored by $(whoami)" >> /var/log/inotify_sudoers_restore.log
fi
/tmp目录:若检测到可疑可执行文件(如名称包含malware),自动删除并告警:if [[ "$file" == "/tmp/*" && "$event" == "create" && "$file" == *"malware"* ]]; then
rm -f "$file"
echo "$(date): Suspicious file $file deleted in /tmp by $(whoami)" | mail -s "Malware Detected in /tmp" admin@example.com
fi
自动化响应可减少人工干预延迟,提升安全防护效率。