特殊权限之SUID、SGID、STICKY

特殊权限

       在系统中,难免有一些比较特殊的用户或文件目录,但是普通的权限有不能解决我们的需求,于是就有特殊权限帮我们解决这个问题

特殊权限有三个:SUID、SGID、STICKY

     首先,先说说安全上下文:

进程以某用户的身份运行,那么进程将会以此用户身份去完成所有操作。

     然后,权限的匹配过程:

1.进程的属主(发起者),是否为被访问的文件的属主,如果是,则应用属主的权限对文件进行操作,否则进入第二步

  2.判断进程的属主是否为被访问的文件的属组,如果是,则应用该权限,否则应用other的权限。

    最后,特殊权限将打破这一匹配过程。具体如下:

SUID:超级属主

     用户运行某程序时,如果发现其拥有SUID权限,那么程序运行转换为进程时,其进程的属主(发起者)不是真实的发起者,而是拥有SUID权限程序的属主。

      当我们看都某文件或目录的第一个3位权限最后一位为S时,那么当用户运行命令对其执行是,进程的属主则是其文件上的属主。

     

    SUID权限管理

chmod  u+/-  S  FILE...
[root@localhost testdir]# ls -l
-rw-r--r-- 1 root root 0 Jul 25 18:20 aaa    //原有权限

[root@localhost testdir]# chmod u+s aaa     //加上SUID权限
[root@localhost testdir]# ls -l
-rwSr--r-- 1 root root 0 Jul 25 18:20 aaa         //第一个三位权限的最后一位为大写S

[root@localhost testdir]# chmod u-s aaa       //取消对文件的SUID
[root@localhost testdir]# ls -l
-rw-r--r-- 1 root root 0 Jul 25 18:20 aaa       //恢复默认

     SUID实战解析

              1.让lii用户能查看magedu用户的家目录

[root@localhost ~]# cp /bin/ls /testdir/ls            
//复制/bin/ls 到另一个目录,这样能完成实验的需求

[root@localhost ~]# chmod u+s /testdir/ls          
  //然后给复制过去的ls 加上SUID权限,使得我们一会好应用此权限去访问其他用户的家目录
  
[root@localhost ~]# ls -l /testdir/ls                
  //查看复制过去的ls里有s权限(注意:此时系统用的是默认的/bin/ls,我把原有的ls别名删除了)
-rwsr-xr-x 1 root root 117048 Jul 25 18:51 /testdir/l       
[lii@localhost home]$ ls -l magedu/                  

ls: cannot open directory magedu/: Permission denied  
  //用其他用户登录,在家目录中查看别的用户的家目录是不允许的
  //权限不够,因为系统原有的/bin/ls  没有SUID权限。
  
[lii@localhost home]$ /testdir/ls -a magedu/  
.  ..  .bash_history  .bash_logout  .bash_profile.bashrc  .gnome2           
 //当我们使用复制过去并添加SUID的ls命令查看别的用户的家目录时是可以的。因为这个ls的属主是root,root用户查看任何一个用户的家目录都是可以的,所以,这就是SUID的作用。

 

结论:SUID对文件进行授权SUID之后,任何一个用户使用其授权的SUID的二进制文件访问时,使用的是其二进制文件的属主来对其访问的。

注意:在添加s权限时,原文件必须要有执行权限(x),如果没有添加SUID之后显权限位显示为大S则表示SUID权限没成功,必须为小s。

SGID:超级组

       当目录属组有写权限时,且有SGID权限时,那么所有属于此目录的属组的用户(以此目录的属组为附加组的用户),并且以属组身份在此目录中新建文件或目录是,新建的文件或目录不是用户的本组,而是此目录的属组。

    SGID权限管理

chmod  g+/-  S  FILE...
[root@localhost /]# ls -ld /testdir/SGID       
drwxr-xr-x 2 root root 4096 Jul 25 19:19 /testdir/SGID  
[root@localhost /]# chmod g+s /testdir/SGID      //给目录添加SGID权限
[root@localhost /]# ls -ld /testdir/SGID
drwxr-sr-x 2 root root 4096 Jul 25 19:19 /testdir/SGID
[root@localhost /]# chmod g-s /testdir/SGID      //给目录减去SGID权限
[root@localhost /]# ls -ld /testdir/SGID
drwxr-xr-x 2 root root 4096 Jul 25 19:19 /testdir/SGID

    SGID实战解析

1.将目录设定SGID,让其他用户在此目录创建文件或目录是属主不变,属组为目录的属组。

[root@localhost /]# ls -ld /testdir/sgid                //查看原有目录权限
drwx-wxr-x 2 root root 4096 Jul 25 19:37 /testdir/sgid
[root@localhost /]# chmod g+s /testdir/sgid  
    //对目录增加s权限,(注意此前一定要有w权限才能创建文件,这是普通权限对目录的含义)
