Linux基础学习(四)

时间:2022-01-27 22:23:26

一、文件属性的查看

        ls -l filename 

        Linux基础学习(四)

        1 、“-” 文件类型,有以下几种

                    - 代表普通类型

                    d 代表目录

                    c 字符设备

                    s 套接字

                    p 管道

                    b 快设备

                    l 连接

        2、“rw-r--r--” 文件的读写权限
                     Linux基础学习(四)
                    *   所有人的权限 ,
                    $   所有组的权限
                    @ 其他人的权限
                    用户对文件或目录操作时优先匹配文件的所有人,再者为所有组,如果都不是,那么该用户对该
                    文件的操作属于其他人
                (1) r : 代表文件或目录是可读的。如果是文件, 可以查看文件里面的内容。如果是目录,即
                                看文件夹内部的 信息。
                  (2)   w : 代表文件或目录是可写的,如果是文件,即可以对文件的内容进行编辑,如果是目录,
                                  代表可以 删除文   件夹内的文件 或者 修改文件夹里面的文件的名称
                (3) x : 可执行。如果是文件,则代表文件中的二进制命令内容,可以被系统执行。如果是目录,
                                 则代表可以  进入到该目录里面。对于文件可执行的时候,是非常危险的。
                                Linux基础学习(四)
        3、 “1” 
                    对文件来讲,即文件内容被系统记录的次数
                    对目录来讲,即目录中文件属性的字节数。
        4、“root” : 代表文件的所有人
        5、 “root”: 代表文件的所有组
        7、 “Otc 1 05:03” :文件最后一次被修改的时间
        8、 “filename” : 文件的名字
   

二、文件所有人、所有组的管理

        1、chown  username  filename|directory
                更改文件或目录的所有人
                使用 watch -n 1 ‘ls -l /root/Desktop’进行监控                 
             Linux基础学习(四)
               可以看出该文件属于 root用户 root组,使用chown student filetest 将所人改为student
             Linux基础学习(四)
        2、chown username.groupname filename | directory
              更改所有组所有人
            使用 chown root.student filetest  将上面的文件的所有人改为root 所有组改为student
             Linux基础学习(四)

     3、chown -R username directory 

            更改目录本身及里面所有的文件的所有人

            使用chown -R student test  将test文件夹中及其中的所有文件的所有人更改为student。 

             Linux基础学习(四)                               Linux基础学习(四)

         4、chgrp -R username directory 

                更改目录本身及里面所有内容的所有组

                chgrp -R student test 将上面的目录及其中的所有的文件的所有组改为 student

            Linux基础学习(四)

三、对文件或目录权限的修改

(一)字符的方式修改文件或目录的权限

            chown [-R] <u|g|o><+|-|=><r|w|x> filename |directory

            1、chown u-w filename     #filename文件所有者去掉对文件的w权限

           Linux基础学习(四)

            如上:file1文件的student用户拥有读写权限,将其的写权限去掉

            Linux基础学习(四)

            2、 chmod g+w filename        #filename文件的所有组加上写权限

                如上面的 test/file1文件 对其执行 chmod g+w test/file1 结果如下

           Linux基础学习(四)

        3、chmod ugo-r filename     #filename文件的所有者、用户组、其他人都去掉对该文件的读

                                                                    #权利

            如上文件 /test/filename 执行chmod ugo -r test/file1    

           Linux基础学习(四)        4、chmod ugo+r,g-w file3 ##file3用户和组添还有其他人加r权限,组去掉w权限

            如上文件 test/file1 执行chmod ugo+r,g-w test/file1

            Linux基础学习(四)

        

    (二)数字方式修改文件权限

                在linux中文件的读写执行权限都有不同的数字对应,其对应值如下所示: r = 4 、w = 2 、x = 1。
        一个文件的权限为“rw-rw-r--”文件的权限数字表示方式为 664 
          所有者 :4+2+0=6
          所有组 :4+2+0=6
          其他人 :4+0+0 =4
                因此我们的权限有对应的唯一的数字
                7=rwx
                6=rw-
                5=r-x
                4=r--
                3=-wx
                2=-w-
                1=--x
                0=---
                我们在使用chmod 的时候就可以如此使用:
                chmod 777 filename    #将文件的权限设置为rwx-rwx-rwx
                chmod 640 filename    #将文件的权限设置为rw-r-----  

           Linux基础学习(四)

                存在一个如上图的文件 将其的权限使用数字修改的方式进行修改

              Linux基础学习(四)

           Linux基础学习(四)

