如何使用inotifywait监控/etc/shadow文件 为何modify/close_write不生效
问题根因与解决方案
1. 原脚本不触发循环的原因
监听的modify、close_write事件与RHEL 8系统修改/etc/shadow的逻辑不匹配:
- RHEL 8中所有通过官方工具(
passwd/usermod/useradd等)修改/etc/shadow的操作,均采用临时文件原子替换的安全策略,不会直接向原有/etc/shadow文件写入内容,因此不会触发modify(文件内容修改)、close_write(写模式打开后关闭)事件 inotifywait默认仅监听单次匹配事件,若未补充-m持续监听参数,在无匹配事件触发的场景下会直接退出。
2. 需要监听attrib事件的原因
原子替换/etc/shadow文件后,系统会执行权限、属主修正操作,将新替换的文件属性调整为/etc/shadow要求的安全配置(通常为000/400权限,属主属组均为root),这个修改文件元数据的操作会触发attrib事件,是整个修改流程中唯一会在/etc/shadow路径上稳定触发的事件。
修正后的可用脚本
while inotifywait -e attrib /etc/shadow do echo "it works" done
如果需要更全面覆盖所有可能的修改场景,也可以添加move_self(文件自身被移动替换)事件,避免极端场景下的遗漏:
while inotifywait -e attrib,move_self /etc/shadow do echo "it works" done
内容的提问来源于stack exchange,提问作者itanitarek10
相关产品推荐
相关产品推荐

