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显示为Ss,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显示为Ss,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显示为Tt,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