Linux 下 chattr +i 锁不住子目录,多层文件怎么一次性全锁?
想用 chattr +i 把一个多层目录彻底锁死防止误改,结果发现只有点名的那个文件或目录本身被锁,下面的子文件照样能改。直接说结论:chattr +i 默认不带递归,只作用于你指定的那一个对象;要整棵目录树一起锁,加 -R。但有两个坑:锁定之后再新建的文件不会自动继承属性,解锁时也要用 -R 对称地解,否则解不干净。
和 chmod 是两个层面的事
先把概念分开:chmod 管的是"谁能读、写、执行"(rwx 权限位),root 一律通行;chattr 管的是不可变属性(i 位)——加了 +i 之后,连 root 都不能改内容、改名、删除,必须先解除属性。一个是门禁规则,一个是直接上锁,日常权限规划用 chmod,防误删防篡改的关键数据才上 chattr。
递归锁定四步
-
先看现状。
lsattr -R /path确认哪些文件带 i 位、哪些没带,心里有底。
-
整树加锁。
chattr -R +i /path-R 让命令沿着目录树一路下去,把现有的文件和子目录全部锁上。
-
验证。再跑一次 lsattr 确认目标范围内 i 位都点亮。锁目录本身还会带来一个连带效果:目录被锁后不能在里面新建或删除条目,多了一层保险。
-
需要改动时对称解锁。
chattr -R -i /path只对单个文件 -i 的话,其他文件还锁着,批量操作会莫名其妙地被拒。
两个坑
- 新建文件不继承。-R 只管执行那一刻已存在的文件;锁定之后有人往目录里放新文件(目录本身没锁死时),新文件是不带属性的。要长期维持"整树不可变",要么把目录本身也锁上(新建动作直接被挡),要么在流程上约定改动集中处理、锁完不再落新文件。
- 别拿它当权限管理用。业务目录的日常权限还是走 chmod 和属主规划,chattr 留给归档、快照、备份集这类"就该一动不动"的数据——备份归档场景的不可变保留此前备份法则篇用过这套命令,本文补的是它本身的边界。
相关提示
排障时遇到"权限明明够却改不动文件",除了想到 sudo,也要想到 lsattr 看一眼是不是属性在挡,能少走弯路。服务器上的归档与备份策略、存储选型(群晖 RS2423RP+ 机架式 · SA3610 可扩充企业存储)需要人帮着规划的,搜「诚鑫致达」找到我们。