linux运维开发之路(五)— 文件权限篇

时间:2024-05-22 20:49:07

一、 文件权限存在的意义
         系统最底层安全设定的方法之一,保证文件可以被可用的用户相应操作

二、文件权限的读取
        ls  -l  file      ## 查看文件

        linux运维开发之路(五)— 文件权限篇
        ls  -ld  dir    ## 查看目录

        linux运维开发之路(五)— 文件权限篇
        ll  file(-d dir) 

三、文件权限的读取
       -  rw-rw-r--  1  kiosk  kiosk  33  Jul 21 09:21  file
      [1]    [2]       [3]   [4]      [5]      [6]          [7]            [8]

 注:
  [1]: -  文件的类型
        -       ## 空文件,或者文本
        d      ## 目录
        l       ## 软连接
        s      ## socket套接字
        b      ## block块设备
        c      ## 字符设备
  [2]: rw- rw- r-- 文件权限
        [1]  [2]  [3]
             [1]: [u] 文件拥有者对文件能做什么操作
             [2]: [g] 文件所有组对文件所能做什么操作
             [3]: [o] 文件其他人对文件所能做什么操作
  [3]: 对文件:文件硬连接个数(文件被记录的次数)
        对目录:目录中子目录的个数
  [4]: 文件的所有人
  [5]: 文件的所有组
  [6]: 对文件:文件的大小
        对目录:目录中子文件元数据(可以理解为文件的属性)的大小
  [7]: 文件的时间
  [8]: 文件名称

四、如何改变文件的所有人和所有组
      chown: 改变文件所有人
      chgrp: 改变文件所有组
      chown -R : 同时改变所有人和所有组
      例:    chown  student  /mnt/file1   ## 将file1的所有人改为student

               linux运维开发之路(五)— 文件权限篇
               chgrp  westos  /mnt/file2    ## 将file2的所有组改为westos

               linux运维开发之路(五)— 文件权限篇
               chown -R  student.westos  /mnt/westos/  ## 将westos目录以及其下文件的所有人改为student,所有组改为westos。

              建立westos目录,并在其下建立文件,查看所有人和所有组都是root。

              linux运维开发之路(五)— 文件权限篇

              更改所有人和所有组

              linux运维开发之路(五)— 文件权限篇

五、如何改变文件的权限
      1. 对权限的理解
           r:  对文件:是否可以查看文件中的内容
               对目录:是否可以查看目录中有什么子文件或者子目录
          w:  对文件:是否可以改变文件里面记录的字符
                对目录:是否可以对目录或者子目录或子文件的元数据进行更改
           x:  对文件:是否可以通过文件名称调用文件内记录的程序
                对目录:是否可以进入目录
      2.更改方式
          chmod  <u|g|o>  <+|-|=>  <r|w|x>  file | dir

          更改之前首先建立文件file{1..5},查看文件属性

          linux运维开发之路(五)— 文件权限篇

          对以上建立的文件进行更改权限
          例:chmod  u+x   file1

                  linux运维开发之路(五)— 文件权限篇
                  chmod  g-r   file2

                  linux运维开发之路(五)— 文件权限篇
                  chmod  ugo-rwx   file3

                 linux运维开发之路(五)— 文件权限篇
                  chmod  ug=w   file4

                  linux运维开发之路(五)— 文件权限篇
                  chmod  -r   file5

                 linux运维开发之路(五)— 文件权限篇
           上面的写法有一些繁杂,为了简化更改方式,rwx对应:421,该位上有这一权限则为1,否则为0,即可简化为用数字来设定权限。
    例:上面对file1的修改u+x,即在原先建立文件默认权限上再对所有人赋予w的权限

            rwx | r-- | r-- : 744      chmod  744  file1  即可完成对文件file1权限的修改,和上面使用u+x得到的结果相同。

            linux运维开发之路(五)— 文件权限篇  

            rwx | rwx | rwx : 777      chmod  777  file1  即可完成对文件file1权限的修改

            linux运维开发之路(五)— 文件权限篇

六、umask
        umask: 系统建立文件时默认保留的权力
        临时更改:
             umask 077  ## 临时设定系统预留权力为077

              未修改之前umask之前,umask值为022,777-022-111=644 建立的文件默认权限为644

              linux运维开发之路(五)— 文件权限篇

              修改umask为077之后,再次建立文件,可看到默认权限已经为600,即777-077-111=600(不存在负数之说)

              linux运维开发之路(五)— 文件权限篇
        永久更改:需要修改/etc下的profile和bashrc这两个配置文件
             vim  /etc/profile
             vim  /etc/bashrc   

             linux运维开发之路(五)— 文件权限篇

             两个配置文件中都有这一部分,只需修改else语句里的umask即可,完成之后在运行下面两条命令,

             使配置文件的更改立即生效。
                    source  /etc/profile          ##  更改立即生效
                    source  /etc/bashrc  
 
