Linux命令分析: chattr和lsattr

时间:2022-11-02 09:25:45

用途:更改Linux系统上的文件归属权限

用法:chattr   [-RVf]   [-v 版本]   模式   文件...

chattr和lsattr分别是用来更改和查看文件或目录的属性的,与chmod相比,chmod仅仅更改文件的读写和执行权限,而chattr可以更改更多底层的权限,lsattr相对简单,仅显示这些属性

通常用chattr更改文件属性以提高安全性,甚至可以设置连root用户都不能修改,不过chattr对一些系统关键目录如/  /dev  /tmp  /var等的修改有限制

chattr命令的一些功能,需要相应linux内核版本的支持,通常要使用chattr命令,推荐使用2.6以上内核


参数:

-R   递归地处理目录及其下内容的属性

-V   详细显示修改内容并打印输出

-f    忽略大部分错误信息

-v   指定文件的版本


+   为文件添加属性

-   为文件删减某个属性

=   修改某个原有属性


A   no atime update   文件atime不会被修改,这样避免每次读取文件都改变atime,要写入inode,带来大量IO

a   append only   系统只允许对文件追加内容,而不允许对已有内容进行任何修改,如果目录具有该属性,则该目录下只能新建和修改文件,而不能删除文件,这个属性通常被应用于日志目录,只有superuser和具有CAP_LINUX_IMMUTABLE功能的进程能设置或清除该属性

c   compressd   该属性的文件将被内核压缩后在存在磁盘上,同样的,读取前也要经过解压缩

D   synchronous directory updates   该属性只对目录有效,任何修改会同步写入磁盘,相当于mount -o dirsync

d   no dump   dump程序备份文件时将忽略该属性的文件

E   在部分实验性的压缩工具里会用该属性表明压缩文件错误,只能用lsattr(1)显示,无法被chattr(1)修改

e   extent format   该属性表示文件是用extents映射物理磁盘块(extent是EXT4文件系统引入的特性,用于指示一段连续的文件块的起始块和数量)

h   该属性说明文件是以文件系统的block为单位而不是以磁盘的sector来存储,这意味着该文件大于2TB,为内在属性不可修改

i   immutable   该文件不允许进行任何修改,若是目录文件有该属性,则只能修改该目录下的已有文件,而无法创建和删除文件,该属性对文件系统安全有重要作用,是最常用的属性,只有superuser和具有CAP_LINUX_IMMUTABLE功能的进程能设置或清除该属性

j   data journalling   当文件系统挂载在data=ordered或data=writeback模式下时,文件在执行写操作之前要先写入到文件系统日志(journal)中,如果是挂载在data=journal模式下则该参数自动失效,只有superuser和具有CAP_SYS_RESOURCE功能的进程能设置或清除该属性

s   secure deletion   保密删除,该文件所在的block被写0填充,然后收回block

S   synchronous updates   该属性只对文件有效,任何修改会同步写入磁盘,相当于mount -o dirsync

T   top of directory hierarchy   作用于某个目录树的顶层,用于将其下的子目录放在硬盘上的不同block group,否则系统默认会把同一目录下的文件和目录尽量放在一起

t   对于支持tail-merging的文件系统,有该属性的文件不会做fragment拼接,这对于一些不支持tail-merging的程序如LILO是必要的

u   具有该属性的文件,在被删除后依然在磁盘上保留文件内容,其磁盘块不会被擦写,允许用户恢复删除

注:c   s   u   这三个参数不支持ext2和ext3文件系统;   j   这个参数仅在ext3文件系统下有效;   D   这个参数需2.5.19以后的内核支持


典型用法:

1.防止关键文件被修改

chattr   +i   文件


2.让某些文件只能往里添加数据而不能修改已有数据,比如日志文件

chattr   +a   文件


3.确保某些关键目录下的文件删除后可恢复

chattr   -R   +u   目录