20170724 文件权限

作者: 哈喽别样 | 来源:发表于2017-07-25 17:51 被阅读15次

    概要

    linux文件权限
    linux文件特殊权限
    ACL 访问控制列表

    一、linux文件权限

    (一)linux文件属性

    ls -l 命令可以看到文件相关属性,每个字段的意义如下:


    1. chown 设置文件所有者

    • 语法:chown [OPTION]... [OWNER][:[GROUP]] FILE...
    • 用法:
    chown hellopeiyang a.txt            <!--改变a.txt文件所有者为hellopeiyang-->
    chown hellopeiyang:natasha b.txt    <!--改变b.txt文件所有者为hellopeiyang,所属组为natasha-->
    chown :natasha c.txt                <!--改变c.txt文件所属组为natasha-->
    chown hellopeiyang: d.txt
    <!--改变d.txt文件所有者为hellopeiyang,所属组为所有者的主组hellopeiyang-->
    chown -R hellopeiyang test1 
    <!--递归改变test目录和以下所有文件目录的所有者为hellopeiyang-->
    
    • 实验结果如下图:



    2. chgrp 设置文件所属组

    • 语法:chgrp [OPTION]... GROUP FILE...
    • 选项:-R 递归设置
    • chgrp的功能chown也能够实现

    (二)linux文件权限

    linux定义了以下三类用户:

    • 所有者 (owner,u)
    • 所属组 (group,g)
    • 其他人 (other,o)

    linux文件为每类用户规定了三种权限

    • 读权限 (readable,r)
    • 写权限 (writable,w)
    • 可执行权限 (executable,x)

    1. 三种权限在文件与目录中的不同效果

    • 文件:
      • r: 可以查看文件内容
      • w: 可以修改文件内容
      • x: 可以被系统运行
    • 目录:
      • r: 可以通过ls命令查看目录内文件列表
      • w: 可以在目录下新建、删除文件
      • x: 可以通过cd命令进入目录内
      • X:只给目录x权限,不给文件x权限

    2. 文件权限描述方法

    • 描述方法一:模式法
      用户描述:u:所有者,g:所属组,o:其他人,a:所有三类用户
      权限变化描述:+:增加权限,-:减少权限,=:将权限赋值
      例如:
    u+w:所有者增加写权限
    g-x:所属组减少可执行权限
    a=rw:所有用户的权限赋值为读、写权限
    
    • 描述方法二:数值法
      读权限赋值为4,写权限赋值为2,可执行权限赋值为1,通过对权限的赋值相加得出相应的权限组合如下:
    rwx 7=4+2+1   rw- 6=4+2+0   r-- 4=4+0+0
    -wx 3=0+2+1   -w- 2=0+2+0   
    --x 1=0+0+1
    --- 0=0+0+0
    

    用三位数字描述文件三类用户的权限修改情况如下:

    764 rwxrw-r--     <!--所有者权限:全部,所属组权限:读写,其他人权限:读-->
    620 rw--w----     <!--所有者权限:读写,所属组权限:写,其他人权限:无-->
    

    3. chmod 修改文件权限

    • 语法:
    chmod [OPTION]... MODE[,MODE]... FILE...      <!--模式法-->
    chmod [OPTION]... OCTAL-MODE FILE...          <!--数值法-->
    
    • 选项:-R 递归设置
    • 实验:1、将文件abc的权限设置为所有者全部都有,所属组只有读权限,其他人没有权限;2、将文件def的权限所有者删去可执行权限,所属组增加读权限,其他人的权限赋值为全部没有。
    • 命令:
    chmod 740 abc
    chmod u-x,g+w,o= def
    

    (三)umask值:新建文件和目录的默认权限

    • umask默认值:root用户为022,普通用户为002
    • umask值计算新建文件和目录的权限的方法:
      • 对于目录,用777-umask值即可
      • 对于文件,用666-umask值后,将出现的奇数位权限值加1其他不变
    • 演示umask值对新建文件目录的影响


    • umask -S 模式方式显示
    • umask -p 输出结果前加"umask",可以使umask值被调用,如将umask值添加至用户设置~/.bashrc命令为umask -p >> ~/.bashrc,若为系统设置则输出至/etc/bashrc

    二、linux文件特殊权限

    一般来说,用户是否能够访问文件取决于被访问文件的权限设置。但是,linux文件的特殊权限(SUID,SGID)表现在:用户继承了访问文件使用的可执行程序文件的权限设置。

    (一) SUID

    • 用户运行程序后,用户身份切换至程序所有者的身份。文件能否被访问取决于程序所有者在文件权限中的设置。
    • 用法:
    chmod u+s FILE...     <!--先前位置的x会被s代替-->
    chmod u-s FILE...     <!--s会恢复成x-->
    chmod 4720 FILE...    <!--用数值法描述时,在原三位数字前添加数字4-->
    
    • 注意:SUID只在作用于二进制可执行文件上才有效,作用于目录上无意义。
    • 实验:
      1、在普通账户下,cat命令无法查看文件/etc/shadow
      2、在root账户下,给cat增加SUID权限,切换回普通账户,此时cat可以查看/etc/shadow。这是因为普通用户执行cat命令时身份临时切换为cat二进制程序的所有者root,从而获得了查看/etc/shadow的权限

      3、在root账户下,修改cat的所有者为普通账户,发现SUID属性自动失去,再为其添加SUID属性。切换回普通账户,cat命令无法查看文件/etc/shadow。这是因为普通用户执行cat命令后身份切换后仍旧是普通用户,而/etc/shadow文件除root外谁也不能访问,所以此时无法访问/etc/shadow

    (二)SGID

    1. 可执行文件上的SGID权限

    • 用户运行程序后,用户身份切换至程序所属组的身份,文件能否被访问取决于程序所属组在文件权限中的设置。
    • 用法:
    chmod g+s FILE...     <!--先前位置的x会被s代替-->
    chmod g-s FILE...     <!--s会恢复成x-->
    chmod 2770 FILE...    <!--用数值法描述时,在原三位数字前添加数字2-->
    
    • 实验:
      1、当前普通用户(不属于natasha组)无法用cat命令访问abc文件
      2、将cat程序文件的所属组改为abc文件的所属组natasha,并为其赋予SGID权限
      3、此时普通用户可以访问abc文件了。这是因为执行cat命令时,普通用户的身份切换为cat命令文件的所属组,而abc文件的所属组与cat的相同并且具备读权限,所以普通用户也可以访问了。


    2. 目录上的SGID权限

    • 一般情况下,用户建立文件的所属组为用户所属主组。当目录被赋予了SGID权限,在目录下新创建文件的所属组为此目录的所属组。
    • 用于创建协作目录
    • 用法:
    chmod g+s DIR...     <!--先前位置的x会被s代替-->
    chmod g-s DIR...     <!--s会恢复成x-->
    chmod 2770 DIR...    <!--用数值法描述时,在原三位数字前添加数字2-->
    

    (三)Sticky 粘滞位

    • 一般情况下,具有对目录写权限的用户可以删除目录下的任意文件,而不需考虑文件的所有者。
    • 当对目录赋予Sticky权限,目录内的文件只能由其所有者和root用户删除,其他用户即使对目录具有写权限也不能删除别人的文件。
    • 用法:
    chmod o+t DIR...     <!--先前位置的x会被t代替-->
    chmod o-t DIR...     <!--t会恢复成x-->
    chmod 1647 DIR...    <!--用数值法描述时,在原三位数字前添加数字1-->
    

    特殊权限的大小写区别

    • SUID:
      s:所有者拥有x权限
      S:所有者没有x权限
    • SGID:
      s:所属组拥有x权限
      S:所属组没有x权限
    • Sticky:
      t:其他人拥有x权限
      T:其他人没有x权限
    • 由于特殊权限都赋予在二进制可执行文件或目录上,这些文件的x权限都比较重要,失去x权限而赋予特殊权限,将无法实现很多功能,所以大写的权限一般视作一种故障状态。

    (四)设定文件特定属性

    chattr +i     <!--不能删除,改名,更改-->
    chattr +a     <!--只能追加内容-->
    lsattr        <!--显示特定属性-->
    

    三、ACL访问控制列表

    • ACL能够专门对个别用户进行权限控制,实现更加灵活的权限管理
    • CentOS 7下的分区自动具备ACL功能;
    • CentOS 6下的分区:若分区是在系统安装时划定的,则自动具备ACL功能;若分区是安装后增加的,则默认不具备ACL功能,需要手动修改。
    // 手动开启ACL功能
    tune2fs –o acl/dev/sdb1
    mount –o acl/dev/sdb1 /mnt/test
    
    • setfacl 设置文件ACL
    • 语法:setfacl [option] [{-m|-x} acl_spec] file ...
    • 用法:
    -m 修改 -x 删除 
    option:-R 递归 -b 清空 -k 删除默认acl权限
    u:hellopeiyang:rwx     <!--设定用户hellopeiyang的所有者权限为rwx-->
    g:natasha:rw     <!--设定组natasha的所属组权限为rw-->
    m::rw    <!--设定mask值为rw-->
    setfacl -m u:hellopeiyang:rw hello     <!--设置文件hello的ACL权限为自定义用户拥有读写权限-->
    setfacl -b hello     <!--清空hello文件的ACL权限-->
    
    • mask值限定了ACL中除所有者、其他人外其他用户能够达到的最高权限。修改个别自定义用户、自定义组的权限会导致umask值变化,进而影响其他权限,故umask只能在自定义用户与自定义组权限设置完毕后再统一调整。
    • getfacl 查看文件ACL getfacl file ...
    • ACL生效顺序:所有者,自定义用户,自定义组,其他人
    • 复制文件保留ACL设置:cp -p

    相关文章

      网友评论

        本文标题:20170724 文件权限

        本文链接:https://www.haomeiwen.com/subject/wztikxtx.html