(三)系统默认权限的设定

        从系统存在的角度来讲,开放的权利越大,系统的存在意义越高,但是从系统的安全角度来讲,开放的权利越少,系统的安全性越高,所以系统在设定新建文件或目录会去掉一些权限。

        系统权限的满值为777。umask 是系统在新建文件或目录时保留的权利大小(即系统给文件的权限则为777-umask,umask的值越大,系统创建的文件的权限越小)。

        umask                      #查看系统保留权限的默认值(未经过改动一般为022)

        umask  077              #将系统的保留权限值设置为077,但是此种方法只是临时设置,只在当前shell中有效

        Linux基础学习(四)

        如上图在两个不同的shell中我们设定了不同的文件系统的保留权限值

        我们可以使用下面的方式对文件的保留权限进行永久设置

        第一步:

                    vim  /etc/bashrc       ##设置shell的保留值

          Linux基础学习(四)

        如上图 我们将超级用户的 保留权限设置为077 则我们使用超级用户创建的文件将会拥有rwx------权限

        第二步:

                    vim  /etc/profile      ##设置系统的保留值

            Linux基础学习(四)

           如上图 我们将超级用户的 保留权限设置为077 则我们使用超级用户创建的文件将会拥有rwx------权限

           以上两个文件的umask 必须设定的一致

         第三步:

                    source /etc/bashrc

                    source /etc/profile

                    重新读取两个文件则设置开始生效

        Linux基础学习(四)

        如上图我们使用root用户新建的文件filetest 的权限为

        Linux基础学习(四)

         我们发现上面的file文件依旧没有可执行权限,但是文件夹有可执行权限。这是因为,系统为了安全会,无    论在任何时候新建文件,都会默认的将文件的可执行权限去掉。

四、文件的访问控制(acl列表)

(一)acl的定义

        acl = access control  它用来指定特殊用户对特殊文件有特殊权限。

        当我们使用 ls -l  directory命令的时候  我们就会获取directoy文件夹的所有属性列表和所有者、所有组

 等信息 ,"drwxrwx ---+",中的“+”就代表权限列表已经被激活,

        Linux基础学习(四)

         如上图我们看到 的是“.”,他不是权限列表,它代表权限列表未被激活。当“+”存在时,我们使用getfacl命令 来获取文件的访问控制列表(权限列表)

        使用方法 : getfacl          [参数]      filename|directory

                                                   -a                                        显示访问控制列表

                                                   -d                                        仅显示默认的访问控制列表

                                                   -c                                         不显示注释表头

                                                   -e                                        显示所有有效权限

                                                   -E                                         显示无效权限

                                                   -R                                         递归显示子目录

            Linux基础学习(四)  

            如上我们看到 test权限列表已经别激活,使用  getfacl  -a  filename|directory 查看权限列表。

            Linux基础学习(四)

            # file: test                 #文件名称
            # owner: root         #文件所有人
            # group: root         #文件所有组
            user::rwx                 #拥有者权限
            user:student:rwx             #特殊用户权限
            group::r-x                 #组权限
            mask::rwx                 #权限掩码
            other::r-x                 #其他*限

(二)设定acl列表

           setfacl -m <u|g>:<username|groupname>:权限 文件|目录

             #-m #设定
             #  u #用户

             #  g #组

        例如设定权限为550的test文件夹,拥有student用户的rwx权限。

        Linux基础学习(四)

        我们可以看到user:student:rwx 代表了特殊用户的权限,即student这个用户是属于文件的其他人,但是对

该文件拥有rwx权利,这个在ls -l命令中无法看出来

        当我们的权限列表中存在特殊用户权限或特殊用户组权限时候,我们使用命令ls -l看到的文件的权限是不正确的

       我么使用下面的命令删除列表中的特殊用户或特殊组的权限

        setfacl -x <u|g>:<username|groupname> 文件|目录

            Linux基础学习(四)

        我们可以看到该文件的student特殊用户权限已经被删除。

        setfacl -b 文件|目录      #关闭列表

(三)acl mask值

        1、mask        权限掩码 


          mask     权限掩码,一般用来对特组权限和殊权限进行限制的,用来表示能够赋予用户最大权限,当时用chmod改变文件普通权限时可能会被破坏,我们使用下面的命令行修复

           setfacl -m m:rwx  filename|directory               #对文件的读写权限进行限制。

            例如:

            第一步:

                    我们在桌面创建的test文件,它的默认权限为rwxr-xr-x,我们使用命令对其加上特殊权限:

            setfacl -m:u:student:rwx test

           Linux基础学习(四)

           注意:

                    我们在次使用ls -l 对test文件详细信息查看

            Linux基础学习(四)

                    在 “+”号出现的位置,原来是一个 “.” 正代表我们文件存在了权限列表,这个时候使用ls -l 查

            看文件的权限时有可能是错误的,我们要使用getfacl filename|directory,详细查看文件权限。

            第二步: 

                    使用setfacl -m m:r-- test   对文件的特殊权限进行限制。

            Linux基础学习(四) 

            如上我们可以看到我们对文件的组权限和特殊权限已经进行了限制。 只有r--可以生效

            注意:

                第一点:

           Linux基础学习(四)                         上面的权限显示是错误的和我们使用getfacl命令看到的不一致。因为文件夹存在权限列表。

                第二点:

                       当我们再次对该test文件使用setfacl -m u:student:rwx directory 命令时,我们会发现他会将我

                们的mask值再次覆盖掉,因为系统默认我们重新设置了mask值,如下图:

               Linux基础学习(四) 

        2、当我们需求某个目录对于student可写,并且目录中新建的子目录对student也可写,就要设定默认默认

