Linux系统中文件权限(特殊权限)的相关认识

  1. 文件属性

    在linux系统中一切皆文件,所有的数据都是以文件的形式存储在系统中,我们可以通过ls命令可以查看文件的相关属性,如下图:

            

blob.png

 

                     图1-1 文件权限及属性


   从上图中,可以看到该boot文件权限是r-xr-xr-x(d表示该文件是一个目录),在linux系统中对文件进行操作的一共三类对象,分别是:

    owner 所属主: 即创建该文件的人     u

    group 所属组: 即文件所属群组      g  

    other 其他人: 即属主和属组之外的人  o

每个文件对每类用户都定义了三种权限:

   Readable:可读    文件-可以获取文件的内容   目录-可以使用ls命令查看文件列表     r

   Writable:可写    文件-可以对文件进行修改   目录-可以在目录中创建和删除文件     w

   Excutable:可执行  文件-可以对文件执行操作   目录-可以ls查看文件列表,cd进入目录  x

           注:X表示只给目录x权限,不给文件x执行权限

              blob.png

                        图1-2  X权限

  

  八进制下权限的表现形式:

     blob.png

                        图1-3 八进制下的权限表现形式


2.文件权限及属性修改命令

  2.1 chmod 

     改变文件权限

blob.png

                    图2-1 chmod帮助手册

  从帮助文档中,可以获取chmod命令的相关信息,它语法格式有如下几种:

    chmod [OPTION]…MODE[,MODE]…FILE…

    chmod [OPTION]…OCTAL-MODE FILE…

    chmod [OPTION]…–REFERENCE=RFILE FILE… 

       -R 递归修改权限

  修改一类用户的所有权限:

    u=  g=  o=  ug=  a=  u= ,g=

  修改某类用户一位或多位权限

    u+  g+  o+  u-  g-  o-  a+  a-

   blob.png 

            图2-2 chmod命令使用

  2.2 chown

    修改文件的属主和属组 blob.png

                         图2-3 chown帮助手册

   chown改变文件所有者和所属组,语法格式:

      chown [option]…[owner][:[group]] file… 

      chown [option]…reference=rfile file…

         -R:递归

    blob.png

             图2-4 chown命令使用


3.文件系统上的特殊权限

  a.任何一个可执行程序文件能不能执行为进程,是由它的发起者是否有执行权限决定的

  b.启动为进程后,进程的属组为发起者,属组为发起者所属的组

  c.进程访问文件时的权限,取决于进程的发起者

  3.1 SUID

    blob.png

                 图3-1 SUID文件

    SUID只对二进制文件可执行程序有效

   SUID设置在目录上是无效的

    chmod u+s file…

    chmod u-s file…


  3.2 SGID

   可执行文件上的SGID权限

    启动为进程后,其进程的属主为原程序的属组

    blob.png

                  图3-2 SGID文件  

    chmod g+s file…

    chmod g-d file…

    

    目录上的SGID权限

    默认情况下,用户创建文件,其属组为此用户所属的主组,一旦某目录被设置为SGID,则对此目录有些的权限的用户在此目录创建的文件所属的组为此目录的属组

    通常用于创建一个协作目录 

    blob.png

             图3-3 SGID目录

    chmod g+s dir…

   chmod g-s dir… 


  3.3 Sticky位

   当一个用户对一个目录具有写权限时,就可以对目录中的任何文件执行删除操作,而不需要看该文件的权限。即便该文件由他人创建,并且有严格的读写权限,只要该文件是创建在该用户拥有读写权限的目录下,那么该用户就可以直接对文件进行删除操作,这样就不利于数据的安全性,完整性…所以,就有了sticky位,它的作用就是用来约束用户的行为,在有sticky位的目录中创建文件,那么只有文件所有者和root才能对文件进行删除操作,即使,他人有对该目录的读写执行权限,也无法对非本人创建的文件进行删除。

         blob.png

                       图3-4 sticky位目录及操作

   从上图也可看出,普通用户想要删除不是由他创建的目录时,显示不允许的操作,即使该用户对该目录有读写执行的权限。

   sticky位设置在文件上无意义

    chmod o+t dir…

    chmod o-t dir…

 

  3.4 SUID SGID STICKY

     SUID:user 占据属主的执行权限位  4

       s:属主具有x权限

       S:属主没有x权限

     SGID:group 占据数组的执行权限位  2

       s:group拥有x权限

       S:group没有x权限

     STICKY:other 占据other的执行权限位 1

       t:other拥有x权限

       T:other没有执行权限

  3.5 文件特定属性设定

     chattr

