SUID_SGID_Sticky简单总结

参考:
 http://blog.chinaunix.net/uid-25314474-id-3313109.html
 
—————————————权限—————————————————-
r——4  \
w—–2    > umask —-root的系统umask:022 , 普通用户:umask:002 
x—– 1  /           
                   修改系统默认的umask: /etc/login.defs

                                        421   421   421
 系统默认目录到权限为:rwx   rwx   rwx      ———————————————————目录
 系统默认文件到权限为:rw-    rw-   rw-      —————————————-文件

                      root          :—     -w-   -w-   ===Umask遮盖后的权限===:rwx  r–  r–      rwx  r-x  r-x
             普通用户            :—     —    -w-   ===Umsak遮盖后的权限===  : rw-  rw- r–      rwx  rwx r-x
   
suid———-4
sgid———-2
sticky——–1
————————————————————————————————

高级权限—-SUID,SGID 和 Sticky

 SUID,SGID和Sticky仅适合文件和目录:
   因为SUID和SGID是在执行程序(程序的可执行位被设置)时起作用,而可执行位只对普通文件和目录文件有意义,
 所以设置其他种类文件的SUID和SGID位是没有多大意义了。
 
   为何需要SUID和SGID权限?
         最典型的一个问题就是普通用户该密码,因为改密码需要修改shadow文件,而shadow文件只有root可修改,
 因此AT&T就开发了SUID/SGID来解决此问题;通过给passwd加SUID权限,就实现了普通用户也可以修改自己的密码了。

  SUID和SGID是如何解决这个问题呢?
    首先,我们要知道一点:进程在运行的时候,有一些属性,其中包括 实际用户ID,实际组ID,有效用户ID,有效组ID等。
 实际用户ID和实际组ID标识我们是谁,谁在运行这个程序,一般这两个字段在登陆时决定,在一个登陆会话期间,
 这些值基本上不改变。而有效用户ID和有效组ID则决定了进程在运行时访问系统资源的权限。
 内核在决定进程是否有文件存取权限时,是采用了进程的有效用户ID来进行判断的。

 1.suid
 作用:任何用户在执行拥有suid权限的命令时,都以该命令拥有者的身份执行
   仅适合作用与文件,目录也可添加SUID,但不起任何作用。
   shell脚本不适合加SUID权限。最好是二进制可执行文件,如:passwd
   注:若二进制文件没有执行权限,添加了SUID,也不能使其他人执行时获得拥有者的权限。
   chmod u+s  命令
    验证方法:

     useradd  test1
     mkdir  /tmp/abc;  chmod 4777  /tmp/abc
     echo -e '#!/bin/bash\ntouch  /abc.txt' > /tmp/abc/a.sh;  chmod 4755 /tmp/abc/a.sh
     su  -  test1      //加“-” 是因为需要在切换到test1时,使用test1的全局环境设置。
     cd /tmp/abc
     mkdir test1       //查看权限并没有继承任何特殊权限。
     /tmp/abc/a.sh     //执行shell脚本,报权限不足。

     
 2.sgid
  作用:任何用户在拥有sgid权限的目录中,创建文件或目录都要强制继承该目录的所属组。
    注: 对于可执行文件:SGID可让执行该文件的用户临时拥有该文件组的权限。
                                  但是,若所属组没有执行权限,other有执行权限,则即便加了SGID的权限,
                                  也无法让其他用户临时拥有该文件组的权限。
      对于目录:SGID可让目录下的所有子目录和文件的所属组都强制改为该目录的所属组。
                   即便, SGID位为 大S (即:目录组没有执行权限),它依然后继续影响其下的
                  子目录和文件的所属组。
      验证方法:
      目录:

       useradd  test1
       mkdir /tmp/abc;  chmod  2777  /tmp/abc
       su  -  test1
       cd  /tmp/abc;  touch  test1.txt
       mkdir  test1   //查看权限,继承了父目录去的SGID权限。
       su  -  root
       chmod  g-x  /tmp/abc
       su - test1
       cd  /tmp/abc;  touch  test2.txt
       mkdir test2   //查看权限,依然继承了父目录的SGID权限。

      二进制可执行文件:

       su  -  test1
       cd  /tmp;  cp  /bin/cat  .  ; chmod  g+s  ./cat
       echo  "This  is  a  test"  > test1.txt
       su - test2
       cd /tmp
       /bin/cat    test1.txt      //报权限不足
       /tmp/cat   test1.txt       //成功查看test1.txt
       su  -  test1
       chmod  g-x  /tmp/cat
       su  - test2
       /tmp/cat   test1.txt        //报权限不足。

  
 普通文件的SUID和SGID的作用:
       对于上例中,cat命令是任何普通用户都可以执行的命令,它默认是没有SUID位的,那UNIX的内核是根据什么来
 确定一个进程对资源的访问权限的呢?对,是这个进程的运行用户的(有效)ID,包括 UID 和 GID。
 用户可以用id命令来查到自己的或其他用户的user id和group id。 
 
 一个进程如果没有SUID或SGID位,则euid=uid egid=gid,分别是运行这个程序的用户的uid和gid。
  例:【如上测试的例子】
  

 -rwxr-xr-x 1 root root 25216 Jul 13  2009 /bin/cat
   test1: UID=500 GID=600
   test2: UID=501 GID=601

    test2 运行/bin/cat /tmp/test1.txt 时, euid=uid=501, egid=uid=601;
   内核根据这些值来判断进程对资源访问的限制,虽然/bin/cat的属主和属组是root,
   但实际运行/bin/cat的用户是test2,与root用户没有一点关系.因此test2查看test1
   的私有文件test1.txt时就失败了。
    
 若一个若程序设置了SUID或SGID,则euid和egid将变成被运行程序的所有者的uid和gid
  例:
  

 -rwxr-sr-x 1 test1 test1 25216 Jul 13  2009 /tmp/cat

   test2 运行 /tmp/cat /tmp/test1.txt 时, euid=500, egid=600, 而 uid=501, gid=601
   因此,test2 就成功的读出了test1的私有文件test1.txt的文件内容。

 3.sticky (t) 粘贴位 冒险位
  作用:任何用户在拥有t权限的目录下创建的文件,只能自己,目录所有者和root能删除外,其他人无权删除
  仅适合作用于目录,文件也可添加但不会有任何作用。
  chmod o+t dir/  
     验证方法:

      useradd  test1
      useradd  test2
      useradd  abc
      mkdir  /test ;  chmod 777  /test
      su - abc
      cd  /test ;  mkdir  abcdir
      chmod  7777  abcdir   //给目录abcdir添加SUID,SGID,sticky权限。
      su - test1
      cd  /test/abcdir;  touch  test1.txt;  mkdir test1;  chmod 777  test*
      su - test2
      cd  /test/abcdir; rm -rf  test*    //将失败。
      su  -  abc
      cd  /test/abcdir;  rm  -rf  test*    //成功。

 

