SUID:   运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者

SGID:   运行某程序时,相应进程的属组是程序文件自身的属组,而不说启动者的属组

Sticky:    在一个公共目录,每个人都可以创建文件,删除自己的文件,但不能删除别人 文件


什么意思?这些解释是不是云里雾绕的,还是用例子来解释吧,通俗易懂。


(一)

SUID:   比如,古代的时候,公主嫁给了平民,那么公主的很多权利就没有了,就不能像小时候那样随意的进宫玩耍了。怎么办?没关系,如果有了SUID之后,公主虽然嫁给了平民,但是她的权利不变,进宫或者行使其他的权利的时候,人们还是认她公主的身份,而不是她丈夫平民的身份。这就是SUID的作用。保持原来的身份不变。

          一个文件,权限默认是:

          -rwxr-xr-x   root root    /bin/cat

         (1) #   cat   /etc/gshadow     //用root用户查看/etc/gshadow可以查看!但是其他用户就没这么好的福气了。/etc/gshadow可不是那么好看的,只有管理员能查看。

 

          (2) $   cat  /etc/gshadow     //运行这个命令之后,肯定是拒绝,谁让你是普通用户呢。 


     但是,加上下面这条命令:

          (3) #  chmod u+s    /bin/cat               //意思是给cat这个命令加上SUID.

                    -rwsr-xr-x. 1 root root  /bin/cat   //rws,看见没有,变成小写s.如果原来就有执行权限,就是小写s,原来没有执行权限,会变成大写的S.

    然后:

          (4) $   cat   /etc/gshadow               //现在运行这个命令,就能查看了。因为虽然是普通用户进行查看的,但是因为cat这个命令加上了suid ,所以/etc/gshadow还是认为是root用户进行查看,所以就给看了。suid的作用是,不管是那个用户进行cat,cat在运行时都贴着它本来自己的标签--root属主和root属组。


(二)

SGID

比如,root 是皇帝,其他的3个普通用户是大臣是和珅,刘墉,纪晓岚。

     #   useradd   和珅             //和珅诞生了

     #    useradd 刘墉               //刘墉诞生了

     #    useradd  纪晓岚          //纪晓岚诞生了

     #   mkdir /tmp/朝廷                //朝廷是一个文件夹,请见谅。

     #   chmod g+w    /tmp/朝廷      //让/tmp/朝廷这个文件夹对组内成员有写的权限

    #    groupadd   一品大臣                     //建一个组,名字就叫一品大臣

   #   chown  -R   :一品大臣     /tmp/朝廷      //让/tmp/朝廷 这个文件夹的属组为一品大臣

   #  usermod -a -G  一品大臣   和珅         //把和珅加入一品大臣这个附加组,下面相同。

   #  usermod -a -G  一品大臣   刘墉

   #  usermod -a -G  一品大臣   纪晓岚


    现在,和珅写一个奏折,刘墉写一个奏折,纪晓岚写一个奏折,3个人写的奏折能互相浏览,更能互相更改,怎么实现,请看:

            a.   和珅写奏折

               $    cd /tmp/朝廷

               $    touch 和珅.txt

                -rw-rw-r--.   和珅   和珅        和珅.txt      //默认其他人有浏览的权限,属主和属组都是本人,因此默认他们只能浏览其他人的权限,不能更改其他人写的内容。

            b.   刘墉写奏折

                $    cd  /tmp/朝廷

                $    touch 刘墉.txt

                -rw-rw-r--.   刘墉    刘墉       刘墉.txt      //同上

            c.   纪晓岚写奏折

                $    cd /tmp/朝廷

                $    touch 纪晓岚.txt

                -rw-rw-r--.   纪晓岚   纪晓岚      纪晓岚.txt      //同上

  经过以上步骤,每个人都能在/tmp/朝廷里面创建文件夹,但是,不能修改其他人的文件夹,怎么办?
          答:

                #  chmod g+s   /tmp/朝廷                    //让朝廷这个文件夹有SGID的权限

然后,纪晓岚再创建一个文件夹:

       $    cd  /tmp/朝廷

        $  touch 纪晓岚02.txt 

     -rw-rw-r--.   纪晓岚   一品大臣       纪晓岚02.txt      //这个时候创建的文件夹默认属组是一品大臣。意味着只要是一品大臣这个组里面的人,比如和珅,不但可以修改纪晓岚的内容,而且还可以删除这个文件夹。纪晓岚要想不被别人删除他创建的东西,要做这一步:

           #    chmod o+t    /tmp/朝廷        //用root   执行这一步就行了。就不能随便删除别人的东西 了

   

            在上面的o+t  中,这个t指的就是sticky.


   -------------------------------------------------------------------------------------------------

附加小知识点:

     chmod 755   /tmp/1.txt     //意味着的权限是   rwx  r-x  r-x    ,分别是属主  读写执行,属组  读执行,  其他组的人  读执行。


    chmod 5755   /tmp/1.txt    //这个文件有SUID和Sticky!(数字中的第一个5,就是红色的5,表示有这个意思.)后面的755就是我们普通理解的--属主读写执行,属组读和执行,其他组的人读和执行。


  chmod 4755     /tmp/1.txt   //只有SUID,因此第一个数字是4.其他后面的755跟上面一样。

  chmod 2755    /tmp/1.txt     //只有SGID,因此第一个数字是2.其他后面的755跟上面一样。

  chmod 1755   /tmp/1.txt     //只有Sticky.