玩Linux的时候,有些文件使用root权限都不能修改和删除,这是什么原因呢?大多是因为曾经使用过chattr命令锁定过该文件。chattr命令能够修改文件高级属性,这可以提高系统的安全性哦!


知识储备


  • ls -l显示的文件属性只能包含读、写、执行这类基本属性

  • chmod能够定义3类用户:属主、属组、其他用户的各自3种权限:读、写、执行

  • chattr能够修改文件的高级属性,包括IO同步、删除保护、写入保护等等

  • lsattr用来查看文件的高级属性的


chattr用法


Usage:chattr [-RVf] [-v version] [mode] files...

Mode:+-= [acdeijstuADST].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26


+ :在原属性基础上,添加属性。
- :在原属性基础上,移除属性。
= :将文件的高级属性指定为,这个操作会覆盖原有任何高级属性

属性选项:
A:文件的 atime时间戳 可被修改(modified)。--->一般web服务器上,文件的atime都是关闭的,避免频繁修改占用IO资源

S:硬盘I/O同步选项,功能类似sync。

a:即append,设定该参数后,只能添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。

c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。

d:即no dump,设定文件不能成为dump程序的备份目标。

i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。

j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。

s:保密性地删除文件或目录,即硬盘空间被全部收回。

u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。

各参数选项中常用到的是a和i:
<1> a选项强制只可添加不可删除,多用于日志系统的安全设定。
<
2> 而i是更为严格的安全设定,只有superuser (root) 或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。


实例1:参数i对系统关键文件/etc/fstab做保护防止篡改、删除等!

#chattr +i /etc/fstab

wKioL1YI3RCCRXV7AAaBOO91OoY235.bmp


实例2:参数a对日志追踪类文件做安全策略!日志只可追加数据,不可修改,不可以删除!

wKiom1YI4SCDXK45AAtLeBdNE48939.bmp

  • >>追加没问题,>覆盖提示权限拒绝,此处我是root用户哦!

  • rm -f强制删除被拒绝!不可删除

  • split切割没问题,本质上切割并不会对原文件开刀,所以不会影响的!


实例3:通过lsattr查看文件or目录的高级属性

#lsattr [-RVadlv] [files...]

wKioL1YI36yjnE09AAPfmOZNVQ8743.bmp


最后一点总结:


  • chattr所修改的文件高级属性,对目录同样适用,但是这些高级属性受到Kernel版本支持!

  • 可以使用chattr +i选项锁定那些系统的、不更改的文件,很有效哦!

  • 对于目录/ /dev /proc /tmp /var等不能够保护!