假如你想对Linux中的一些重要文件做写保护,这样它们就不能被删除或者被篡改成之前的版本或者其他东西,或者在其他情况下,你可能想避免某些配置文件被软件自动修改。使用chown和chmod命令修改文件的归属关系或者权限位是处理这种情况的一个解决方法,但这并不完美,因为这样无法避免有root权限的操作。这时chattr就派上用场了。
chattr是一个可以设置或取消文件的标志位的Linux命令,它和标准的文件权限(读、写、执行)是分离的。与此相关的另一个命令是lsattr,它可以显示文件的哪些标志位被设置上了。最初只有EXT文件系统(EXT2/3/4)支持chattr和lsattr所管理的标志位,但现在很多其他的原生的Linux文件系统都支持了,比如XFS、Btrfs、ReiserFS等等。
在这个教程中,我会示范如果使用chattr来让Linux中的文件不可变更。
chattr和lsattr命令是e2fsprogs包的一部分,它在所有现代Linux发行版都预装了。
下面是chattr的基本语法。
- $chattr[-RVf][操作符][标志位]文件...
其中操作符可以是+(把选定的标志位添加到标志位列表)、-(从标志位列表中移除选定的标志位)、或者=(强制使用选定的标志位)。
下面是一些可用的标志位。
- a:只能以追加模式打开。
A:不能更新atime(文件访问时间)。
c:当被写入磁盘时被自动压缩。
C:关掉写时复制。
i:不可变更。
s:通过自动归零来安全删除。(LCTT译注:一般情况文件被删后内容不会被修改,改标志位会使得文件被删后原有内容被0取代)
不可变更标志位
为了让一个文件不可变更,你需要按照如下方法为这个文件添加不可变更标志位。例如,对/etc/passwd文件做写保护:
复制代码