[root@localhost /]# ls -ld /testdir/sgid               //查看目录信息
drwx-wsr-x 2 root root 4096 Jul 25 19:37 /testdir/sgid
[root@localhost /]# su - lii                            //切换用户之后在目录内创建文件
[lii@localhost ~]$ touch /testdir/sgid/lii.txt
[root@localhost /]# ls -l /testdir/sgid/lii.txt     
-rw-r--r-- 1 lii root 0 Jul 25 19:39 /testdir/sgid/lii.txt 
   //查看创建的文件的属主属组  属主为lii,属组则为root,因为sgid目录具有SGID权限。

结论:1.对目录进行赋权SGID时,在其目录中创建文件的用户必须是其目录的属组的成员。

         2.当sgid作用在目录上时,在目录内新建的文件或目录的所属组自动继承该目录的所属组

         3.在具有SGID权限的目录中创建文件时,目录的属组一定要有写(w)权限,因为这样才能对其目录创建文件。、

2.对二进制可执行文件添加SGID权限,让其他用户能使用其有SGID权限的二进制程序对文件进行操作

 

[root@localhost ~]# chmod g+s /bin/cat        //二进制可执行文件/bin/cat加上SGID权限
[root@localhost ~]# ls -l /bin/cat
-rwxr-sr-x 1 root root 48568 May 11 16:59 /bin/cat
[root@localhost ~]# ls -l /etc/shadow
----r----- 1 root magedu 1051 Jul 25 12:28 /etc/shadow    
      //查看shadow文件的属组为magedu,属组权限为可读
