1、chattr
i参数:只能查看该文件内容或者进入目录,不能执行其他操作(添加、删除、重命令)
[root@localhost tmp]# mkdir test #建立目录
[root@localhost tmp]# chattr +i test/ #chattr +i表示添加目录权限,chattr -i表示删除该权限
[root@localhost tmp]# lsattr #查看文件隐藏的权限
----i-------- ./test
进入test目录下,创建文件和目录
[root@localhost test]# touch 1
touch: cannot touch `1': Permission denied
[root@localhost test]# mkdir dir
mkdir: cannot create directory `dir': Permission denied
删除/重命名test目录
[root@localhost tmp]# rm -rf test/
rm: cannot remove directory `test/': Operation not permitted
[root@localhost tmp]# mv test test_new
mv: cannot move `test' to `test_new': Operation not permitted
针对文件的操作和目录出现的效果一致
a参数:可以追加相应内容(如果是文件则可以添加内容,如果是目录,可以创建相应文件和目录),其他操作不允许(删除、重命名等)
[root@localhost tmp]# touch file_test
[root@localhost tmp]# chattr +a file_test
[root@localhost tmp]# lsattr
-----a------- ./file_test
查看文件内容
[root@localhost tmp]# cat file_test
111
修改文件内容为222,没有操作权限
[root@localhost tmp]# echo "222" > file_test
-bash: file_test: Operation not permitted #没有操作权限
追加内容222,成功
[root@localhost tmp]# echo "222" >> file_test
[root@localhost tmp]# cat file_test
111
222
删除和重命名文件失败
[root@localhost tmp]# rm -rf file_test
rm: cannot remove `file_test': Operation not permitted
[root@localhost tmp]# mv file_test file_new
mv: cannot move `file_test' to `file_new': Operation not permitted
针对目录的操作和目录出现的效果一致
________________________________________________________________________________
2,特殊权限
2.1 SUID
限定:只能设置在二进制可执行程序上(如ls,passwd等命令),对目录无效和文本无效
功能:不管谁来执行程序,linux都以程序的拥有者身份的权限,执行该权限
特征:在uesr位的x显示为S或s,s代表包含了x权限,S代表未包含x权限
设置方式:chmod u+s/u-s + 二进制文件
测试:用户无法读取/etc/shadow,设置SUID后,借用root身份读取该文件
如下所示,shadow只允许root读取以及cat的权限信息
[root@localhost /]# ll /etc/shadow
-r-------- 1 root root 1166 Mar 19 19:14 /etc/shadow
[root@localhost ~]# ll /bin/cat
-rwxr-xr-x 1 root root 23132 Mar 1 2010 /bin/cat
切换用户,在默认情况下,cat是否能够读取?显然结构很明显,如下所示。
[root@localhost /]# su - jiang
[jiang@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
通过命令chmod u+s 修改cat的权限,如下所示
[root@localhost ~]# chmod u+s /bin/cat
[root@localhost ~]# ll /bin/cat
-rwsr-xr-x 1 root root 23132 Mar 1 2010 /bin/cat #此时cat的权限发生了变化
那么在此时在jiang的用户下,是否可以读取/etc/shadow的文件呢?
[root@localhost ~]# su - jiang
[jiang@localhost ~]$ cat /etc/shadow
root:$1$ISCm76Fo$Ksy6x.gr5PKb9eGsFg.LM1:16364:0:99999:7:::
bin:*:16364:0:99999:7:::
daemon:*:16364:0:99999:7:::
adm:*:16364:0:99999:7:::
lp:*:16364:0:99999:7:::
sync:*:16364:0:99999:7:::
shutdown:*:16364:0:99999:7:::
很明显是可以读取的,说明jiang以及获取了cat二进制文件的root权限(毕竟/etc/shadow只能root用户读取)。
2.2 SGID
限定:SGID既可以作用于二进制文件又可以作用于目录,但两者的意义却截然不同
功能:
二进制文件:对于二进制文件的操作与SUID类似,执行文件时,都以文件的所属组身份来决定操作权限
目录:默认情况下用户建立文件时,文件的所属组是用户的主组,如果在设置了SGID目录下建立文件,则文件的所属组是继承目录的属组,并且新建立的目录也继承g+s权限
特征:在group位的x显示为S或s,s代表包含了x权限,S代表未包含x权
如下所示,表示默认情况下的,在目录下建立文件和目录的权限情况。
[jiang@localhost tmp]$ ls -ld SGID/
drwxrwxr-x 2 jiang jiang 4096 Mar 19 21:30 SGID/ #SGID目录属于用户组jiang
此时在SGID下建立的文件和目录所属主和组,和你登陆的用有关
如root用户建立的文件和目录权限如下。虽然SGID所属主和组为jiang,但是root建立的文件和目的所属的主和组还是属于root。
[root@localhost SGID]# ls -l
total 4
drwxr-xr-x 2 root root 4096 Mar 19 21:38 root_dir
-rw-r--r-- 1 root root 0 Mar 19 21:38 root_file
接下来,通过chmod g+s 设置SGID,如下所示。
[root@localhost tmp]# ls -ld SGID/
drwxrwsr-x 3 jiang jiang 4096 Mar 19 21:38 SGID/
此时root用户再找该目录下创建文件和目录,看所属主和组有什么变化没有呢?
[root@localhost SGID]# ls -l
drwxr-sr-x 2 root jiang 4096 Mar 19 21:53 root_new_dir
-rw-r--r-- 1 root jiang 0 Mar 19 21:53 root_new_file
此时可以清晰的发现,root用户在SGID目录下建立的用户所属组和SGID所属的组是一致的(为jiang),并且root_new_dir的组权限也继承了SGID的特性。
3、SBIT(黏贴位)
限定:只作用于目录
功能:任何人都可以在一个目录下建立文件,却只有root和建立者本人才可以删除文件
特征:在other位的x显示为T或t,t代表包含了x权限,T代表未包含x权限
在说明这个问题时,首先看如下的案例,首先建立两个用户test1和test2,然后test1在/tmp目录下建立目录sbit,设定起权限为777。如下所示
[test1@localhost tmp]$ ll -ld sbit/
drwxrwxrwx 2 test1 test1 4096 Mar 19 22:04 sbit/
在这个目录下,test1建立的文件,test2可以删除吗?如下所示
[test1@localhost sbit]$ ls -l test1_file
-rw-rw-r-- 1 test1 test1 0 Mar 19 22:08 test1_file
可以看出test1_file的权限为644,那么就单纯看这个权限,test2应该是没有删除权限的,但是实际结果怎么样呢?如下所示
[test2@localhost sbit]$ rm -rf test1_file
[test2@localhost sbit]$ ls -l test1_file
ls: test1_file: No such file or directory
可以看出,test2用户还是删除了test1的文件,为什么会出现这样的情况呢,那是因为test1_file文件继承了/tmp/sbit目录的权限,所以可以删除test1的文件。
面对这样的问题,所以sbit诞生了,我们看一个给目录加上黏贴位还会出现上面的问题吗?
chmod o+t /tmp/sbit
[root@localhost ~]# chmod o+t /tmp/sbit/
[root@localhost ~]# ll -ld /tmp/sbit/
drwxrwxrwt 2 test1 test1 4096 Mar 19 22:10 /tmp/sbit/
此次看test1在/tmp/sbit的创建文件,test2是否能够删除呢?
[test2@localhost sbit]$ rm -rf test1_file
rm: cannot remove `test1_file': Operation not permitted
答案很明确,是不能删除的,但是root是可以删除的,因为毕竟root是管理员嘛。如下所示
[root@localhost sbit]# rm -rf test1_file
[root@localhost sbit]# ll test1_file
ls: test1_file: No such file or directory #root可以删除该文件
总结其使用方法:
chmod u+s file
chmod g+s dir/file
chmod o+t dir