​Linux基础知识之文件权限

实验环境:

   Linux系统版本为CentOS6.8_x86_64版本,以root用户和sjsir用户远程用xshell连接系统,进行试验。

文本目录:

   1.文件的属性

   2.文件权限相关的命令

   3.umask 新建文件和目录的默认权限

   4.Linux文件系统上的特殊权限:SUID SGID SBIT

   5.文件隐藏属性 chattr lsattr

   6.访问控制列表ACL

博文问题:

   1.为什么要学习文件权限?

   答:linux的最基本的哲学思想指出,linux一切皆文件,我们学好文件权限管理之后,可以明白linux管理员的权限之大,可以利用chatt命令去锁定一个文件,防止管理员去误操作或者误删除等失误操作造成系统的损坏或者重要的配置文件被删除;学习文件权限,我们可以更加灵活的赋予除root和其他人的权限,更加方便的对单用户或者用户组的设置,更加便捷的让用户或用户组去操作和编辑文件;对文件设置SUID、SGID、SBIT特殊权限,更加方便对用户放权,让用户方便编辑和操作系统上可以让用户操作的配置文件。

  2.隐藏属性的重要性?

   答:隐藏属性对于系统有很大的帮助,尤其是对于系统安全上面,chattr可能只对ext X的文件系统有效。主要作用是避免文件被用户(包括超级用户root),误删除或者进行误操作,通常用于保护一些重要的文件。

  3.什么是ACL?

   ACL是Access Control List的缩写,主要的目的是提供传统的owner、group、others的read、write、execute权限之外的

具体权限设置。ACL可以针对单一用户、单一文件或目录来进行r、w、x的权限设置,对于需要特殊权限的使用状况非常有帮助。

文件权限分析:

  1. 文件的属性: 

   -rw-r–r–  2        root    root    26195    Dec 17 11:21   install.log

权限     硬链接数   所有者  所属组  文件大小 文件创建时间    文件名

权限第一项的介绍:

    -:这是一个普通文件

    d:这是一个目录

    l:这是一个软连接或硬链接

    b:设备文件,块设备

    c:设备文件,字符设备

    s:套接字文件

    p:管道文件

文件或目录的权限:

    文件:

       r:可读,可以使用类似cat等命令查看文件内容

       w:可写,可以编辑或者删除此文件

       x:可执行,exacutable,可以在命令提示符下面当做命令提交给内核运行

    目录:

       r:可以对此目录执行ls列出目录内部的所有文件

       w:可以对此目录创建文件

          扩展:w对于目录的含义是是否有更改该目录结构列表的权限

           目录中有w权限,就可以做以下的操作:

              新建新的文件与目录;

              删除已经存在的文件与目录(无论该文件的权限为何);

              将已经存在的目录或文件进行重命名;

              转移该目录内的文件、目录的位置;

        x:可以使用cd切换进此目录,可以使用ls -l查看内部文件的详细信息

rwx对应二进制的转换

    0   000    — :无任何权限

    1   001    –x :有执行权限但无读和写权限

    2   010    -w- :有写权限但无读和执行权限

    3   011    -wx : 有写和执行权限但无读权限

    4   100    r– :有读权限但无写和执行权限

    5   101    r-x :有读和执行权限但无写权限

    6   110    rw- :有读和写权限但无执行权限

    7   111    rwx :拥有读写执行权限

2.文件权限相关的命令:

    a.修改文件的权限:

       chmod命令:

          -R 递归修改权限

       ①直接修改文件的权限

          chmod MODE file

          MODE使用的是八进制的数字

          chmod 777 test

         blob.png

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

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

          =后面跟的权限直接是rwx 

          chmod u=rx test

         blob.png

          chmod g=r,o=w test

         blob.png

       ③修改一类用户某位或某些位的权限

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

          加减号右面跟着的是r,w,x

          chmod a+x test

         blob.png

       ④参考FILE1文件的权限将FILE2的权限设定为相同的权限。

         –reference=/path/to/somefile file

         chmod –reference=test hello

         blob.png

