基础Linux命令 --------- 文件权限管理

1.文件权限存在的意义是什么?

        系统最底层安全设定方法之一,保证文件可以被用户做相应操作

  (1)权限对于文件

             r(read):是否可以查看、读取文件中的内容   --->cat file

            w(write):是否可以编辑、修改文件的内容

            x(execute):是否可以通过文件名称调用文件内记录的程序(即该文件是否有被系统执行的权限)

 

   (2)权限对于目录

             r(read):是否可以查看目录中有什么子文件或者子目录 ---> ls dir

            w(modify contents of directory):是否可以对目录中子目录或子文件的元数据进行更改 ;新建新的文件和目录;删除已                                                                           经存在的文件和目录;将已经存在的文件和目录重命名(不论该文件的权限为何);                                                                              转移该目录内的文件、目录位置。

            x(access directory):是否可以进入目录,进行创建,删除文件

           "注意":对于目录,只有进入目录后,才能对目录进行写入的操作,即只有在x生效时,w才能生效;

                           若只有x权限,则只能进入到路径下,而不能进行修改文件元数据,创建或删除的操作;

                           切换用户后,目标用户可以删除自己创建的文件,但是要根据权限决定能否删除原用户创建的文件           

                     

2.文件权限的查看

    (1)ls   -l     file          ##显示文件的属性

             基础Linux命令 --------- 文件权限管理

    (2)ls   -l     dir           ##显示目录中的内容的属性

             基础Linux命令 --------- 文件权限管理

    (3)ls   -ld   dir           ##显示目录本身的属性

             基础Linux命令 --------- 文件权限管理

    (4)ll       file               ##相当于ls  -l   file

    (5)ll -   d     dir          ##相当于ls   -ld     dir

    (6)ls    -lR   dir          ##递归显示目录下的所有内容的属性

               基础Linux命令 --------- 文件权限管理

 

3.文件权限的读取

        "ls    -l   "显示的文件或者目录的属性格式如下:

                      -  |rw-rw-r--| 1 |kiosk | kiosk | 0 | Jul 21 09:18 | file

                    [1]      [2]       [3]   [4]        [5]    [6]        [7]              [8]

         [1]表示文件的类型

                 -                ##空文件,或者文本

                 d              ##目录

                  l              ##软链接

                                                     创建文件或目录软连接 ln -s 源文件名 目标文件名

                                                     创建文件的硬链接  ln 源文件名  目标文件名

                  s              ##socket 套接字

                  b              ##block 块设备

                  c              ##字符设备

        [2]表示文件的权限

                 rw-|rw-|r--

            该位置总共包含九个字节。前三个字节表示 文件拥有者对文件的权限[u];中间三个字节表示文件所有组对文件的权限[g];最后三个字节表示 其他人对文件的权限[o]。

            注意:文件拥有着(即是谁创建的这个文件)和文件所有组(即文件属于的组)没有直接的关系

        [3]位置对文件来说表示文件硬链接个数(文件内容被系统记录的次数),对目录而言表示目录中子目录的个数(每个子目录中一定包含 . 和 .. 两个子目录)

        [4]表示文件的所有者

        [5]表示文件所有组

        [6]对文件来说表示文件大小,空文件的大小为0 ;对目录而言表示目录中子文件元数据(matedate可以理解为文件的属性)大小 ,空目录的大小为6个字节

        [7]表示文件的内容被修改的时间

        [8]是文件的名称

 

4.如何改变文件的所有人和所有组?

        以下演示操作均在 watch -n 1 "ls -lR /mnt"下进行

       (1)更改文件或者目录的的所有人

               <1> chown    username     file|dir   

         例子:   将westos文件的所有人改为student      

              基础Linux命令 --------- 文件权限管理

              <2>chown   -R      username        dir 

                     改变该目录和该目录中的所有内容的所有者

       (2)更改文件或者目录的所有组

              <1> chgrp    group    file|dir

         例子:将westos的所有组改成student 

               基础Linux命令 --------- 文件权限管理

                <2> chgrp     -R      group     dir        ##   改变该目录和该目录中的所有内容的所有组

        (3)同时更改目录或者文件的所有人和所有组

                  <1>chown    user.group     file|dir

                     基础Linux命令 --------- 文件权限管理

                   <2>chown   -R   user.group    dir      ##递归更改目录的所有者和所有组

                      基础Linux命令 --------- 文件权限管理

 

5.如何改变文件的权限?

    (1)更改方式

                  chmod     <u|g|o><+|->=<r|w|x>     file|dir

                  chmod    <u|g|o><+|->=<数字>      file|dir

                                 r     w    x     -  对应数字 4   2    1   0

           例子:

                  基础Linux命令 --------- 文件权限管理

      (2)文件的可读,可写,可执行权限设置

                   <1>文件的不可读,不可写,不可执行

                      基础Linux命令 --------- 文件权限管理

                    <2>文件的可读,可写

                      基础Linux命令 --------- 文件权限管理

                    <3>文件的可读,可写,可执行

                      基础Linux命令 --------- 文件权限管理

      (3) 目录的可读,可写,可执行权限设置

                <1>目录的不可读,不可写

                     基础Linux命令 --------- 文件权限管理

                <2>目录的只可读

                    基础Linux命令 --------- 文件权限管理

                <3>目录的可读,可写,可执行

                   基础Linux命令 --------- 文件权限管理