基础命令

 $ chmod [-cvRf] 模式[,模式]... 文件...
   # 更改文件的权限
     # -c         同-v,但只在有更改时才显示结果
     # -f         去除大部份的错误信息
     # -R         递归操作
     # -v         为处理的所有文件显示诊断信息
     # --reference=参考文件     使用指定参考文件的模式,而非自行指定权限模式
     # --no-preserve-root      不特殊对待根目录(默认)
     # --preserve-root         禁止对根目录进行递归操作
     每种 MODE 都应属于这类形式"[ugoa]*([-+=]([rwxXst]*|[ugo]))+"。
 $ chown [-cvRfh] --reference=RFILE|[OWNER][:[GROUP]] file...
  # 改变文件所有者和所属组
    # -c             同-v,但只在有更改时才显示结果
    # -v             为处理的所有文件显示诊断信息
    # -f             去除大部份的错误信息
    # -R             递归操作
    # -h             改变符号链接本身而不是其所指向文件的属性。
    # --dereference         改变符号链接所指向的文件,而不是符号链接本身。
    # --from=CURRENT_OWNER:CURRENT_GROUP
                           只有当文件属性和该模式匹配,才修改文件属性。
    # --no-preserve-root   不特殊对待根目录(默认)
    # --preserve-root      禁止对根目录进行递归操作
    # --reference=参考文件  使用参考文件的属性,而不用指定参数来设置。
$ chgrp [选项]... 用户组 文件...
# --reference           则将每个文件的所属组设置为与指定参考文件相同。    
# --dereference         影响符号链接所指示的对象,而非符号链接本身(默认值)    
# -h                    会影响符号链接本身,而非符号链接所指示的目的地    
# --no-preserve-root    不特殊对待"/"(默认值)    
# --preserve-root       不允许在"/"上递归操作    
# --reference=RFILE     使用参考文件的所属组,而非指定值    
# -f         去除大部份错误信息    
# -R         递归处理所有的文件及子目录    
# -v         为处理的所有文件显示诊断信息    
# -c         类似 -v,但只在有更改时才显示结果
 以下选项是在指定了 -R 选项时被用于设置如何穿越目录结构体系。 如果您指定了多于一个选项,那么只有最后一个会生效。
   -H         如果命令行参数是一个通到目录的符号链接,则遍历符号链接 
   -L         遍历每一个遇到的通到目录的符号链接
   -P         不遍历任何符号链接(默认)