blob.png

                      图3-5 chattr帮助手册

    chattr:改变linux文件系统中文件属性

    +i:当为某个文件设置了i属性,那么该文件就不能被删除或者重命名,也不能创建链接,也不能将任何数据写入到该文件中,只有超级管理员和文件的拥有者才能设置或清除这个属性

    +a:当给某个文件设定了a属性,那就表明只能往该文件写入数据,其他操作均不能实现

    lsattr:可以查看文件的这些特定属性

blob.png

            图3-6 chattr命令操作

4.访问控制列表ACL

  ACL: Access Control List 访问控制列表(实现灵活的权限管理)

  作用: 除了文件的所有者,所属组和其他人,可以对更多的用户进行权限设置

  ACL生效顺序:所有者 自定义用户 自定义组 其他人

 4.1 setfacl

blob.png

                    图4-1 setfacl帮助手册

   setfacl:设置文件访问控制权限列表

      setfacl -m u:user:rwx file|directory   对指定用户设置rwx的acl权限

      setfacl -m g:group:rwx fiel|directory  对指定的组设置rwx的acl权限

      setfacl -Rm g:group:rwX directory     对指定的组设置rwx递归目录的acl权限     

      setfacl -x u:user file | directory     删除指定用户的acl权限

      setfacl -X facl.acl directory        删除指定的acl权限文件

      setfacl -k dir                  删除默认的acl权限

      setfacl -b file                 清除所有的acl权限 

 

 4.2 getfacl

blob.png

                      图4-2 getfacl帮助手册

   getfacl:获取文件访问控制列表信息

      getfacl file | directory   查看文件或目录的acl权限  

    blob.png

                 图4-3 getfacl命令使用

   备份和恢复ACL

      getfacl -R /tmp/dir1 > acl.txt

      setfacl -R -b /tmp/dir1

      setfacl -R –set-file=acl.txt /tmp/dir1 

      getfacl -R /tmp/dir1

5.umask和acl mask的联系与区别

  5.1 umask

    当我们登录系统后创建文件总是有一个默认的权限,普通用户创建文件默认权限664,创建文件夹默认权限是775,root用户默认创建文件权限644,创建的目录默认权限755.这是由umask来限定的,它的参数设置在/etc/profile中,我们可以在/etc/bashrc或家目录下的.bashrc进行自定义的设置。 

  blob.png

             图5-1 umask参数      

root用户的umask码为022,普通用户的umask码为002.

blob.png

          图5-2 root用户

blob.png

          图5-3 普通用户

   

  5.2 acl mask

     ACL中的mask只影响出所有者和other的之外的人和组的最大权限,mask需要与用户的权限进行逻辑与运算后,才能变成有效的权限。也就是用户或组的设置必须存在于mask限定的范围内才会生效,即当给予了用户或者组rwx的权限,但是mask码为rw,那么x的权限就不会生效,有限的就只是rw的权限,有限权限就是不能大于mask码的权限,可以小于或者等于mask码的权限。

    blob.png

                    图5-4 ACL中的mask码

    ACL中的mask码规定了用户或组的默认最大权限,超过这个权限的权限会变成无效的权限,即便给了额外的权限,该权限也无法进行操作,文件中的umask码则是用文件666(目录777)-umask,与umask位相同的权限就会被屏蔽掉,从而得出最终的权限。

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