七、特殊权限

       1.sticky      ## 粘滞位
           作用: 只针对目录生效,当一个目录上有sticky权限时,
                        在这个目录中的文件只能被文件的所有者删除
           设定方式: chmod  o+t   dir
                                chmod  1xxx   dir   (例xxx=777)

             第一步建立目录test,并在目录下建立文件file{1..3},查看文件权限

            linux运维开发之路(五)— 文件权限篇

             第二步设置目录及文件权限都为777

             linux运维开发之路(五)— 文件权限篇

             第三步在设置粘滞位之前切换到student用户,删除test目录下的文件file1,可以删除

            linux运维开发之路(五)— 文件权限篇

             第四步给test目录设置粘滞位,other的x变为了t,表示粘滞位设置成功。

             linux运维开发之路(五)— 文件权限篇

            第五步再次切换到student用户,删除test目录下的file2文件,显示操作不被允许,不能删除test目录下的file2,即验证了粘滞位的功能。

            linux运维开发之路(五)— 文件权限篇

          总结:粘滞位的设定应针对一些公共目录,多用户都可操作该目录下的文件,防止用户有意或无意的删除其他用户的文件。

       2.sgid       ## 强制位
           作用:
               对文件:  
                    只针对于二进制可执行文件,
                    当文件上有sgid,任何人执行此文件产生的进程都属于此文件组

                    首先ls查看/bin/bash,所有人和所有组都属于root

                   linux运维开发之路(五)— 文件权限篇

                     执行watch命令(1秒刷新一次的显示日期)

                    linux运维开发之路(五)— 文件权限篇

                     用ps命令查看进程,可看到watch进程的所有组属于root

                    linux运维开发之路(五)— 文件权限篇

                    修改/bin/watch的所有组为student,对/bin/watch设置sgid强制位,再次执行watch,使用ps查看进程可看到watch进程的组已经是student。

                    linux运维开发之路(五)— 文件权限篇
            对目录:
                当目录上有sgid权限时,任何人在此目录中建立的文件都属于目录的所有者
                设定方式:   chmod g+s file|dir
                                       chmod 2xxx file|dir

                  在根下的mnt下建立test目录,查看目录的所有者属于root

                  linux运维开发之路(五)— 文件权限篇

                  设定其他人对此目录可写的权限,进入student用户,在test目录下创建文件file1,查看目录的所有者为student

                  linux运维开发之路(五)— 文件权限篇

                  对目录test设定强制位sgid权限,查看目录属性,'s'已经表示设定成功

                  linux运维开发之路(五)— 文件权限篇

                  进入student用户,在test目录下建立文件file2,查看文件file2的所有组是root,而不是student。

                  linux运维开发之路(五)— 文件权限篇

           3.suid       ## 冒险位  (程序执行过程中权力的提升或下降)
                 只针对于二进制可执行文件,当文件上有suid的时候,任何人执行这个文件程序产生的进程都属于文件的所有人
                设定方式:   chmod  u+s  file
                                       chmod  4xxx  file

                  在对/bin/watch文件未设置冒险位之前,执行watch命令,查看进程watch属于watch文件的所有人root。

                 linux运维开发之路(五)— 文件权限篇
                 linux运维开发之路(五)— 文件权限篇  

                 修改/bin/watch文件的所有人为student,然后在对/bin/watch文件设置冒险位。

                 linux运维开发之路(五)— 文件权限篇

                 再次执行watch,使用ps命令查看watch进程,可看到现在进程的所有人是student,是/bin/watch文件的所有人,而不是root

                 linux运维开发之路(五)— 文件权限篇

      
八、acl权限列表
        1.作用:让特定的用户对特定的文件拥有特定权限

        2. acl列表查看
                -rw-rwxr--+ 1 root root ...
                               “+”: acl开启标志
                  getfacl file           ## 查看acl开启的文件的权限

                   linux运维开发之路(五)— 文件权限篇
                  # file: file                ## 文件名称
                  # owner: root         ## 文件拥有者
                  # group: root          ## 文件拥有组
                  user::rw-                 ## 文件拥有人的权限
                  user:student:rwx    ## 指定用户的权限
                  group::r--                ## 文件拥有组的权力
                  mask::rwx              ## 能生效的权力的最大阀值
                  other::r--                ## 其他人的权力
         3. acl列表的管理
               setfacl -m u:username:rwx file   ## 设定username对file拥有rwx权限

               首先超级用户下建立文件file,切换到普通用户student下,对这个文件进行写入操作,权限不够,操作时被拒绝的

               linux运维开发之路(五)— 文件权限篇

               使用acl权限,设定student对file拥有rwx权限,再次切换到普通用户student,对这个文件进行写入操作,可以看到现在写入成功。

               linux运维开发之路(五)— 文件权限篇

   
               setfacl  -m  g:groupname:rwx   file    ## 设定group组成员对file拥有rwx权限

               linux运维开发之路(五)— 文件权限篇

               setfacl -x  u:username  file               ## 从acl列表删除username,但“+”依然在

                linux运维开发之路(五)— 文件权限篇
               setfacl  -b  file    ## 删除acl权限列表

               linux运维开发之路(五)— 文件权限篇
         4.mask值
               在权限列表中mask标示能生效的权力值
               当用chmod减小开启acl的文件权限时mask值会发生改变
                          chmod  g-w  westos

              如果要恢复mask值
                     setfacl  -m  m:rw  westos
                     setfacl  -m  m:rw
       5.acl的默认权限设定
              acl默认权限只针对目录设定
              acl权限只针对设定完成之后新建立的文件或目录生效,而已经存在的文件是不会继承默认权限。
                  setfacl  -m  d:u:student:rwx  /mnt/westos

                   首先在/mnt下建立test目录,然后在test目录下建立wq目录和file文件爱你,进入student用户,在test目录下的wq目录下建立文件,并且对/mnt/test/file进行写入操作也显示权限不够,请求被拒绝。

                    linux运维开发之路(五)— 文件权限篇             

                   使用acl默认权限设定test目录,设定后在test目录下建立目录wq1和文件file1
                    linux运维开发之路(五)— 文件权限篇

                   进入student用户,首先对使用acl默认权限设定test目录前建立的目录和文件进行操作,结果是权限不够,

                   linux运维开发之路(五)— 文件权限篇                

                  然后对acl默认权限设定后在test目录下建立的目录和文件进行操作,操作是允许的。

                  linux运维开发之路(五)— 文件权限篇