一、文件的特殊权限:suid
    展示于文件属主的执行权限位:
    如果属主本来有执行权限,则展示为s;否则,展示为S; 

    功用:对于一个可执行文件来讲,任何用户运行此程序为进程时,进程的属主不再是发起者本人,而可执行程序文件自己的属主;

    管理文件SUID权限的方法:
        chmod u+|-s FILE...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@1inux ~]# useradd fedora
[root@1inux ~]# cp /bin/cat / var /tmp/
[root@1inux ~]# cd / var /tmp
[root@1inux tmp]# ls -l / var /tmp/cat 
-rwxr-xr-x 1 root root 48568 Mar 26 19:11 / var /tmp/cat
[root@1inux tmp]# 
 
默认情况下 root可以查看/etc/shadow 文件 
 
[root@1inux ~]# / var /tmp/cat /etc/shadow
root: $6 $EEFfMfXr $94ddcEaxbjta7bj3HCdwlJsi4jG6mHn73bee .God1MB2TsPURJgsw6M6VQxXNQvfIFFKFBcMIBkoiMgqSvaFI1:16519:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
.......
而其他用户不能访问/etc/shadow
 
[fedora@1inux tmp]$ / var /tmp/cat /etc/shadow
/ var /tmp/cat: /etc/shadow: Permission denied   //使用fedora用户查看 显示拒绝
[fedora@1inux tmp]$ 
 
接下来我们用root用户给其增加特殊权限
 
[root@1inux tmp]#  chmod  u+s / var /tmp/cat       //增加特殊权限suid
[root@1inux tmp]# ls -l / var /tmp/cat 
-rwsr-xr-x 1 root root 48568 Mar 26 19:11 / var /tmp/cat     //可以看到属主的权限由rwx变成了rws
 
然后我们再以fedora用户查看/etc/shadow 文件,验证是否可以查看成功
 
[fedora@1inux tmp]$ ls -l / var /tmp/cat 
-rwsr-xr-x 1 root root 48568 Mar 26 19:11 / var /tmp/cat
[fedora@1inux tmp]$ / var /tmp/cat /etc/shadow   //OK,现在可以查看文件了
root: $6 $EEFfMfXr $94ddcEaxbjta7bj3HCdwlJsi4jG6mHn73bee .God1MB2TsPURJgsw6M6VQxXNQvfIFFKFBcMIBkoiMgqSvaFI1:16519:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
.......

OK   给/var/tmp/cat增加特殊权限后,其他用户也可以访问使用其访问/etc/shadow 文件了

二、属组特殊权限:sgid
    展示于文件属组的执行权限位;
    如果属组本来有执行权限,则展示为s;否则,展示为S;

    功用:

        当目录属组有写权限,且有sgid权限时,那么所有属于此目录的属组,且以属组身份在此目录新建文件或目录时,新文件或目录的属组不是创建者所属的基本组,而是目录自己的属组;

            chmod g+|-s FILE...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
演示过程:
1、创建用户、目录并修改权限
[root@1inux tmp]# groupadd distro
[root@1inux tmp]# useradd -G distro gentoo
[root@1inux tmp]# useradd -G distro fedora
[root@1inux tmp]# id gentoo
uid=502(gentoo) gid=503(gentoo) groups=503(gentoo),502(distro)
[root@1inux tmp]# id fedora
uid=501(fedora) gid=501(fedora) groups=501(fedora),502(distro)
[root@1inux tmp]#  mkdir  / var /tmp/test
[root@1inux tmp]#  chgrp  distro / var /tmp/test
[root@1inux tmp]# ls -dl / var /tmp/test
drwxr-xr-x 2 root distro 4096 Mar 26 19:41 / var /tmp/test
[root@1inux tmp]#  chmod  g+w / var /tmp/test   //给此目录的属组添加写权限
[root@1inux tmp]# ls -dl / var /tmp/test
drwxrwxr-x 2 root distro 4096 Mar 26 19:41 / var /tmp/test
2、创建用户验证
[fedora@1inux test]$ touch a.fedora
[fedora@1inux test]$ ls -l
total 0
-rw-rw-r-- 1 fedora fedora 0 Mar 26 19:51 a.fedora       //其属组是fedora
[root@1inux ~]# su gentoo
[gentoo@1inux test]$ touch / var /tmp/test/b.gentoo
[gentoo@1inux test]$ ls -l
total 0
-rw-rw-r-- 1 fedora fedora 0 Mar 26 19:51 a.fedora
-rw-rw-r-- 1 gentoo gentoo 0 Mar 26 19:52 b.gentoo     //其属组gentoo
3、给/ var /tmp/test目录增加特殊权限
[root@1inux tmp]#  chmod  g+s / var /tmp/test     //修改权限
[root@1inux tmp]# ls -ld / var /tmp/test/
drwxrwsr-x 2 root distro 4096 Mar 26 19:52 / var /tmp/test/     //可以看到其属组权限变成了rws
[root@1inux tmp]# 
4、验证在拥有特殊权限目录下创建文件的属组是否发生改变
  我们分别以fedora,gentoo在其目录下创建文件查看其属性
