lsattr命令用于显示文件属性,用 chattr可以改变文件或目录的属性。通过chattr命令修改属性能够提高系统安全性,但是它并不适合所有的目录。chattr命令不能保护/,/dev,/tmp,/var目录。
lsattr的用法
lsattr [ -RVadv ] [ files… ]
参数说明
-R 递归地列出目录及其内容的属性。 -V 显示版本信息 -a 列出目录中所有文件和目录,包括以".“为名称开头字符的额外内建,现行目录”.“与上层目录”…" -d 像列出其他文件一样列出目录,而不是列出它们的内容。 -v 显示文件或目录版本。
chattr的用法
chattr [ -RVf ] [ -v version ] [ mode ] files…
参数说明
-R 递归处理,将指定目录下的所有文件及子目录一并处理 -V 详细描述chattr的输出并打印proqram版本。 -f 抑制大多数错误消息。 -v 设置文件活目录的版本。
mode参数说明
a:让文件或目录仅提供附加用途,只允许以追加方式读写文件 A:当文件被访问时,它的atime(访问时间)记录不会被修改。这为系统避免了一定数量的磁盘I/o。 c:将文件或目录压缩后存放。文件会被内核自动压缩到磁盘上。从这个文件读取未压缩的数据。对该文件的写入会在将日期存储到磁盘之前压缩它们。 C:属性设置为“C”的文件将不会copy-on-write(写时复制)。此属性仅在支持copy-on-write的文件系统上支持。 d:将目录排除在倾倒操作之外。 D:目录被修改时,这些修改被同步写入磁盘;这相当于应用于文件子集的“dirsync”挂载选项。 e:表示文件使用区段来映射磁盘上的块。不能使用chattr移除。 E:用来表示压缩文件有压缩错误。虽然可以用Isattr显示,但chttr不能设置或重置它。 h:表示文件以文件系统块大小为单位存储其块,而不是以扇区为单位,并表示该文件大于2TB。虽然可以通过Isattr显示,但chattr不能设置或重置 i:文件不能被修改:不能被删除或重命名,不能创建到该文件的链接,也不能向该文件写入数据。 I:文件或目录使用散列树对目录进行索引。不能使用chattr设置或重置它,但可以用lsattr显示。 j:如果文件系统是用data=ordered或data=writeback选项挂载的,那么带有“j”属性的文件在被写到文件本身之前,它的所有数据都被写到ext3或ext4日志中。当用“data-journal”选项挂载文件系统时,所有文件数据都已经被记录,这个属性没有作用。 N:表示该文件将数据内联存储在inode本身中。不能使用chattr来设置或重置,但可以通过lsattr来查看。 s:允许一个文件被安全地删除文件被删除时,它的块被归零并写回磁盘。 S:即时更新文件或目录。文件被修改时,这些修改将同步写入磁盘。 t:带有“t”属性的文件在与其他文件合并的文件末尾不会有部分块片段(对于那些支持tail-merging的文件系统)。这是 对于像LILO这样直接读取文件系统且不支持tail-merging的文件的应用程序来说是必需的。 T:目录将被视为目录层次结构的顶部。这是给块分配器的一个提示由ext3和ext4使用,该目录下的子目录是不相关的,因此为了分配目的应该分散开来。 u:预防意外删除。若文件删除,系统会允许你在以后恢复这个被删除的文件 X:可以直接访问压缩文件的原始内容。不可以使用chattr重置或设置,可以使用lsattr显示。
一些限制说明
ext2,ext3和ext4文件系统不支持’c’,'s’和’u’属性
在当前的主线Linux内核中实现。设置’a’和’i’属性将不会影响写入现有文件描述符的能力。
"j"选项仅对ext3和ext4文件系统有用。
"D"选项仅在Linux内核2.5.19及更高版本上有用。
接下来看下实际使用场景
我们首先使用lsattr查看文件属性
lsattr /etc/resolv.conf ---------------- /etc/resolv.conf
接着我们使用chattr命令修改属性,防止/etc/resolv.conf文件被修改
chattr +i /etc/resolv.conf lsattr /etc/resolv.conf ----i----------- /etc/resolv.conf
然后再使用mv和rm和其他命令发现操作均会返回“Operation not permitted”
如果要取消限制使用-i命令
chattr -i /etc/resolv.conf
如果只运行网文件里面追加内容,不能删除,可以使用+a参数
chattr +a /etc/resolv.conf lsattr /etc/resolv.conf -----a---------- /etc/resolv.conf
我们再分别使用rm和echo命令进行测试
发现可以进行追加,但是依然不能删除,如果要取消设置的属性使用-a参数即可
chattr -a /etc/resolv.conf lsattr /etc/resolv.conf ---------------- /etc/resolv.conf