目录
12. shell命令--chattr
功能说明
chattr 命令来自英文词组 change attribute 的缩写,其功能是更改文件隐藏属性。常用的 ls 命令仅能查看文件的一般权限、特殊权限、SELinux 安全上下文与是否有 FACL(文件访问控制列表)等情况,但却无法查看到文件隐藏属性,所以有些运维人员甚至不清楚竟然还有第五种文件权限!
chattr 是一个在 Linux 系统中用于改变文件属性的命令。它允许用户改变文件系统上的文件或目录的“扩展”属性。这些扩展属性提供了一些额外的功能,比如防止文件被删除、防止内容被修改、防止文件被移动或重命名等。这些功能是通过 Linux 文件系统(特别是 ext2、ext3 和 ext4)的扩展属性系统实现的。
这项指令可改变存放在 ext2 文件系统上的文件或目录属性,这些属性共有以下 8 种模式:
- a:让文件或目录仅供附加用途。
- b:不更新文件或目录的最后存取时间。
- c:将文件或目录压缩后存放。
- d:将文件或目录排除在倾倒操作之外。
- i:不得任意更动文件或目录。
- s:保密性删除文件或目录。
- S:即时更新文件或目录。
- u:预防意外删除。
语法格式
chattr [选项] <模式> <文件或目录>
SYNOPSIS
chattr [ -RVf ] [ -v version ] [ mode ] files...
选项说明
常用参数:
- -R:递归地改变指定目录及其下所有文件和子目录的属性。
- -v:显示详细的处理信息。
- -V:显示执行过程详细信息。
- -c:在处理时,不显示错误信息。
- +:开启文件或目录的该项属性。
- -:关闭文件或目录的该项属性。
- =:指定文件或目录的该项属性。
常用权限:
- i:无法对文件进行任何修改,只有超级用户(root)才能设置或清除这个属性。
- D:检查压缩文件中的错误
- a:仅允许补充内容,无法覆盖/删除内容,如果文件设置了 a 属性,那么它通常用于记录日志。
- d:使用dump命令备份时忽略本文件/目录
- S:文件内容在变更后立即同步到硬盘
- c:默认将文件或目录进行压缩
- s:彻底从硬盘中删除,不可恢复
- u:当删除某文件后依然保留其在硬盘中的数据
- A:不再修改这个文件或目录的最后访问时间
- b:不再修改文件或目录的存取时间
- t:让文件系统支持尾部合并
- x:可以直接访问压缩文件中的内容
- e:文件只能被删除,不能被修改或重命名。
实践操作
1. 用 chattr 命令防止系统中某个关键文件被修改
mkdir -p /test/chattr #创建测试目录
cd /test/chattr #切换到测试目录
echo 'Linux' >file.txt #创建测试文件
ls
cat file.txt
lsattr file.txt #命令 lsattr 显示文件属性
chattr +i file.txt #设置 i 属性
lsattr file.txt
rm -f file.txt #看看是否能删除
echo 'Hello' >>file.txt #追加点内容,发现权限拒绝
cat file.txt
chattr -i file.txt #取消 i 属性
lsattr file.txt
echo 'Hello' >>file.txt #这次就可以追加内容了
cat file.txt
2. 让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件
ls
lsattr file.txt
chattr +a file.txt #设置权限 a
lsattr file.txt
rm -f file.txt #测试是否能够删除
cat file.txt
echo 'Hi,test!' >>file.txt #测试是否能追加内容
cat file.txt
echo 'Hi,test' >file.txt #试试能否覆盖内容,测试是不行的,只能追加内容
chattr -a file.txt #取消权限 a
lsattr file.txt
命令示例:1. 用 chattr 命令防止系统中某个关键文件被修改
mkdir -p /test/chattr
cd /test/chattr
echo 'Linux' >file.txt
ls
cat file.txt
lsattr file.txt
chattr +i file.txt
lsattr file.txt
rm -f file.txt
echo 'Hello' >>file.txt
cat file.txt
chattr -i file.txt
lsattr file.txt
echo 'Hello' >>file.txt
cat file.txt
输出结果:
[root@MineGi ~]# mkdir -p /test/chattr
[root@MineGi ~]# cd /test/chattr
[root@MineGi /test/chattr]# echo 'Linux' >file.txt
[root@MineGi /test/chattr]# ls
file.txt
[root@MineGi /test/chattr]# cat file.txt
Linux
[root@MineGi /test/chattr]# lsattr file.txt
---------------- file.txt
[root@MineGi /test/chattr]# chattr +i file.txt
[root@MineGi /test/chattr]# lsattr file.txt
----i----------- file.txt
[root@MineGi /test/chattr]# rm -f file.txt
rm: 无法删除"file.txt": 不允许的操作
[root@MineGi /test/chattr]# echo 'Hello' >>file.txt
-bash: file.txt: 权限不够
[root@MineGi /test/chattr]# cat file.txt
Linux
[root@MineGi /test/chattr]# chattr -i file.txt
[root@MineGi /test/chattr]# lsattr file.txt
---------------- file.txt
[root@MineGi /test/chattr]# echo 'Hello' >>file.txt
[root@MineGi /test/chattr]# cat file.txt
Linux
Hello
[root@MineGi /test/chattr]#
命令示例:2. 让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件
ls
lsattr file.txt
chattr +a file.txt
lsattr file.txt
rm -f file.txt
cat file.txt
echo 'Hi,test!' >>file.txt
cat file.txt
echo 'Hi,test' >file.txt
chattr -a file.txt
lsattr file.txt
输出结果:
[root@MineGi /test/chattr]# ls
file.txt
[root@MineGi /test/chattr]# lsattr file.txt
---------------- file.txt
[root@MineGi /test/chattr]# chattr +a file.txt
[root@MineGi /test/chattr]# lsattr file.txt
-----a---------- file.txt
[root@MineGi /test/chattr]# rm -f file.txt
rm: 无法删除"file.txt": 不允许的操作
[root@MineGi /test/chattr]# cat file.txt
Linux
Hello
[root@MineGi /test/chattr]# echo 'Hi,test!' >>file.txt
[root@MineGi /test/chattr]# cat file.txt
Linux
Hello
Hi,test!
[root@MineGi /test/chattr]# echo 'Hi,test' >file.txt
-bash: file.txt: 不允许的操作
[root@MineGi /test/chattr]# chattr -a file.txt
[root@MineGi /test/chattr]# lsattr file.txt
---------------- file.txt
[root@MineGi /test/chattr]#
注意事项
- 使用 chattr 命令需要谨慎,特别是当你设置文件为不可修改或不可删除时。一旦设置,即使作为 root 用户也可能难以恢复文件的正常状态。
- 不是所有的文件系统都支持 chattr 命令。它主要在 ext2、ext3 和 ext4 文件系统上工作。
在使用 chattr 命令之前,最好先了解其工作原理和潜在的风险,并在非生产环境中进行测试。
然而,尽管chattr命令提供了强大的功能,但使用时也需要谨慎。不恰当的使用可能导致文件或目录变得无法访问或修改,甚至可能导致系统不稳定。因此,在使用chattr命令之前,建议用户先了解其工作原理和可能的副作用。
chattr 命令的使用场景多种多样,从保护系统文件不被误删除或修改,到记录日志文件的追加操作,都可以使用 chattr 命令来实现。然而,在使用 chattr 命令时,用户需要注意,不是所有的文件系统都支持这个命令。尽管它在 ext2、ext3 和 ext4 等主流 Linux 文件系统上工作得很好,但在某些其他类型的文件系统上可能无法使用。
此外,chattr 命令的某些选项和模式可能具有破坏性,如果不正确使用,可能会导致数据丢失或系统崩溃。因此,在使用这些选项和模式时,用户需要格外小心,并确保完全理解它们的作用。
总的来说,chattr命令是Linux系统中一个强大的工具,可以帮助用户更好地管理和保护文件和目录。然而,由于其潜在的风险和复杂性,用户在使用时需要谨慎行事,并遵循最佳实践。在使用chattr命令之前,最好先备份重要数据,并在非生产环境中进行测试,以确保不会对系统造成任何损害。
最后,值得注意的是,尽管 chattr 命令提供了强大的文件保护功能,但它并不能替代其他安全措施,如文件系统备份、访问控制列表(ACL)等。因此,在保护文件和目录时,用户应该采取多种安全措施,以确保数据的安全性和完整性。