chattr与lsattr命令

Catalogue

有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。
通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。

这两个命令是用来查看和改变文件、目录属性的,与chmod这个命令相比,chmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr来改变的。

chattr
修改文件在Linux第二扩展文件系统(E2fs)上的特有属性
chattr [ -RVf ] [ -v version ] [ mode ] files…
[ mode ]部分是由+-=和[ ASacDdIijsTtu ]这些字符组合的,这部分是用来控制文件的
属性。

-R 递归地修改目录以及其下内容的属性. 如果在递归目录时遇到了符号链接,遍历将跳过
-V 详尽地给出chattr的输出信息并打印出程序的版本
-vversion 设置文件系统的版本

操作符+用来在文件已有属性的基础上增加选定的属性; -用来去掉文件上的选定的属性;而=用来指定该文件的唯一属性

字符`ASacdisu’用作文件新属性的选项: 不更新atime(A),同步更新(S),只能添加(a), 压缩(c),不可变(i),不可转移(d),删除保护(s)以及不可删除(u)

1
2
3
$ chattr -i resolv.conf

$ chattr +a /var/log/messages #让某个文件只能往里面追加数据,但不能删,适合日志文件
1
2
3
4
5
6
7
8
当修改设置了'A'属性的文件时,它的atime记录不会改变. 这可以在笔记本电脑系统中避免某些磁盘I/O处理.
设置了`a'属性的文件只能在添加模式下打开用于写入. 只有超级用户可以设置或清除该属性.
设置了`c'属性的文件在磁盘上由内核自动进行压缩处理. 从该文件读取时返回的是未压缩的数据. 对该文件的一次写入会在保存它们到磁盘之前进行数据压缩.
设置了`d'属性的文件不能对其运行 dump(8) 程序进行备份.
设置了`i'属性的文件不能进行修改:你既不能删除它, 也不能给它重新命名,你不能对该文件创建链接, 而且也不能对该文件写入任何数据. 只有超级用户可以设置或清除该属性.
当删除设置了`s'属性的文件时,将对其数据块清零 并写回到磁盘上.
当修改设置了`S'属性的文件时, 修改会同步写入到磁盘上;这与应用 到文件子系统上的`sync'挂载选项有相同的效果.
当删除设置了`u'属性的文件时, 将会保存其内容. 这使得用户可以请求恢复被删除的文件.

lsattr
-R 递归地列出目录以及其下内容的属性
-V 显示程序版本
-a 列出目录中的所有文件,包括以`.’开头的文件的属性
-d 以列出其它文件的方式那样列出目录的属性, 而不列出其下的内容
-v 显示文件版本

1
2
$ lsattr /etc/resolv.conf
----i----------- /etc/resolv.conf