• Linux的特殊权限


      linux中除了有常见的读写执行三种常见的权限外,还有3中特殊的权限,分别是SUID,SGID,Striky。在了解特殊权限之前,先解释一下安全上下文的概念。

      安全上下文:进程运行时能够访问那些资源或文件,不取决与进程文件的属主属组,而取决与运行该命令的用户身份的UID和GID,以该身份获取各种系统资源。

      特殊权限位:  

      SUID:对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的属主身份来执行,也就是说无论谁来执行这个文件,他都有文件所有者的特权。如果所有者是 root 的话,那么执行人就有超级用户的特权了。

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

        chmod u+s FILE
        chmod u-s FILE
        如果FILE本身原来就有执行权限,则显示为s;否则显示S

        eg.

           -r--------. 1 root root 865 7月  26 02:17 /etc/shadow
        -rwxr-xr-x. 1 root root 54048 6月  10 2014 /bin/cat
        
                有一个叫hadoop的用户,在hadoop用户下
    
        [hadoop@RedHat ~]$ cat /etc/shadow
        cat: /etc/shadow: Permission denied
    
        cat进程启动起来以后,是以hadoop的身份运行的。而hadoop没有访问/etc/shadow这个文件的权限。所以访问不到。
    
        [root@RedHat data]# chmod u+s /bin/cat   
        [root@RedHat data]# ll /bin/cat
        -rwsr-xr-x. 1 root root 54048 Jun 10 2014 /bin/cat
    
        再切换到hadoop用户下,
    
        [hadoop@RedHat ~]$ cat /etc/shadow      
        root:$6$DotZtyMiripQ.7bt$d171YFkJIRCfK/9G3A1qBLfOo4/ya6zZWxqyU5qEgaqE0hcM89Ig61:16585:0:99999:7:::     bin:*:16231:0:99999:7:::     daemon:*:16231:0:99999:7:::     adm:*:16231:0:99999:7:::     lp:*:16231:0:99999:7:::     ....     访问成功,在设置SUID后,cat进程起来以后,不在以hadoop的身份运行,而是以cat文件自身的属主root来运行,而root用户对/etc/shadow具有访问权限。

      应用场景:

        写一个脚本获取某些系统的属性的时候,就必须给SUID权限。   

        [root@RedHat data]# ll /usr/bin/passwd
        -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd

        普通用户也要能修改自身的登录密码,所以必须给SUID权限。

     

      SGID:对于一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的属组的身份来执行。也就是说该文件具有所属组的特权,任意存取这个组所能使用的系统资源。若一个目录设置了SGID,则所有被复制到这个目录下的文件,其所属组都会被重设为和这个目录一样,除非在复制时文件时加上-p参数,才能保留原来所属组的群组设置。

      SGID:运行某程序是,相应进程的属组是程序文件自身的属主,而不是启动者的基本组。
        chmod g+s FILE
        chmod g-s FILE

      eg.

       假设有develop, team, hadoop, hbase, hive几个用户要在一个公共目录/tmp/project/下,建一个文件,相互都能访问,相互而且能编辑。

    在root用户下
    [root@RedHat tmp]# mkdir project
    [root@RedHat tmp]# groupadd developteam
    [root@RedHat tmp]# chown -R :developteam /tmp/project/
    [root@RedHat tmp]# usermod -a -G developteam hadoop
    [root@RedHat tmp]# usermod -a -G developteam hive
    [root@RedHat tmp]# usermod -a -G developteam hbase
    [root@RedHat tmp]# id hadoop
    uid=1002(hadoop) gid=1002(hadoop) groups=1002(hadoop),1005(development),1007(developteam)
    hadoop有developteam组权限
    
    在hadoop用户下
    [hadoop@RedHat project]$ touch a.hadoop
    [hadoop@RedHat project]$ ll
    -rw-rw-r--. 1 hadoop hadoop 0 7月  26 03:05 a.hadoop
    
    在hbase用户下
    [hbase@RedHat project]$ touch a.hbase
    [hbase@RedHat project]$ ll
    -rw-rw-r--. 1 hadoop hadoop 0 7月  26 03:05 a.hadoop
    -rw-rw-r--. 1 hbase  hbase  0 7月  26 03:06 a.hbase
    
    新建的文件a.hadoop a.hbase都是属于用户的基本组,相互之间没有写权限。
    
    给/tmp/project目录添加SGID权限
    [root@RedHat project]# chmod g+s /tmp/project/
    [root@RedHat project]# ls -ld .
    drwxrwsr-x. 2 root developteam 4096 Jul 26 03:06 .
    
    在hadoop用户下
    [hadoop@RedHat project]$ touch b.hadoop
    [hadoop@RedHat project]$ ll
    -rw-rw-r--. 1 hadoop hadoop      0 7月  26 03:05 a.hadoop
    -rw-rw-r--. 1 hbase  hbase       0 7月  26 03:06 a.hbase
    -rw-rw-r--. 1 hadoop developteam 0 7月  26 03:07 b.hadoop
    
    在hbase用户下
    [hbase@RedHat project]$ touch b.hbase
    [hbase@RedHat project]$ ll
    -rw-rw-r--. 1 hadoop hadoop      0 7月  26 03:05 a.hadoop
    -rw-rw-r--. 1 hbase  hbase       0 7月  26 03:06 a.hbase
    -rw-rw-r--. 1 hadoop developteam 0 7月  26 03:07 b.hadoop
    -rw-rw-r--. 1 hbase  developteam 0 7月  26 03:07 b.hbase
    
    发现新建的文件b.hadoop和b.hbase都属于developteam组。hadoop和hbase可以访问修改对方创建的文件。但是这样又有个缺陷,那就是hadoop和hbase能够删除对方建立的文件。

      

      STICKY:粘滞位,通常对于目录而言。通常对于全局公共目录来说,让该目录具有Sticky后,删除只属于自己的文件有效(但是仍能编辑修改别人的文件,除了root)。不能根据安全上下文获取对别人的文件的写权限。
      Sticky:在一个公共目录,每个都可以创建文件,删除自己的文件,但不能删除别人的文件;
        chmod o+t DIRECTORY
        chmod o-t DIRECTORY

    给/tmp/project目录添加Sticky权限
    [root@RedHat project]# chmod o+t /tmp/project/
    [root@RedHat project]# ls -ld .
    drwxrwsr-t. 2 root developteam 4096 Jul 26 03:15 .

      这三位特殊权限组成一个八进制的权限位s,u,t,用二进制表示:

      SUID SGID STICKY 最靠前的权限位
      000
      001
      ...
      110
      111

      chmod 1755 /backup/test,标红的表示特殊权限位。

    练习:新建一个公司的开发组developteam。有三个成员hadoop hbase hive,在工程目录/tmp/projct下,可以创建文件,可以访问修改其他组员创建的文件,可以
    删除自己创建的文件,但是不能删除其他组员创建的文件
    useradd hadoop
    useradd hbase
    useradd hive
    groupadd developteam

    usermod -a -G developteam hadoop
    usermod -a -G developteam hive
    usermod -a -G developteam hbae

    mkdir /tmp/project/
    #chmod g+w /tmp/project
    chomd g+s /tmp/project
    drwxrwsr-x. 2 root development 4096 6月 29 23:10 /tmp/project/
    chomd o+t /tmp/project
    drwxrwsr-t. 2 root development 4096 6月 29 23:10 /tmp/project/

    su hbase
    cd /tmp/project
    touch a.habse
    ls -l a.habse
    -rw-rw-r--. 1 hbase development 0 6月 29 23:10 a.hbase

    su hadoop
    cd /tmp/project
    touch a.hadoop
    ls -l a.hadoop
    -rw-rw-r--. 1 hadoop development 0 6月 29 23:10 a.hadoop

  • 相关阅读:
    日积月累--小技巧之四
    深入理解object C中复制对象的用法(二)
    状压dp-poj-1170-Shopping Offers
    linux printk函数学习
    I.MX6 WIFI wireless_tools 移植
    I.MX6 AW-NB177NF WIFI 驱动移植问题
    VS 一些配置设置
    I.MX6 boot from Micro SD
    Android studio 构建太慢
    Android gif 录屏
  • 原文地址:https://www.cnblogs.com/chrisDuan/p/4676423.html
Copyright © 2020-2023  润新知