zoukankan      html  css  js  c++  java
  • 13 文件特殊权限位于文件的访问控制列表

      在上一节中,我们回顾了Linux下文件的相关属性,其中包括权限内容。而文件的权限除了属主属组和其他用户的三位rwx外,还有一位特殊权限。

      同时,对于文件访问也有更加细致的控制,也就是通过访问控制列表的方式来进行限制。

      这一节,我们就来了解这两个内容。

    文件特殊权限位

      当我们通过chmod修改文件权限的时候,后面一般加上 644 或者 755 等这样代表权限的数值。其实,这里我们就默认忽略了特殊权限位,实际上 644 应该为 0644,而前面的  0 就代表了三位特殊权限位,他们分别是 SUID、SGID和Sticky。

    SUID

      一般在用户去运行文件的时候,使用的是当前用户的权限,比如user1用户在运行 ls 命令的时候,使用的就是文件 /bin/ls 的 other 用户的权限。

      如果将 /bin/ls 文件的SUID权限置位为1,则在user1用户使用 /bin/ls 命令的时候,其权限就会做出临时调整,将其属主的临时修改为 root 来执行这个命令。

      所以SUID置位时,在运行某程序的时候,相应进程的属主是程序文件自身的属主,而不是启动者的属主。

      配置:chmod u+s FILE  #如果该文件本身就具有执行权限,SUID就会显示为s,否则显示为S;

           chmod u-s FILE  #删除掉SUID的特殊权限;

        如下图:DataWarning.sh具有执行权限,则SUID位置位为s,同时,文件JudgeFile1.sh没有执行权限,SUID位置位为S;

    SGID 

      运行程序的时候,相应进程的属组是程序文件自身的属组,而不是启动该程序用户的属组权限;

      配置:chmod g+s FILE

         chmod g-s FILE

      同样的,如果属组权限有执行权限,则显示为s,如果没有执行权限,则显示为S。

    Sticky

      粘贴位,在一个公共目录下,每个用户都可以创建文件,都可以删除自己所创建的文件,但是不能删除别人的文件,而 /tmp 目录默认就是具有这个权限的目录;

      配置:chmod o+t DIR

         chmod o-t DIR

      同样的,如果other权限上拥有执行权限就显示为t,如果没有执行权限就显示为T;

      SUID和SGID,以及Sticky位三位权限加起来就是我们所说的特殊权限位,如果用二进制表示则为:

    000 无特殊权限
    001 拥有sticky权限
    010 拥有SGID权限
    011 拥有sticky+SGID权限
    100 拥有SUID权限
    101 拥有SUID+sticky权限
    110 拥有SUID+SGID权限
    111 拥有SUIG+SGID+sticky权限

      这里,如果我们想通过8进制数字添加相应的权限,则在原本权限前面去写这些特殊权限位即可,例如:chmod 7755 /path/somepath  #给somepath文件添加了SUID+SGID+sticky权限;

      添加遮罩码,则和普通权限相同。例如:umask 0022;

    文件的访问控制列表

      通过特殊权限位,我们可以调用文件的属主和属组的权限;同时,通过文件的访问控制列表,我们可以限制那些用户能够访问该文件,那些用户不能访问该文件。这样进一步控制文件的访问权限,提高文件的安全性。

      例如,tom用户创建一个文件file1,则file1的属主和属组都是tom,当jerry用户去访问file1的时候,他就是用的是other权限;这样就会存在一个问题,为了让jerry用户访问file1,则tom需要将file1的other权限改为rw权限,此时,其他的用户也能通过other权限访问到该文件了。

      所以,这时候,我们需要指定只有jerry能够访问这个file1文件的话,就需要使用文件的访问控制列表;

      配置命令:setfacl和getfacl

        setfacl

          -m  设定facl

            u:user:prem  #给属主添加用户权限

            g:group:prem  #给属组添加用户权限

          -x  取消facl

            u:user    #取消属主的用户权限

            g:group    #取消属组的用户权限

        例如:setfacl -m u:hadoop:rw /etc/inittab  #指定hadoop用户在访问/etc/inittab文件的时候,拥有rw权限;

             setfacl -m g:hadoop:rw /etc/inittab

             setfacl -x g:hadoop    #取消用户组hadoop的权限;

        getfacl

          这个命令就是用来查看setfacl的配置情况;

  • 相关阅读:
    UIWindow与UIView
    UIView与CALayer 区别
    setter getter 方法
    KVC、KVO 理解
    c语言实现单链表
    浅谈C的应用与常见error
    POJ 3683 Priest John's Busiest Day(2-SAT+方案输出)
    Google Code Jam 2008 Round 1A C Numbers(矩阵快速幂+化简方程,好题)
    POJ 3686 The Windy's(思维+费用流好题)
    POJ 2686 Traveling by Stagecoach(状压二维SPFA)
  • 原文地址:https://www.cnblogs.com/BurnovBlog/p/10417703.html
Copyright © 2011-2022 走看看