使用chattr命令设置文件不可删除:一、+i属性彻底锁定文件,root也无法删除修改;二、+i锁定目录禁止所有写入元操作;三、+d属性仅禁用删除,允许读写重命名;四、chmod与chattr分层加固;五、+a属性实现日志文件仅追加防删防覆写。

如果您尝试保护关键文件免遭误删或恶意篡改,但仅靠chmod权限无法阻止root或进程覆盖删除,则可能是由于POSIX权限不作用于文件系统元数据层面。以下是设置文件不可删除的多种方法:
一、使用chattr +i属性彻底锁定文件
该方法通过ext系列文件系统原生扩展属性实现内核级防护,加锁后文件无法被删除、修改、重命名或硬链接指向,即使root用户执行rm、mv、echo >等操作也会返回“Operation not permitted”。
1、以root身份执行加锁命令:chattr +i /path/to/file
2、验证是否生效:lsattr /path/to/file,输出中应包含字符i(如----i---------e---)
3、若需临时维护,请先解锁:chattr -i /path/to/file,修改完成后再重新加锁
二、对目录应用chattr +i实现整体防删
目录加i属性后,其内部所有文件和子目录均受保护:禁止在该目录中新建、删除或重命名任何条目,无论子项自身是否带i属性,适用于锁定整个配置目录(如/etc/ssh)的关键入口点。
1、锁定目录本身:chattr +i /etc/ssh
2、注意:此操作不影响目录内文件的读取与执行,但会阻断所有写入类元操作
3、解除锁定前请确认无服务依赖动态创建文件(如sshd可能生成临时密钥),否则导致启动失败
三、使用chattr +d属性单独禁用删除功能
该属性专为防止文件被rm或unlink调用删除而设计,允许正常读写、修改内容及重命名,但删除操作将被内核拒绝,适合需保留编辑能力但严防丢失的场景。
1、为文件添加不可删除标记:chattr +d /var/log/audit.log
2、验证属性状态:lsattr /var/log/audit.log,输出中应含d字符
3、如需恢复删除能力,执行:chattr -d /var/log/audit.log
四、结合chmod与chattr分层加固
单一机制存在盲区,例如chmod 444仍允许root覆盖,而chattr +i在升级时易中断包管理流程;先规范基础权限再叠加不可变属性可兼顾兼容性与强度。
1、将文件属主设为root并移除其他用户写权限:chown root:root /etc/sudoers && chmod 440 /etc/sudoers
2、在此基础上启用不可变保护:chattr +i /etc/sudoers
3、系统更新后检查属性是否残留:rpm -V sudo(RHEL/CentOS)或dpkg --verify sudo(Debian/Ubuntu)
五、使用chattr +a实现日志类文件的防删防覆写
对于持续追加内容的日志文件,+a属性允许O_APPEND方式写入,禁止截断(truncate)、覆盖(>)、编辑(vim/sed -i)及删除,但父目录需保有写权限才可删除该文件本身。
1、启用仅追加模式:chattr +a /var/log/messages
2、测试写入有效性:运行logger "test entry",确认日志新增且无报错
3、尝试覆盖操作:echo "hack" > /var/log/messages,应返回“Operation not permitted”

