[fedora@1inux test]$ touch s.fedora        //以fedora用户创建
[fedora@1inux test]$ ls -l
total 0
-rw-rw-r-- 1 fedora fedora 0 Mar 26 19:51 a.fedora
-rw-rw-r-- 1 gentoo gentoo 0 Mar 26 19:52 b.gentoo
-rw-rw-r-- 1 fedora distro 0 Mar 26 19:57 s.fedora     //此时创建的文件属组变成了distro
[gentoo@1inux test]$ touch s.gentoo     //以gentoo用户创建
[gentoo@1inux test]$ ls -l
total 0
-rw-rw-r-- 1 fedora fedora 0 Mar 26 19:51 a.fedora
-rw-rw-r-- 1 gentoo gentoo 0 Mar 26 19:52 b.gentoo
-rw-rw-r-- 1 fedora distro 0 Mar 26 19:57 s.fedora
-rw-rw-r-- 1 gentoo distro 0 Mar 26 19:57 s.gentoo     //用gentoo在此目录下创建的文件属组也是distro
[gentoo@1inux test]$


    这样拥有特殊权限的目录,其属组内的任何用户在其目录下创建文件或目录,所创建的文件或目录的属组不再是创建用户自己的属组而是其目录的属组,即特殊权限目录的属组,这样拥有此属组的任意用户都可以修改此属组内用户创建的文件

三、目录特殊权限:sticky
    展示于目录其它用户的执行权限位;
    如果其它用户本来有执行权限,则展示为t;否则,展示为T;

    功用:
        对于全局可写,或某组全局可写目录,所有用户都可以在此目录创建文件或删除自己为属主的那些文件,但不能删除非自己为属主文件或目录;

        chmod o+|-t FILE...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
演示:
1、创建目录并修改权限
[root@1inux tmp]#  mkdir  admin
[root@1inux tmp]#  chmod  o+w admin
[root@1inux tmp]# ls -ld admin     //查看权限
drwxr-xrwx 2 root root 4096 Mar 26 20:27 admin
2、分别以fedora、gentoo用户在此目录下创建文件
[gentoo@1inux admin]$ ls -l
total 0
-rw-rw-r-- 1 fedora fedora 0 Mar 26 20:28 a.fedora
-rw-rw-r-- 1 gentoo gentoo 0 Mar 26 20:29 a.gentoo
-rw-rw-r-- 1 fedora fedora 0 Mar 26 20:28 b.fedora
-rw-rw-r-- 1 gentoo gentoo 0 Mar 26 20:29 b.gentoo
[gentoo@1inux admin]$ 
3、分别用fedora、gentoo用户删除对方创建的文件
[gentoo@1inux admin]$ rm a.fedora    
rm: remove write- protected  regular  empty  file `a.fedora'? y     //发现gentoo可以删除fedora创建的文件
[gentoo@1inux admin]$ ls -l
total 0
-rw-rw-r-- 1 gentoo gentoo 0 Mar 26 20:29 a.gentoo
-rw-rw-r-- 1 fedora fedora 0 Mar 26 20:28 b.fedora
-rw-rw-r-- 1 gentoo gentoo 0 Mar 26 20:29 b.gentoo
[gentoo@1inux admin]$ 
[fedora@1inux admin]$ rm a.gentoo 
rm: remove write- protected  regular  empty  file `a.gentoo'? y     //fedora也可以删除gentoo创建的文件
[fedora@1inux admin]$ ls -l
total 0
-rw-rw-r-- 1 fedora fedora 0 Mar 26 20:28 b.fedora
-rw-rw-r-- 1 gentoo gentoo 0 Mar 26 20:29 b.gentoo
[fedora@1inux admin]$ 
4、以root用户登陆 对/ var /tmp/admin 目录 添加特殊权限 sticky
[root@1inux tmp]#  chmod  o+t admin
[root@1inux tmp]# ls -ld admin
drwxr-xrwt 2 root root 4096 Mar 26 20:32 admin      //可以看到其它用户权限变成了rwt
5、分别以fedora、gentoo登陆在/ var /tmp/admin目录下删除对方文件
[fedora@1inux admin]$ rm b.gentoo 
rm: remove write- protected  regular  empty  file `b.gentoo'? y
rm: cannot remove `b.gentoo': Operation not permitted         //发现此时fedora已经无法删除gentoo创建的文件
[fedora@1inux admin]$ 
[gentoo@1inux admin]$ ls -l
total 0
-rw-rw-r-- 1 fedora fedora 0 Mar 26 20:28 b.fedora
-rw-rw-r-- 1 gentoo gentoo 0 Mar 26 20:29 b.gentoo
[gentoo@1inux admin]$ rm b.fedora 
rm: remove write- protected  regular  empty  file `b.fedora'? y
rm: cannot remove `b.fedora': Operation not permitted         //此时gentoo用户也无法删除fedora创建的用户
[gentoo@1inux admin]$


特殊权限位表示:

1
2
3
4
5
6
7
8
9
  sst:   【suid   sgid   sticky】
     000 0
     001 1
     010 2
     011 3
     100 4
     101 5
     110 6
     111 7


以后修改文件或目录权限时,也可以加上特殊权限,特殊权限置于普通权限之前,

1、修改/abc 目录权限为775且拥有sticky权限

1
chmod  1775 /abc

2、修改文件file权限为664并且拥有suid、sgid权限

1
chmod  6664 file

所以在umask定义的0002中的第一个0 就表示特殊权限
            umask 0002


    安全上下文:
        1、进程以某用户的身份运行;进程是发起此进程的用户代理,其以对应用户身份完成所需的操作;
        2、权限匹配模型:
            (1) 进程的属主,是否是被访问的资源的属主;如果是,则应用属主权限;
            (2) 否则,查看进程的属组,是否属于被访问资源的属组;如果是,则应用属组权限;
            (3) 否则,则应用其它权限;