chattr – change file attributes on a Linux file system(在Linux文件系统上更改文件属性)
设置隐藏权限
[root@evan-01 ~]# ls -l
total 12
-rw-------. 1 root root 6398 Aug 8 16:10 anaconda-ks.cfg
-rw-------. 1 root root 1257 Aug 8 18:36 anaconda-ks.cfg.bak
drwxrwxr--. 2 root root 6 Aug 9 11:15 test
-rw-rw-r--. 1 root root 0 Aug 9 11:14 test.txt
[root@evan-01 ~]# chattr +i test.txt
[root@evan-01 ~]#
设置后我们去编辑这个文件
[root@evan-01 ~]# vi test.txt
按 i 切换到插入模式后,下面出现警告:W10: Warning: Changing a readonly file(W10:警告:更改只读文件)
随便写入一些内容,按esc键,输入:wq保存退出,提示:‘E45 readonly’ option is set (add ! to override),设置了readonly选项,添加!覆盖
写入不进去,按 esc 键,输入:q! ,强制退出。
[root@evan-01 ~]# cat test.txt
[root@evan-01 ~]#
然后查看下文件,发现什么都没写入进去
尝试追加内容进去看可以吗
[root@evan-01 ~]# echo "123456" >> test.txt
-bash: test.txt: Permission denied
[root@evan-01 ~]#
究竟他有着什么权限,还不能编辑呢,看下
[root@evan-01 ~]# ls -l test.txt
-rw-rw-r--. 1 root root 0 Aug 9 11:14 test.txt
[root@evan-01 ~]#
是可读写的,没毛病呀。这些都没问题,那一定是有隐藏权限的
lsattr 查看隐藏权限
[root@evan-01 ~]# lsattr test.txt
----i----------- test.txt
[root@evan-01 ~]#
再新建一个文件,看下有没有隐藏权限
[root@evan-01 ~]# touch test2.txt
[root@evan-01 ~]# lsattr test2.txt
---------------- test2.txt
[root@evan-01 ~]#
发现什么都没有
给文件添加 i 权限后,编辑不了,改不了名字,删不掉
编辑不了的例子,在前面已经操作过了
改不了名字
[root@evan-01 ~]# mv test.txt hahaha.txt
mv: cannot move ‘test.txt’ to ‘hahaha.txt’: Operation not permitted
[root@evan-01 ~]#
删不掉
[root@evan-01 ~]# rm -rf test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
[root@evan-01 ~]#
查看下
[root@evan-01 ~]# ls -l test.txt
-rw-rw-r--. 1 root root 0 Aug 9 11:14 test.txt
[root@evan-01 ~]#
发现 test.txt 什么都没改变,也没被删除
touch的时候时间会改变,但是加了i权限后touch都不会改变时间
[root@evan-01 ~]# ls -l test2.txt
-rw-rw-r--. 1 root root 0 Aug 9 11:36 test2.txt
[root@evan-01 ~]# touch test2.txt
[root@evan-01 ~]# ls -l test2.txt
-rw-rw-r--. 1 root root 0 Aug 9 11:40 test2.txt
[root@evan-01 ~]# ls -l test.txt
-rw-rw-r--. 1 root root 0 Aug 9 11:14 test.txt
[root@evan-01 ~]# touch test.txt
touch: cannot touch ‘test.txt’: Permission denied
[root@evan-01 ~]# ls -l test.txt
-rw-rw-r--. 1 root root 0 Aug 9 11:14 test.txt
[root@evan-01 ~]#
test2.txt没有加i权限,所以touch后时间从11:36变成了11:40。因为test.txt加了i权限,所以touch后时间也没发生变化。
减去 i 权限
[root@evan-01 ~]# chattr -i test.txt
[root@evan-01 ~]# lsattr test.txt
---------------- test.txt
[root@evan-01 ~]#
减去i权限后又可以编辑了
[root@evan-01 ~]# vi test.txt
[root@evan-01 ~]# mv test.txt test3.txt
[root@evan-01 ~]# ll
total 16
-rw-------. 1 root root 6398 Aug 8 16:10 anaconda-ks.cfg
-rw-------. 1 root root 1257 Aug 8 18:36 anaconda-ks.cfg.bak
drwxrwxr--. 2 root root 6 Aug 9 11:15 test
-rw-rw-r--. 1 root root 0 Aug 9 11:40 test2.txt
-rw-rw-r--. 1 root root 28 Aug 9 11:44 test3.txt
[root@evan-01 ~]#
减去i权限后又可以查看了
[root@evan-01 ~]# cat test3.txt
hahshasc
absckasck
abcbakbc
[root@evan-01 ~]#
给文件添加 a 权限,只能追加,不能删除,不能编辑,不能更改名字,可以touch(更改时间)
[root@evan-01 ~]# ls -l test3.txt
-rw-rw-r--. 1 root root 28 Aug 9 11:44 test3.txt
[root@evan-01 ~]# chattr +a test3.txt
[root@evan-01 ~]# lsattr test3.txt
-----a---------- test3.txt
[root@evan-01 ~]#
添加 a 权限后不能删除
[root@evan-01 ~]# rm -rf test3.txt
rm: cannot remove ‘test3.txt’: Operation not permitted
[root@evan-01 ~]#
添加 a 权限后不能编辑
[root@evan-01 ~]# vi test3.txt
按 i 切换到插入模式后,随便输入一些内容,按esc,输入:wq保存时候,下面出现警告:E212: Can’t open file for writing,无法打开文件写入
添加 a 权限后不能更改名字
[root@evan-01 ~]# mv test3.txt test.txt
mv: cannot move ‘test3.txt’ to ‘test.txt’: Operation not permitted
[root@evan-01 ~]#
添加 a 权限后可以追加
[root@evan-01 ~]# echo "456789" >> test3.txt
[root@evan-01 ~]# cat test3.txt
hahshasc
absckasck
abcbakbc
456789
[root@evan-01 ~]#
添加 a 权限后可以touch(更改时间)
[root@evan-01 ~]# ls -l test3.txt
-rw-rw-r--. 1 root root 35 Aug 9 14:38 test3.txt
[root@evan-01 ~]# touch test3.txt
[root@evan-01 ~]# ls -l test3.txt
-rw-rw-r--. 1 root root 35 Aug 9 14:40 test3.txt
[root@evan-01 ~]#
减去a权限
[root@evan-01 ~]# chattr -a test3.txt
[root@evan-01 ~]# lsattr test3.txt
---------------- test3.txt
[root@evan-01 ~]#
给目录加 i 权限,会影响到子目录及文件
root@evan-01 ~]# ll
total 16
-rw-------. 1 root root 6398 Aug 8 16:10 anaconda-ks.cfg
-rw-------. 1 root root 1257 Aug 8 18:36 anaconda-ks.cfg.bak
drwxrwxr--. 2 root root 6 Aug 9 11:15 test
-rw-rw-r--. 1 root root 0 Aug 9 11:40 test2.txt
-rw-rw-r--. 1 root root 35 Aug 9 14:40 test3.txt
[root@evan-01 ~]# mkdir test/one
[root@evan-01 ~]# touch test/one/1.txt
[root@evan-01 ~]# tree test
test
└── one
└── 1.txt
1 directory, 1 file
[root@evan-01 ~]# lsattr test
---------------- test/one
[root@evan-01 ~]# chattr +i test
[root@evan-01 ~]# lsattr -d test
----i----------- test
[root@evan-01 ~]#
不能删除
[root@evan-01 ~]# rm -rf test
rm: cannot remove ‘test/one’: Permission denied
[root@evan-01 ~]#
不能更改名字
[root@evan-01 ~]# mv test testdir
mv: cannot move ‘test’ to ‘testdir’: Operation not permitted
[root@evan-01 ~]#
不能touch
[root@evan-01 ~]# ls -l test
total 0
drwxrwxr--. 2 root root 6 Aug 9 14:49 one
[root@evan-01 ~]# touch test
touch: setting times of ‘test’: Permission denied
[root@evan-01 ~]# touch test/ok.txt
touch: cannot touch ‘test/ok.txt’: Permission denied
[root@evan-01 ~]#
可以更改目录里的文件内容
[root@evan-01 ~]# echo "hahaha" >> test/one/1.txt
[root@evan-01 ~]# cat !$
cat test/one/1.txt
hahaha
[root@evan-01 ~]#
减去目录 i 权限
[root@evan-01 ~]# chattr -i test
[root@evan-01 ~]# lsattr test
---------------- test/one
[root@evan-01 ~]#
给目录加 a 权限,会影响到子目录及文件
[root@evan-01 ~]# lsattr -d test
---------------- test
[root@evan-01 ~]# chattr +a test
[root@evan-01 ~]# lsattr -d test
-----a---------- test
[root@evan-01 ~]#
可以touch
[root@evan-01 ~]# touch test/ok.txt
[root@evan-01 ~]# ls -l test
total 0
-rw-rw-r--. 1 root root 0 Aug 9 14:59 ok.txt
drwxrwxr--. 2 root root 19 Aug 9 14:55 one
[root@evan-01 ~]#
可以更改目录里的文件内容
[root@evan-01 ~]# echo "hahaha" >> test/ok.txt
[root@evan-01 ~]# cat !$
cat test/ok.txt
hahaha
[root@evan-01 ~]#
lsattr -R 查看目录及子目录和文件
[root@evan-01 ~]# lsattr test
---------------- test/one
---------------- test/ok.txt
[root@evan-01 ~]# lsattr -R test
---------------- test/one
test/one:
---------------- test/one/1.txt
---------------- test/ok.txt
[root@evan-01 ~]#
lsattr -a 查看目录及隐藏目录隐藏权限
[root@evan-01 ~]# lsattr -a
---------------- ./.
---------------- ./..
---------------- ./.bash_logout
---------------- ./.bash_profile
---------------- ./.bashrc
---------------- ./.cshrc
---------------- ./.tcshrc
---------------- ./.bash_history
---------------- ./anaconda-ks.cfg.bak
---------------- ./anaconda-ks.cfg
---------------- ./.lesshst
-----a---------- ./test
---------------- ./test2.txt
---------------- ./test3.txt
[root@evan-01 ~]#