Linux文件系统只读挂载但文件仍被修改_深层原因分析_排查
很多Linux服务器管理员遇到过这样的困惑:明明已经把文件设置为只读权限(chmod 444或chattr +i),但文件还是被修改了,甚至被植入了木马。这时候第一反应是权限设置没生效,但实际上Linux系统中能绕过只读限制的方式有很多种。本文从原理到实操,全面分析只读文件仍被修改的各种原因,并给出对应的解决办法。
第二种原因是chattr +i属性被解除。chattr命令设置的不可修改属性(immutable)确实可以防止文件被修改、删除、重命名,但这个属性只有root可以设置和解除。如果攻击者获得了root权限,执行chattr -i就能解除属性,然后修改文件。更隐蔽的方式是攻击者不解除属性,而是直接替换文件:删除原文件(需要先解除i属性)或者创建一个同名文件替换。解决方法是除了chattr +i,还需要监控chattr命令的执行,使用auditd记录文件属性变更。
排查只读文件被修改的第一步是确认修改方式。使用stat命令查看文件的修改时间(mtime)、属性改变时间(ctime)、访问时间(atime)。如果ctime发生了变化,说明文件的权限或属性被修改过,可能是chmod或chattr操作。使用lsattr查看文件的扩展属性,确认i属性是否还在。使用auditctl配置文件审计规则,记录对该文件的所有操作,包括打开、修改、属性变更,这样下次被修改时就能知道是哪个进程、哪个用户做的。
第三,文件系统防护:对于关键文件使用chattr +i设置不可修改属性,同时使用auditd监控chattr命令的执行。将网站程序文件放在只读分区,数据和上传文件放在可写分区,通过符号链接关联。使用SELinux或AppArmor强制访问控制,限制Web进程只能访问特定目录和文件,即使被入侵也无法越权操作。SELinux的配置虽然复杂,但防护效果显著,推荐有条件的服务器启用。
站长反馈:网站文件设置了444只读权限,但首页还是被篡改了,检查后发现php-fpm运行在root用户下,root可以修改任何文件。将php-fpm改为www-data用户运行,同时调整目录权限后,类似问题再也没有发生过。root运行Web服务是非常危险的配置,很多安全事故都源于此。
配置提醒:设置文件只读权限后,记得重启Web服务和相关进程,确保进程重新打开文件时权限检查生效。同时测试网站功能是否正常,特别是需要写入文件的功能(如上传、缓存、日志),避免因为权限设置导致网站功能异常。

更新时间:2026-08-27 09:45:16