Burnov

导航

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的配置情况;

 

posted on 2019-02-22 12:36  Burnov  阅读(205)  评论(0编辑  收藏  举报