[root@localhost ~]# su - lii                                    
[lii@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
     //切换到lii用户执行cat访问shadow文件,提示权限不不够,因为此时shadow文件的属组为magedu,而cat的属组为root,所以cat的SGID在这里并不能生效。

[root@localhost ~]# chown :root /etc/shadow   
      //将shadow文件属组更改为root,再用lii用户查看shadow文件,查看成功。
[root@localhost ~]# su - lii
[lii@localhost ~]$ cat /etc/shadow
root:$6$npNlJrmB$T5JD58gi9xVAkEudYZlhixv8BCjd316Q6mR/xvOi7gibuS8BpMuxTgrPpZyFoyTu31WQGB9algduVjYux7b8g0:17007:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::

 

    结论:对二进制文件设定SGID时,其他用户引用的是该二进制文件的属组,所以在其他用户使用其二进制文件访问其他文件时,其文件的属组必须和二进制文件的属组一致才能进行访问,

    注意:在添加s权限时,原文件必须要有执行权限(x),如果没有添加SGID之后显权限位显示为大S则表示SGID权限没成功,必须为小s。

STICKY:其他用户权限

   对于属组可写或全局可写的目录,所在组内的用户或系统上的所有用户在此目录创建或删除文件,如果为此类目录设置sticky权限,则每个用户能创建新文件,但只能删除属主为自己的文件

    STICKY权限管理

chmod  o+/- t FILE…

[root@localhost /]# ls -ld /testdir/STICKY       
drwxr-xr-x 2 root root 4096 Jul 25 19:19 /testdir/STICKY 
[root@localhost /]# chmod o+t /testdir/STICKY      //给目录添加STICKY权限
[root@localhost /]# ls -ld /testdir/STICKY
drwxr-sr-t 2 root root 4096 Jul 25 19:19 /testdir/STICKY
[root@localhost /]# chmod o-t /testdir/STICKY      //给目录减去STICKY权限
[root@localhost /]# ls -ld /testdir/STICKY
drwxr-xr-x 2 root root 4096 Jul 25 19:19 /testdir/STICK

STICKY实战解析

对/testdir/sticky目录设定sticty权限,并让所有用户创建在其内创建文件是自动属于目录的属组,最后让目录内的文件所有用户能看,只能删除自己的,也只能编辑有属组有w权限的文件

     

[

root@localhost testdir]#  chmod o=rwx,g=rwx,u= /testdir/sticky/    
[root@localhost testdir]# ll -d /testdir/sticky/
d---rwxrwx 2 root root 4096 Jul 25 14:13 /testdir/sticky/
 //给文件创建指定权限,组和其他用户都要有执行权限和读权限,因为我们要满足题目的属组为目录属组和让目录内的文件用户只能删除自己的,并只能更改其文件属组为目录属组的文件(并且还要有写权限)
 
[root@localhost testdir]# chmod o+t /testdir/sticky/
[root@localhost testdir]# ll -d /testdir/sticky/
d---rwxrwt 2 root root 4096 Jul 25 14:13 /testdir/sticky/
[root@localhost testdir]# chmod g+s /testdir/sticky/
[root@localhost testdir]# ll -d /testdir/sticky/
d---rwsrwt 2 root root 4096 Jul 25 14:22 /testdir/sticky/
//给目录添加SGID和STICKY权限
[root@localhost testdir]# touch /testdir/sticky/root1
[lii@localhost ~]$ touch /testdir/sticky/lii1
[magedu@localhost ~]$ touch /testdir/sticky/magedu1
[magedu@localhost ~]$ ls /testdir/sticky/ -l
-rw-rw-r-- 1 lii    root 0 Jul 25 14:19 lii1
-rw-rw-r-- 1 magedu root 0 Jul 25 14:19 magedu1
-rw-r--r-- 1 root   root 0 Jul 25 14:18 root1
   //三个用户分别创建一个文件,属主为用户本身,属组为root,因为上面我们对目录添加了SGID,会自动把属组更改为目录属组,完成一半。
[magedu@localhost ~]$ vi /testdir/sticky/root2 
[magedu@localhost ~]$ vi /testdir/sticky/lii1   
   //可以编辑lii1文件,因为此文件的属组有写权限,如果没有也不能修改。但如果有执行权限,也不不能删除其文件,因为此文件的父目录设定了sticky权限。
[magedu@localhost ~]$ rm -f /testdir/sticky/lii1    
    //不能删除其他用户的文件,如果其余属组的权限有的话课以修改和查看,但不能删除别人的。
rm: cannot remove `/testdir/sticky/lii1': Operation not permitted
[magedu@localhost ~]$ rm -f /testdir/sticky/root1        //也不能删除
rm: cannot remove `/testdir/sticky/root1': Operation not permitted
//用magedu账户登入第一行为编辑root2文件,而root2文件属组为root但是没有写权限所以不能修改,只能看。

结论:1.sticky的作用为当给目录设定sticky权限后,此内文件所有用户只能删除属主为用户本身的文件,

         2.所有用户能对此目录创建文件,但如果要修改或查看其他人的文件取决于其他文件对用户本身设定的权限。

原创文章,作者:Lii,如若转载,请注明出处:http://www.178linux.com/28359

(0)
LiiLii
上一篇 2016-08-05
下一篇 2016-08-05

相关推荐

  • 新的学期,新的开始:新的起点,新的终点!

    马哥教育Linux面授30期,

    2018-03-26
  • Linux用户与权限管理

    由于Linux是多用户、多任务系统,出于一些需要,当我们创建的文件希望对一部分用户开放,对一部分用户隐藏的时候应该怎么办呢?这样的话,就需要涉及到Linux系统中对用户以及对文件权限的管理。 一、相关文件 在Linux中,一切配置文件都是以文本文档的方式来保存的,同样用户的信息也保存在系统的一些文件中,其位置为/etc/passwd。此文件只有root用户具…

    Linux干货 2016-08-05
  • Linux程序包管理之RPM

    前言 Linux平台上常见的软件包格式主要有三种,分别是源码格式包、通用二进制格式包和rpm格式包本文主要讲解rpm格式包安装及管理。RPM是Redhat Package Manager的缩写,是由Redhat公司开发的Linux软件包管理具,因其便捷的管理方式与开源思想,逐渐被其他Linux发行商所采用,现已成Linux平台下通用的软件包管理方式。 rpm…

    Linux干货 2015-03-28
  • Linux如何进行分区和目录管理

    第七周作业   1、创建一个10G分区,并格式为ext4文件系统: 1、要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包括acl; ~]# mke2fs -t ext4 -b 2048 -m 2 -L MYDATA /dev/sdb1 2、挂载至/data/mydata目录,要求挂载时禁止程序自动运行,县不更新…

    2017-09-18
  • 磁盘配额实现

    磁盘配额实现 磁盘配额要求必须是独立的分区 创建一个新的分区 #同步分区表 [root@localhost ~]# partx -a /dev/sda [root@localhost ~]# mkfs.ext4 /dev/sda6 -L /home [root@localhost ~]# blkid /dev/sda6: LABEL=”/home…

    Linux干货 2017-12-09
  • 正则表达式的概念和用法

    概念 正则表达式是对字符串操作的一种逻辑表达方式,很多情况下我们需要在茫众多的文件中找到我们需要的文件时,就需要用到正则表达式了 正则表达式就如同一个过滤器,能够筛选出希望得到的字符串。它可以检索、替换符合我们自己规定格式的所有文本。 正则表达式分两类: 基本正则表达式 扩展正则表达式 正则表达式的用法和选项 在Linux中,正则表达式通常会配合文本过滤工具…

    2017-06-10

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-08 15:09

    文章整体层次清晰,有理论,有实践,通过实践对文件权限有了深刻的认识和理解。