在Linux系统中,root用户拥有最高权限,能够修改删除所有文件或者目录。既然root用户能删除目录或者文件,接下来我们就来看一下如何做到让所有用户(包括root用户)不能够删除目录或者文件。这是如何做到的呢?能够让所有用户都不能删除目录或者文件,那么我们就来看看chattr这个命令的作用吧。这个命令能够改变文件的属性,能够让文件不能删除。既然如此强大,那么就来看看如何做到的吧。为了能够更好的看到效果,首先在Linux环境中准备了以下文件能够更好的学习如何操作。
[root@localhost sharplee]# ls -l
total 40
drwxr-xr-x. 2 root root 77 Mar 7 09:00 backdir
-rw-r--r--. 1 root root 15606 Feb 26 10:12 jetty.sh
-rw-r--r--. 1 root root 0 Mar 2 09:06 myfile1
-rw-r--r--. 1 root root 0 Dec 10 2022 myfile2
-rw-r--r--. 1 root root 0 Dec 10 2022 myfile3
-rw-r--r--. 1 root root 0 Mar 2 09:35 myfile4
-rw-r--r--. 1 root root 0 Dec 10 2022 myfile6
-rw-r--r--. 1 root root 8 Mar 3 08:21 test
-rw-r--r--. 1 root root 28 Mar 6 08:52 test1.sh
-rw-r--r--. 1 root root 29 Mar 6 08:53 test2.sh
-rw-r--r--. 1 root root 11 Mar 6 08:53 test3.sh
如何让文件不能删除
通过执行以下命令让jetty.sh文件不能被删除或者不能被修改,这个命令的作用就是文件不能被修改通过任何方式,不能被删除,也不能够对这个文件创建链接,并且也不能重写该文件。但是有一个前提是你必须拥有超级管理员的权限进行该操作或者取消该操作。
[root@localhost sharplee]# sudo chattr +i jetty.sh
OR
[root@localhost sharplee]# sudo chattr +i -V jetty.sh
通过以下命令来查看一个文件的属性。
[root@localhost sharplee]# lsattr jetty.sh
接下来通过任何用户进行文件删除,看看文件是否能够被删除。这个时候为了能够更好的看到效果我们把当前用户切换到普通用户上。
[sharplee@localhost ~]$ rm jetty.sh
[sharplee@localhost ~]$ sudo rm jetty.sh
接下来我们来看一下修改能不能行。
通过上面可以看出来,不能对该文件进行修改。接下来来看一看如何恢复成可删除的呢?
[sharplee@localhost ~]$ sudo chattr -i jetty.sh
如何让目录不能删除
使用-R参数,可以递归改变目录的属性以及目录下文件的属性。
[sharplee@localhost ~]$ sudo chattr +i -RV backdir/
目录以及目录以下的文件都被设置为不能删除的了。
这个时候对目录添加了不能删除的属性,目录下的文件也都不能删除了,接下来如何恢复为可以删除的呢?
[sharplee@localhost ~]$ sudo chattr -i -RV backdir/
从上图中可以看出,执行完命令之后,即可删除相应的文件hello.txt或者/backdir目录了。