文件访问的其他权限
    隐藏权限

 chattr  和  lsattr
  chattr [-|+|=] Following Options
     a:只能增加数据,不能删除数据,不能移动文件;
     i:不能被删除/改名/设置链接/不可新增和写入。
     u:删除时不实际删除;
     s:删除文件时,彻底删除。
     d:当执行dump(备份)程序时,设置d属性可使该文件(或目录)具有转储功能。
     A:禁止修改AccessTime属性; 
     S:写入时直接sync到磁盘;

  ACL
  facl(文件访问控制列表)

 使用ACL的前提:    
 1. mount   ----->  先查看分区是否支持ACL, 默认 根分区 是支持 ACL的。
     例:mount -o remount,acl  /dev/sda2  //若不支持ACL,则可重新挂载/dev/sda2的分区,并让其支持ACL    
 2. getfacl 和 setfacl          
 格式:setfacl  [-mxbd]  { [u  |  g  | m]:[user | group  | umask ] :[rwx] }      
 查看:
    getfacl aa.txt   //查询文件访问控制列表内容      
 设置:
    setfacl -m u:robin:rw aa.txt     //设置用户访问控制 u:针对用户设置:[ u :用户列表:rwx]
    setfacl -m g:looking:rw aa.txt  //设置组的访问控制 g: 针对群组设置:[ g :群组名: rwx]
    setfacl -m o:rwx aa.txt       //设置其他人 
    setfacl -m m:r aa.txt      //设置掩码值,任何人权限不可超过掩码值 m :                 针对默认权限设置:[  m :rwx]
      删除:
          setfacl -x u:robin aa.txt
          setfacl -x g:looking aa.txt 
      移除所有访问控制设置 
          setfacl -b aa.txt 
      设置递归继承robin用户权限,这个用户所建立目录和文件会继承robin设置的默认权限 
          setfacl -m d:u:robin:rwx test/
          setfacl -m d:g:looking:rwx test/ 
          setfacl -m d:o:rwx test/

               

  

 

 

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

(0)
Wn1mWn1m
上一篇 2015-09-14
下一篇 2015-09-14

相关推荐

  • 配额-and-RAID

    配置配额系统 控制单个用户,或组在某磁盘上所能占的最大空间大小 配额是基于磁盘分区的,不基于文件 如何基于软件控制配额:          1、设置分区挂载选项          &nbsp…

    Linux干货 2016-08-29
  • Linux系统程序包的管理-Yum及编译安装

          Yum 是通过分析RPM的标头数据后,根据各软件的依赖关系制作出有依赖关系时的的解决方案,然后可以自动处理软件的依赖性问题,以解决软件安装或移除与升级的问题。       由于发行版必须要先释放软件,然后将软件放置于yum服务器上面,以提供用户端用来安装与升…

    2017-05-02
  • Kickstart+PXE自动部署CentOS6.6

        生产环境中对于部署大量的相同系统的服务器,如果逐台安装操作系统的话是非常浪费时间的工作,还好CentOS提供了无人值守安装系统的功能,下面就详细介绍一下配置步骤。 一、配置本机的yum源     因为需要安装一些软件来达到我们的目的,所以最好先把yum源配置好。 &nbs…

    Linux干货 2015-05-12
  • MySQL 多实例详解

    目录 一、基本概念 1、MySQL多实例        就是在一台机器上面开启多个不同的端口,运行多个MySQL服务进程。这些MySQL多实例公用一套安装程序,使用不同的(也可以是相同的)配置文件,启动程序,数据文件。在提供服务时候,多实例MySQL在逻辑上看来是各自独立的,多个实例的自身是根据配置…

    Linux干货 2015-09-23
  • keepalive

    HA Cluster: 集群类型:LB(lvs/nginx(http/upstream, stream/upstream))、HA、HP SPoF: Single Point of Failure 系统可用性的公式:A=MTBF/(MTBF+MTTR)(0,1), 95%几个9(指标): 99%, …, 99.999%,99.9999%;99%:…

    Linux干货 2017-05-22
  • 105-MHA

    一.MHA简介 1.1.简介         MHA(Master HA ) 是一款开源的 MySQL高可用程序,它为MYSQL 主从复制架构提供了automating master failover 主节点自动迁移功能.MHA在监控到master节点故障时候,会自动提升拥有的数据最近进于主节点的其他从节点为主节点,

    2016-11-27

评论列表(1条)

  • stanley
    stanley 2015-09-14 09:37

    文章伊始以为是乱码呢