文件的隐藏属性: Isattr、chattr
这两个命令用来改变文件、目录的隐藏属性,与 chmod、ls 这些命令相比,chmod 只是
改变文件的读写、执行权限,更底层的属性控制是由 chattr命令来改变的。
Linux 中的 ext3 /ext4/xfs 文件系统都支持隐藏属性。
1. Isattr 命令
语法:
1sattr [选项][文件名]
功能:lsattr 比较简单,只是显示文件的属性。1sattr 命令选项及其功能见表 1。
表 1 Isattr 命令的各个选项及其功能
选项 功能
-a 列出目录中的所有文件,包括以.开头的文件
-d 以和文件相同的方式列出目录,并显示其包含的内容
-R 以递归的方式列出目录的属性及其内容
2.chattr 命令
语法:
chattr[ -RV][-v version ][ mode ] files...
功能:chattr 命令的作用很大,其中一些功能是由 Linux 内核版本来支持的,如果Linux 内核版本低于 2.2,那么许多功能不能实现。同样-D 检查压缩文件中的错误的功能,需要 2.5.19 以上内核才能支持。另外,通过 chattr 命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr 命令不能保护/、/dev、/tmp、/var 目录。
-R 选项用于递归地对目录和其子目录进行操作。
最关键的是在[mode]部分,[mode]部分是由+-=和[ASacdijstu]这些字符组合的,这部分是用来控制文件的属性。chattr 命令选项及其功能见表2。
表 2 chattr 命令的各选项及其功能
选项 功能
+ 在原有参数设定基础上追加参数
- 在原有参数设定基础上移除参数
= 更新为指定参数
A 文件或目录的 atime (acces time)不可被修改, (modified),告诉系统不要修改对这个文件的最后 访问时间
S 硬盘 I/O同步选项,功能类似 sync。一旦应用程序 对这个文件执行了写操作,使系统立刻把修改的结 果写到磁盘上
a 即 Append Only。系统只允许在这个文件之后追 加数据,不允许任何进程覆盖或者截断这个文件。 如果目录具有这个属性,系统将只允许在这个目录 下建立和修改文件,而不允许删除任何文件,只有 root 才能设定这个属性
c 即 Compress。系统以透明的方式压缩这个文件。 从这个文件读取时,返回的是解压之后的数据;而向 这个文件中写人数据时,数据首先被压缩之后才写人 磁盘
d 即 No dump。在进行文件系统备份时,dump 程序 将忽略这个文件
i 即 Immutable。系统不允许对这个文件进行任何的 修改。如果目录具有这个属性,那么任何的进程只能 修改目录下的文件,不允许建立和删除文件。i参数 对于文件系统的安全设置有很大帮助
j 即 journal,设定此参数,使得当通过 mount 命令的 参数 data= ordered 或者 data=writeback 挂载 文件系统时,文件在写人时会先被记录(在 journal 中)。如果 filesystem被设定参数为 data=journal, 则该参数自动失效
s 即 Secure Delete。让系统在删除这个文件时,使 用 0 填充文件所在的区域
u 即 Undelete。当一个应用程序请求删除这个文件 时,系统会保留其数据块以便以后能够恢复删除的 这个文件
各参数选项中常用到的是 a和 i。 a 选项强制只可添加而不可删除,多用于日志系统的安全设定。而 i是更为严格的安全设定,只有 superuser(root)或具有 CAP_LINUX_IMMUTABLE 处理能力(标识)的进程能够施加该选项。
示例如下:
#chattr +i /etc/fstab
//用 chattr 命令防止系统中某个关键文件被修改,然后试一下用 rm.mv.rename 等命令操作该文件都是得到Operation not permitted 的结果
#chattr +a /datal/user_act,log
//让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作
#chattr +si test.txt
//给 test.txt 文件添加同步和不可变属性
#chattr -ai test.txt
//把文件的只扩展(append-only)属性和不可变属性去掉
#chattr =aiA test.txt
//使 test.txt 文件只有 a、i 和 A 属性
//主机直接暴露在 Internet 或者位于其他危险的环境,有很多 She1l 账户或者提供 HTTP和 FTP等网络服务,一般应该在安装配置完成后使用如下命令:
#chattr -R+i /bin /boot /etc /lib /sbin
#chattr -R+i /usr/bin /usr/include /usr/lib’/usr/sbin
#chattr +a /var/log/messages /var/log/secure
注意:如果很少对账户进行添加、变更或者删除等操作,把/home 本身设置为immutable 属性也不会造成什么问题。在很多情况下,整个/usr 目录树也应该具有不可改变属性。实际上,除了对/usr 目录使用 chattr -R +i /usr/命令外,还可以在/etc/fstab文件中使用 ro 选项,使/usr 目录所在的分区以只读的方式加载。另外,把系统日志文件设置为只能添加属性(append-only),将使入侵者无法擦除自己的踪迹。