权限,默认权限只对目录中新建立的文件或者目录生效,对已经建立的文件无效,对于目录本身也无效。

        setfacl -m d:u:student:rwx  directory 

        例如 我们在桌面上创建如下的文件及目录

            Linux基础学习(四)

            我们使用 setfacl -m d:u:student:rwx  test  命令使得test文件中之后所有新建的文件对student用户

     可读可写可执行   

            Linux基础学习(四)

五、特殊权限

(一)SUID

        当S这个标志出现在文件所有者的x权限上时,例如文件权限状态“-rwsr-xr-x”,此时就称为 Set UID,简称为SUID的特殊权限。SUID=4,SUID有这样的限制和功能:
        (1)SUID权限仅对二进制程序有效;
        (2)执行者对于该程序需要具有x的可执行权限;
        (3)本权限仅在执行该程序的过程中有效;
        (4)执行者将具有该程序所有者的权限,进程发起人身份无关。
         设定方式:
                    chmod u+s file

                    chmod 4xxx file

          SUID 的值是 4

           例:当我们普通用户去执行passwd命令是后我们需要调用 /usr/bin/passwd  我们可以使用 ls -l /usr/bin/passwd 查看passwd命令的权限,

        Linux基础学习(四)

passwd 命令的所有组和所有者都是root 且拥有者权限里面存在s,这说明这个命令具有SUID权限。

       同时发现普通用户没有w权限,按理来说普通用户不能执行这个命令的,因为在修改密码的时候肯定要进行文件的写入。通过分析,我们发现passwd这个命令会操作/etc/shadow这个文件,继续查看该文件的权限如下:

        Linux基础学习(四)

            这个文件的权限是0 ,但是root用户对所有的文件有读写(rw)权限,对所有目录拥有读写执行权限(rwx),因此普通用户对这个文件确实不能使用读写执行权限。不过passwd命令具有suid权限,所以普通用户执行这个命令的时,当系统生成对应的进程后,这个进程就拥有了 /usr/bin/passwd文件拥有者root的权限。

        我们可以使用下面方法进行验证:

        Linux基础学习(四)

        执行上面的命令操作,后我们通过pstree -u 来查看系统的命令树。

        Linux基础学习(四)

         我们发现执行passwd命令的权限不是student用户而是root

(二)SGID

        当s标志出现在文件所有者的x权限时称为SUID,那么s出现在用户组的x权限时称为SGID。(U表示user,G表示group)SGID = 2。SGID有如下功能:
        1、对文件:
                (1)SGID对二进制程序有用;
                (2)程序执行者对该程序需具备x权限;
                (3)执行者在执行过程中会获得该程序用户组的支持,程序发起人组的身份无关。

        2、对目录:

                    当目录有sgid权限后,目录中新建的所有文件的所有组都自动归属到目录的所有组

            之中,和文件建立者所在的组无关    

        3、设定方式:

                chmod g+s file|dir

                chmod 2xxx file|dir

        例:我们普通用户使用locate命令

        Linux基础学习(四)

        发现用户组权限中应该出现x的位置的地方显示了s,表示这个命令具有SGID权限,而普通用户

只有x权限没有rw权限。locat这个命令,实际上会去访问 /var/lib/mlocate/mlocate.db这个文件,

        Linux基础学习(四)

        普通用户对这个文件没有任何权限,所以理论上locate命令普通用户不可以执行,但是因为,locate拥有SGID权限,所以locate生成进程时候,这个进程会得到locae命令的用户组权限,相当于student用户被临时加入了slocate这个组,因此student对这个文件拥有了r权限。

        对于目录,当目录有sgid权限后,目录中新建的所有文件的所有组都自动归属到目录的所有组之中,和文件建立者所在的组无关。

        例如:当我们在团队在某个目录下共同工作来做一个项目时,那么团队成员都得对这个目录下的所有文件具有rwx权限,当我们有A、B、C、三个用户属于不同组时,但都在同一个目录下工作,我。当用户A创建了一个权限为770的文件后,B、C用户的无法访问这个文件,这个时候我们可以对该工作目录加入SGID权限,那么目录中的所有新建文件的归属组就属于目录的所有组之中,由于其他用户和目录属于同一个组,其他用户也可以对该文件进行读写执行操作。

(三)SBIT

        只针对目录有效,当用户对目录拥有wx权限时,用户在该目录创建的文件或目录只有自己与root用户才可以删除 ,SBIT = 1,SBIT在其他用户权限本应该是x的地方显示位t

        设定方式

        chmod     o+t directory

        chmod     1777 directory

        例:

        

(四)chmod 

        我们使用chmod更改文件的权限时 我们使用这样的命令chmod 4xxx filename 其中4 代表文件的SUID xxx代表们对文件的对写权限的改动,如果我们希望查找系统中所有具有特殊权限的文件,则:

        find / -perm +7000            #  其中7 = 4+2+1 即SUID+SGID+SBIT