6.如何更改系统建立文件时默认保留的权力(即预留配置)?

        (1)临时设定系统预留权限

                  umask  077 

                  注意:不同的文件系统预留的配置不同,在linux系统中,目录预留022,文件预留022+111

         (2)永久更改umask

                   <1>第一步,更改系统配置文件 /etc/profile

                  基础Linux命令 --------- 文件权限管理 

                  <2>.第二步,更改系统配置文件 /etc/bashrc

                  基础Linux命令 --------- 文件权限管理

                   <3>更新/etc/profile 和/etc/bashrc ,让更改立即生效

                           source /etc/profile 

                           source /etc/bashrc

                   基础Linux命令 --------- 文件权限管理

                     注意:若不更新这两个配置文件,则系统预留权限依旧不更改。

 

7.特殊权限的设置

     (1)sticky 粘制位

                     <1>作用:

                                   只针对目录生效,当一个目录上有sticky权限时,在这个目录中的文件只能被文件的所有者删除

 

                      <2>命令执行

                                              chmod o+t dir

                                              chmod 1xxx dir

                      例子:将/mnt/linux目录权限改成sticky,此时切换到student用户,可以读取/mnt/linux下的内容,也可以在该目录下新建                                    文件,但是不能删除目录下的文件

                           基础Linux命令 --------- 文件权限管理

            (2)sgid 强制位

                           <1>作用

                                          对文件:只针对与二进制可执行文件,  当文件上有sgid时任何人执行此文件产成的进程都属于文件的的组

                                          对目录:当目录的组权限上有sgid权限时任何人在此目录中建立的文件都属于目录的所有组

 

                          <2>设定方式

                                            chmod g+s  file|dir

                                            chmod 2xxx file|dir

                           例子:将/mnt/linux目录设定为 g+s (sgid)权限,在student用户下,在此目录下创建的文件都属于这个目录的所有                                           组 root组

                                基础Linux命令 --------- 文件权限管理

           (3)suid 冒险位

                         <1>作用:

                                             只针对与2进制可执行文件,当文件上有suid时任何人执行这个文件中记的程序产生的进程都属于文件                                                  的所有人

                         <2>设定方式

                                         chmod u+s  file

                                         chmod 4xxx file


8.acl权限列表

          注意:以下截图均是在watch -n 1 "ls  -lR   /mnt/westos;getfacl  /mnt/westos"监控下

    (1)作用

                        让特定的用户对特定的文件拥有特定权限

    (2)acl列表查看                 

                    查看acl开启的文件的权限

                      getfacl           file

      (3)acl列表的管理

                        -rw-rwxr--+ 1 root root 0 Jul 21 15:45 file

                                        ^

                     注意:   acl开启"开启后,权限变成列表中的权限,默认权限不生效"

                    <1> 设定username对file拥有rwx权限(可以用数字设定)      

                                  setfacl  -m   u:username:rwx     file 

                     <2>设定group组成员对file拥有rwx权限

                                  setfacl  -m    g:group:rwx       file 

                         例子:设定student用户和student组对/mnt/westos文件有"7"和“5”的权限

                                   基础Linux命令 --------- 文件权限管理

                    <3>从acl列表中删除username

                                 setfacl  -x u:username file 

                     <4>从acl列表中删除groupname

                                 setfacl  -x g:groupname file    

                         例子:删除student用户和student组在acl列表中的特殊权限

                                   基础Linux命令 --------- 文件权限管理

                       <5>关闭file上的acl列表

                                    setfacl   -b      file 

 

      (4)mask值

                      <1> 作用:

                                 在权限列表中mask标示能生效的权力值

 

                      <2>当用chmod减小开启acl的文件权限时,mask值会发生改变,此时会产生无效的用户权限

                               例如: chmod g-rwx  /mnt/westos

                                     基础Linux命令 --------- 文件权限管理

                      <3>恢复mask值

                                     setfacl -m m:rw westos

                                      基础Linux命令 --------- 文件权限管理

          (5)acl的默认权限

                          <1>设定方式

                                     setfacl  -m  d:u:username:权限   目录名称

                              例子:setfacl -m d:u:student:rwx /mnt/test

                                 基础Linux命令 --------- 文件权限管理

                         注意: acl默认权限只针对目录设定

                                      "acl权限只针对设定完成之后新建立的目录生效,而已经存在的是不会继承默认权限"

                     <2>去掉默认权限:setfacl   -k    /mnt/test

                            "注意:"只能去掉这一层目录的默认,对于新建的继承默认权限的目录不能

                                        基础Linux命令 --------- 文件权限管理

                                        基础Linux命令 --------- 文件权限管理