linux文件特殊属性lsattr/chattr命令详解

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

微信截图_20240607174724.png

然后再使用mv和rm和其他命令发现操作均会返回“Operation not permitted”

微信截图_20240607175019.png

如果要取消限制使用-i命令

chattr -i /etc/resolv.conf

如果只运行网文件里面追加内容,不能删除,可以使用+a参数

chattr +a /etc/resolv.conf
lsattr /etc/resolv.conf
-----a---------- /etc/resolv.conf

我们再分别使用rm和echo命令进行测试

微信截图_20240607175352.png

发现可以进行追加,但是依然不能删除,如果要取消设置的属性使用-a参数即可

chattr -a /etc/resolv.conf
lsattr /etc/resolv.conf
---------------- /etc/resolv.conf



内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/350.html