b.修改文件的属主

    chown (该命令只有root管理员才能使用此命令)

       -R 递归修改 修改目录及其内部文件的属主

       ①直接修改文件的属主,不会修改文件的属组

        chown USERNAME file1

        chown sjsir hello

        blob.png

        改变目录的属主时,不会改变目录下的文件的属主

       ②同时修改文件的属主和数组

        chown USERNAME:GRPNAME file

        chown hadoop:sjsir hello

        blob.png

       chown USERNAME.GRPNAME file

       chown sjsir.hadoop hello

        blob.png

       ③参考FILE1文件的属主修改FILE2文件的属主

           (这种方法也可修改文件的属主和属组)

          –reference=/path/to/somefile file 

          chown –reference=test hello

        blob.png

c.修改文件的属组

    chgrp:改变文件属组(只有管理员root才有改权限)

       -R 递归修改 修改目录及其内部文件的属组

       ①直接修改文件的属组

       chgrp GRPNAME file1将文件的属组改为前面的用户

       chgrp sjsir hello

       blob.png

       ②参考FILE1文件的属组修改FILE2文件的属组

       –reference=/path/to/somefile file

        chgrp –reference=test hello

       blob.png

3.umask 新建文件和目录的默认权限:

    umask值:可以用来保留在创建文件权限,就是制定“目前用户在新建文件或目录的时候的权限默认值”

    新建FILE 权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1

    新建DIR 权限: 777-umask

       umask:查看当前用户的umask值

        非特权用户umask是002

        blob.png

        root 的umask是022

        blob.png

        umask #:  设定当前用户的umask值(默认设置仅对当前进程有效,若想彻底改变,需将文件写到配置文件中) 例:umask 002

        blob.png        

       umask –S  模式方式显示 

       root用户显示的是:

       u=rwx,g=rx,o=rx

       blob.png

       umask –p  输出可被调用

       全局设置:/etc/bashrc  用户设置:~/.bashrc

4.Linux文件系统上的特殊权限:SUID SGID SBIT

    a.前提:进程有属主和属组;文件有属主和属组

        ①任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

        ②启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组

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

            进程的发起者,同文件的属主:则应用文件属主权限

            进程的发起者,属于文件属组;则应用文件属组权限

            应用文件“其它”权限

    b.SUID

     任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

        启动为进程之后,其进程的属主为原程序文件的属主

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

        SUID 设置在目录上无意义

        权限设定:

           chmod u+s FILE…

           chmod u+s hello

           blob.png

           chmod u-s FILE…

           chmod u-s hello

           blob.png

    c.SGID

     ①对于文件的设置

     任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

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

        权限设定:

           chmod g+s FILE…

           chmod g+s hello

           blob.png

           chmod g-s FILE…

           chmod g-s hello

           blob.png

     ②目录上的SGID 权限

        默认情况下,用户创建文件时,其属组为此用户所属的主组

        一旦某目录被设定了SGID ,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组

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

          权限设定:

          chmod g+s DIR…

          chmod g+s testdir

          blob.png

          chmod g-s DIR…

          chmod g-s testdir

          blob.png

    d.Sticky位

        具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权

        在目录设置Sticky  位,只有文件的所有者或root可以删除该文件

        sticky  设置在文件上无意义

        权限设定:

          chmod o+t DIR…

          blob.png

          chmod o-t DIR…

          blob.png

    e.权限位映射

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

            s: 属主拥有x 权限

            S:属主没有x 权限

        SGID: group, 占据属组的执行权限位

            s: group 拥有x 权限

            S:group 没有x 权限

        Sticky: other, 占据other 的执行权限位

            t: other 拥有x 权限

            T:other 没有x

5.文件隐藏属性 chattr lsattr:

        隐藏属性对于系统有很大的帮助,尤其是对于系统安全上面,chattr可能只对ext X的文件系统有效。

        主要作用是避免文件被用户(包括超级用户root),误删除或者进行误操作,通常用于保护一些重要的文件。

    a.锁定与解锁文件的读时间(atime)

        chattr +A test.txt 锁定

        chatter +A nihao

        blob.png

        chattr -A test.txt 解锁

        chattr -A nihao

        blob.png

    b.令文件不能被删除、改名、修改内容,包括超级用户(root用户)。使用i选项对于系统安全性有很大的帮助,只有root用户可以拥有此权限。

        chattr +i test.txt 添加

        chattr +i nihao

       blob.png

        chattr -i test.txt 解除

        chattr -i nihao

       blob.png

    c.文件只能增加数据,可以查看,但不能删除文件也不能修改数据。

        chattr +a test.txt 增加属性

       chattr +a nihao

       blob.png

        chattr -a test.txt 删除属性

       chattr -a nihao

       blob.png

    d.查看文件的attr的标记:

        lsattr test.txt 

