Linux文件系统上的特殊权限
    SUID, SGID, Sticky
   

    安全上下文
        前提:进程有属主和属组;文件有属主和属组;
        (1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限;
        (2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组;
        (3) 进程访问文件时的权限,取决于进程的发起者:
            (a) 进程的发起者,同文件的属主:则应用文件属主权限;
            (b) 进程的发起者,属于文件的属组;则应用文件属组权限;
            (c) 不满足以上两种条件,应用文件“其它”权限;

    1 SUID
        (1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限;
        (2) 启动为进程之后,其进程的属主为原程序文件的属主;

        权限设定:
            chmod u+s FILE...
            chmod u-s FILE...

    2 SGID
        默认情况下,用户创建文件时,其属组为此用户所属的基本组;
        一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组;

        权限设定:
            chmod g+s DIR...
            chmod g-s DIR...

    3 Sticky
        对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除自己的文件;

        权限设定:
            chmod o+t DIR...
            chmod o-t DIR...

        SUID SGID STICKY
            000 0 无特殊权限
            001 1  stiky
            010 2  SGID
            011 3  STIKY+SGID
            100 4  SUID
            101 5  SUID+STIKY
            110 6  SUID+SGID
            111 7  SUID+SGID+STIKY

            chmod 4777 /tmp/a.txt

        几个权限位映射:
            SUID: user, 占据属主的执行权限位;
                s: 属主拥有x权限
                S:属主没有x权限
            SGID: group,  占据group的执行权限位;
                s: group拥有x权限
                S:group没有x权限            
            Sticky: other, 占据ohter的执行权限位;
                t: other拥有x权限
                T:other没有x权限

例子:查看文件a的权限:

特殊权限详解_sgid


SGID和stiky案例:

test目录属组改为mygrp,并且给予属组写权限,将用户leeuser1加入到mygrp

特殊权限详解_stiky_02

test目录下分别以leeuser1的身份创建文件,发现文件属组都是用户原先的基本组

特殊权限详解_suid_03

特殊权限详解_suid_04

赋予SGID权限给test目录

特殊权限详解_stiky_05

继续用leeuser1创建文件,发现文件属组变成了mygrp

特殊权限详解_suid_06

但是这个目录下的文件缺乏安全性,lee用户可以删除user1的文件,反之亦然,所以就有了stiky

特殊权限详解_sgid_07

现在lee用户就不可以删除user1的文件了

特殊权限详解_stiky_08