5 个 'chattr' 命令使 Linux 中的重要文件变为不可变(不可更改)
chattr(更改属性)是一个命令行 Linux 实用程序,用于设置/取消设置 Linux 系统中文件的某些属性,以确保意外删除或修改重要文件和文件夹,即使您以 root 用户身份登录。
在 Linux 原生文件系统(即 ext2、ext3、ext4、btrfs 等)中,所有标志均支持,但并非所有非原生文件系统都支持所有标志。一旦使用 chattr 命令设置了属性,即使对文件/文件夹拥有完全权限,也无法删除或修改它。
这对于设置包含用户信息的系统文件(如 passwd 和 shadow 文件)的属性非常有用。
chattr 的语法
# chattr [operator] [flags] [filename]
属性和标志
以下是可以使用 chattr 命令设置/取消设置的常见属性和相关标志的列表。
- 如果使用 ' A ' 属性集来访问文件,则不会更新其 atime 记录。
- 如果使用' S '属性集修改了文件,则更改将在磁盘上同步更新。
- 文件设置了‘ a ’属性,只能以追加模式打开并进行写入。
- 文件被设置为“ i ”属性,无法修改(不可变)。意味着无法重命名、无法创建符号链接、无法执行、无法写入,只有超级用户可以取消设置该属性。
- 设置了“ j ”属性的文件,其所有信息在更新到文件本身之前先更新到 ext3 日志。
- 文件设置了‘ t ’属性,无尾部合并。
- 带有属性‘ d ’的文件在运行转储过程时将不再作为备份候选。
- 当一个文件被删除时,其数据会被保存。这样用户就可以请求恢复删除。
操作员
- +:将属性添加到文件的现有属性中。
- –:删除文件现有属性的属性。
- =:保留文件现有的属性。
在这里,我们将演示一些 chattr 命令示例来设置/取消设置文件和文件夹的属性。
1. 如何添加文件属性以防止删除
为了演示目的,我们分别使用了文件夹demo和文件important_file.conf。在设置属性之前,请务必使用“ ls -l ”命令验证现有文件是否设置了任何属性。您是否看到了结果,目前没有设置任何属性。
[root@example example]# ls -l total 0 drwxr-xr-x. 2 root root 6 Aug 31 18:02 demo -rwxrwxrwx. 1 root root 0 Aug 31 17:42 important_file.conf
要设置属性,我们使用chattr 命令中的+号,要取消设置,请使用-号。因此,让我们使用+i标志在文件上设置不可变位,以防止任何人删除文件,即使 root 用户也没有权限删除它。
[root@example example]# chattr +i demo/ [root@example example]# chattr +i important_file.conf
注意:不可变位+i只能由超级用户(即 root)用户或具有 sudo 权限的用户设置。
设置不可变位后,让我们使用命令“ lsattr ”来验证属性。
[root@example example]# lsattr ----i----------- ./demo ----i----------- ./important_file.conf
现在,尝试强制删除,重命名或更改权限,但不允许执行“操作不允许”。
[root@example example]# rm -rf demo/ rm: cannot remove âdemo/â: Operation not permitted
[root@example example]# mv demo/ demo_alter mv: cannot move âdemo/â to âdemo_alterâ: Operation not permitted
[root@example example]# chmod 755 important_file.conf chmod: changing permissions of âimportant_file.confâ: Operation not permitted
2. 如何取消设置文件的属性
在上面的例子中,我们看到了如何设置属性来确保文件的安全并防止文件被意外删除,在此例子中,我们将看到如何重置(取消设置属性)权限并允许使用-i标志使文件可更改或改变。
[root@example example]# chattr -i demo/ important_file.conf
重置权限后,使用“ lsattr ”命令验证文件的不可变状态。
[root@example example]# lsattr ---------------- ./demo ---------------- ./important_file.conf
您可以在上面的结果中看到' -i '标志已被删除,这意味着您可以安全地删除示例文件夹中的所有文件和文件夹。
[root@example example]# rm -rf * [root@example example]# ls -l total 0
3. 如何保护 /etc/passwd 和 /etc/shadow 文件
在文件/etc/passwd或/etc/shadow上设置不可变属性,使它们免遭意外删除或篡改,同时也将禁用用户帐户创建。
[root@example example]# chattr +i /etc/passwd [root@example example]# chattr +i /etc/shadow
现在尝试创建一个新的系统用户,您将收到错误消息“无法打开 /etc/passwd ”。
[root@example example]# useradd example useradd: cannot open /etc/passwd
这样,您就可以对重要文件或系统配置文件设置不可变的权限,以防止被删除。
4. 附加数据而不修改文件上的现有数据
假设您只想允许每个人在文件上附加数据而不更改或修改已经输入的数据,您可以按如下方式使用' a '属性。
[root@example example]# chattr +a example.txt [root@example example]# lsattr example.txt -----a---------- example.txt
设置附加模式后,文件只能以附加模式打开并写入数据。您可以按如下方式取消设置附加属性。
[root@example example]# chattr -a example.txt
现在尝试替换文件example.txt上已经存在的内容,您将收到错误消息“操作不允许”。
[root@example example]# echo "replace contain on file." > example.txt -bash: example.txt: Operation not permitted
现在尝试在现有文件example.txt上附加新内容并验证它。
[root@example example]# echo "replace contain on file." >> example.txt
[root@example example]# cat example.txt Here is the example to test 'a' attribute mean append only. replace contain on file.
5. 如何保护目录
为了保护整个目录及其文件的安全,我们使用带有‘ +i ’标志的‘ -R ’(递归)开关以及文件夹的完整路径。
[root@example example]# chattr -R +i myfolder
设置递归属性后,尝试删除该文件夹及其文件。
[root@example example]# rm -rf myfolder/ rm: cannot remove 'myfolder/': Operation not permitted
要取消设置权限,我们使用相同的“-R”(递归)开关和“-i”标志以及文件夹的完整路径。
[root@example example]# chattr -R -i myfolder
就是这样!要了解有关 chattr 命令属性、标志和选项的更多信息,请使用手册页。