6.访问控制列表ACL:

    a.什么是ACL?

    ACL是Access Control List的缩写,主要的目的是提供传统的owner、group、others的read、write、execute权限之外的具体权限设置。ACL可以针对单一用户、单一文件或目录来进行r、w、x的权限设置,对于需要特殊权限的使用状况非常有帮助。

    b.具体的ACL分类:

       用户(user):针对用户来设置权限

       用户组(group):针对用户组来设置权限

       默认属性(mask):在该目录下新建文件或目录的时候设置新数据的默认权限

   c.关于acl的一个小说明:

        ①acl是除了文件的所有者所属组和其他人,对于额外的用户设定的权限;

        ②CentOS7.0默认创建的xfs和ext4文件系统有ACL功能;

        ③CentOS7.X之前版本,认手工创建的ext4文件系统无ACL功能。

            需手动增加:

                tune2fs –o acl /dev/sdb1

                mount –o acl /dev/sdb1 /mnt

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

        ⑤acl支持的分区的类型是ext4和xfs分区类型(对于windows支持的分区类型fat,ntfs,acl暂不支持)

         fat分区中文件的权限是由磁盘元数据的分区决定的,fat分区对于linux系统来说是没有权限的,所谓的linux系统现在fat分区的文件有权限的分类是linux系统为文件虚拟出来的权限,不符合linux系统的文件权限,真实权限不存在。

   d.设置某个目录或文件的ACL:

        ①单文件单次设置和删除acl权限:

        添加权限:

          setfacl -m u:username:(rwx/7) file  (设置名为username对于file的权限)

        取消权限:

          setfacl -x u:username file    (删除username对于file的权限)

          setfacl -b file         (擦除所有的ACL权限)

        ②批量设置和删除多用户对于文件的ACL权限

          vi/nano setfacl.txt    将需要添加的信息以下面的格式写入到文件中

            u:username1:(rwx/7)

            u:username2:(rwx/7)

            ……

            g:groupname1:(r–/4)

            g:groupname2:(rw-/6)   

            ……   

         setfacl -M setfacl.txt file | Dir 将setfacl.txt中的内容写入到file|Dir中

         vi delfacl.txt      将想要取消的信息写入到下面的文件中

            u:username1      

            u:username2

            ….

            g:groupname1

            ….

         setfacl -X delfacl.txt file | Dir 将delfacl.txt中的内容取消对于file|dir的设置

       ③重新设置文件的ACl权限:

         setfacl –set u::rw,u:sjsir:r,g::rw,o::- file

       ④对于文件夹设定权限:

         setfacl -m u:username:(rwx/7) dir

         然后,root用户创建file1,对于file1的文件属性来说,无acl权限

         setfacl -d u:username2:(rw-/6) dir

         然后,用户创建file2 文件,对file2有刚刚设定用户的权限,但用户的权限依然小于mask的权限

         解释:默认文件权限,当使用-d命令设置后,仅对设置后,再创建新文件拥有设定的acl权限,对之前用户创建旧文件无效

       ⑤对-d设置的文件权限无效

          setfacl -k dir

    e.查看文件或目录的acl权限

          getfacl file | Dir

    f.acl中 mask的说明:

    mask值相当于除了超级用户(root)和其他人(others)之外的所有人的设定权限的最高权限的锁定位,这些用户包括组对于文件或目录来说只能比ACl权限中的mask值得权限小,但无法超过mask的值给定的权限,若用户原来的权限为rwx,mask值给定的为r-x,则在用户真实对于文件或者目录的权限为r-x,而非原本的rwx;用户原来的权限为r–,mask给定的权限仍然为r-x,则用户真实的权限为r–,以原本的权限为主。

     得出:

         用户(组)权限>mask给定的值,则用户的最终权限以mask权限为真实权限执行;

         用户(组)权限<mask给定的值,则用户的最终权限以原来用户的权限为真实权限执行

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

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-07 23:14

    文章整体思路清晰,对命令的语法和常见选项有了详细的总结与实际操作。可以尝试着有一些适当的缩进。