为了使linux系统具有更高的安全性,更好的支持各项功能,在Linux的文件管理中,支持对文件设置一些特殊的属性,例如为了防止黑客修改系统日志,破坏操作痕迹。可以设置让日志文件只能追加写入内容,而不能对文件中的内容进行修改或者删除。
chattr 可以添加文件或目录的这些特殊属性,参数具体如下:
lsattr 可以查看这些特殊属性
参数 作用
-i 禁止对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
-a 仅允许追加内容,禁止覆盖/删除内容(Append Only)
-S 文件内容在变更后立即同步到硬盘(sync)
-s 当删除文件时,彻底从硬盘中删除,文件将无法恢复(用0填充原文件所在硬盘区域)
-A 当对文件或目录进行修改的时候,不在修改文件或目录的最后访问时间(Atime)
-b 不再修改文件或者目录的的存取时间
-D 检查压缩文件中的错误()
-d 使用dump命令备份时忽略本文件/目录
-C 不进行“写时复制”(可以保证文件不因为“写时复制”,导致数据不一致问题)
-c 默认将文件或目录进行压缩
-u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
-T 让文件处于目录层次结构的顶部
-t 让文件系统支持尾部合并(tail-merging)
-x 可以直接访问压缩文件中的内容,通常和 -c 会一起使用
让我们来做以下两个案例:
给文件添加只可追加属性(-a)
afei@ubuntu:~/myWorkSpace$ touch log.text
afei@ubuntu:~/myWorkSpace$ ls
log.text
afei@ubuntu:~/myWorkSpace$ rm -f log.text
afei@ubuntu:~/myWorkSpace$
afei@ubuntu:~/myWorkSpace$ ls
成功删除刚创建的文件
afei@ubuntu:~/myWorkSpace$
afei@ubuntu:~/myWorkSpace$ touch log.text
afei@ubuntu:~/myWorkSpace$
afei@ubuntu:~/myWorkSpace$ sudo chattr +a log.text
[sudo] password for afei:
对刚创建的文件添加了不可删除,同时只能追加写入的属性
afei@ubuntu:~/myWorkSpace$
afei@ubuntu:~/myWorkSpace$ ls -l
total 0
-rw-rw-r-- 1 afei afei 0 Oct 16 05:42 log.text
afei@ubuntu:~/myWorkSpace$
afei@ubuntu:~/myWorkSpace$ echo "test string" > log.text
bash: log.text: Operation not permitted
虽然当前用户对文件具有写权限,但我们尝试对文件中的内容进行覆盖写的时候,操作被拒绝了
afei@ubuntu:~/myWorkSpace$
afei@ubuntu:~/myWorkSpace$ echo "test string" >> log.text
对文件执行追加写命令时,操作执行成功
afei@ubuntu:~/myWorkSpace$
afei@ubuntu:~/myWorkSpace$ cat log.text
test string
afei@ubuntu:~/myWorkSpace$
给文件和目录添加不可修改属性(-i):
afei@ubuntu:~/myWorkSpace$ mkdir testchattr
afei@ubuntu:~/myWorkSpace$ cd testchattr/
afei@ubuntu:~/myWorkSpace/testchattr$ touch test.text
在文件夹中创建一个新文件
afei@ubuntu:~/myWorkSpace/testchattr$ cd ..
afei@ubuntu:~/myWorkSpace$
afei@ubuntu:~/myWorkSpace$ sudo chattr +i testchattr/
给文件夹增加禁止修改属性
afei@ubuntu:~/myWorkSpace$
afei@ubuntu:~/myWorkSpace$ cd testchattr/
afei@ubuntu:~/myWorkSpace/testchattr$
afei@ubuntu:~/myWorkSpace/testchattr$ touch test2.text
touch: setting times of 'test2.text': No such file or directory
再次尝试创建新文件失败
afei@ubuntu:~/myWorkSpace/testchattr$
afei@ubuntu:~/myWorkSpace/testchattr$ echo "Test string" >> test.text
修改原来已经创建的文件成功
afei@ubuntu:~/myWorkSpace/testchattr$