用途:更改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 目录