美文网首页
权限掩码

权限掩码

作者: 云三木 | 来源:发表于2020-08-26 16:33 被阅读0次

    文件rwx权限

    在了解权限掩码之前先了解下权限的基本知识
    r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
    w(Write,写入):对文件而言,具有新增,修改,删除文件内容的权限;对目录来说,具有新建,删除,修改,移动目录内文件的权限。
    x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。

    r、w、x分别是4、2、1。 
    7代表所有权限
    6代表读写
    5代表读执行
    4代表只读
    3代表写执行
    2代表只写
    1代表只执行
    

    下图中第一个文件权限有一个d,d表示当前是一个文件夹


    权限掩码

    我们都知道在linux下创建一个文件或者目录之后是可以通过chmod等命令进行权限设置,来达到给当前用户、用户组用户以及其他用户分配不同的访问权限。那么,我们新创建的目录和文件本身也是有它的默认权限的,这个默认权限是什么,就是由权限掩码umask所确定的。它的功能可以说与chmod刚好相反的,代表默认拿走的也就是说不要的权限。

    计算方式

        如果用户创建的是目录,则默认所有权限都开放,为777,默认为:drwxrwxrwx
    
        如果创建的是文件,默认没有x权限,那么就只有r、w两项,最大值为666,默认为:-rw-rw-rw-
        
        那么之前所说的拿走的权限就是这里这个默认值要减掉的权限,r、w、x分别是4、2、1,要拿掉读权限就输入4,拿掉写权限就输入2,以此类推。
    
    
        新建文件:666-022=644;
        新建目录:777-022=755.
    
        对于目录,直接使用777-umask即可,就得到了最终结果。
        对于文件,先使用666-umask。
            如果对应位上为偶数:最终权限就是这个偶数值。
            如果上面的对应为上有奇数,就对应位+1。
        上面的这个方法计算是非常方便的, 为何得到奇数要+1呢。
    
        文件的最大权限是666,都是偶数,你得到奇数,说明你的umask有奇数啊,读为4,写为2,都是偶数,说明你有执行权限的。
    
        就按照上面的umask=023为例,在计算其他用户权限的时候6-3=3 ,6是读写,3是写和执行,
        其实应该是读写权限减去写权限的得到读权限的,相当于我们多减去了一个执行权限。所以结果加1。
    

    linux查看权限掩码命令

    umask       数字形态的权限设置分数
    umask -S    符号类型的方式来显示出权限
    
    [root@root ~]# umask
    0022
    [root@root ~]# umask -S
    u=rwx,g=rx,o=rx
    [root@root ~]#
    
    0022
    第一个0表示是文件或目录的特殊权限
    第二个0表示文件或目录的拥有者有所有的rwx权限
    第三个2表示文件或目录的所属组被拿走了w权限,及所属组的权限是r-x
    第四个2表示文件或目录的其他人被拿走了w权限,及其他人的权限是r-x
    
    新建目录的默认权限是:rwxr-xr-x
    新建文件的默认权限是:rw-r–r--(Linux中文件默认都会拿走x权限)
    

    临时修改默认权限

    [root@root ~]# umask 0000
    [root@root ~]# umask
    0000
    

    永久修改默认权限

    编辑文件/etc/bashrc
    在当前的shell环境中生效
    1、如果用su - user1 来切换用户,表示换了shell环境,该配置文件不会生效
    2、如果用su user1 来切换用户,表示没有换shell环境,该配置文件会生效

    -代表切换用户会把环境变量中的配置文件全替换成新用户

    编辑文件/etc/profile
    可以在整个系统中生效

    [root@root ~]# vim /etc/bashrc
    [root@root ~]# vim /etc/profile
    
    两个文件的内容是一样的
    搜索umask,找到如下代码,不算第一位的特殊权限
    
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
      umask 002   //表示uid大于等于199的默认umask值,表示普通用户
    else
     umask 022    //表示uid小于199的默认umask值,表示root
    fi
    
    修改后需要重新读取一下/etc/bashrc或/etc/profile
    [root@root ~]# source /etc/profile
    [root@root ~]# source /etc/bashrc
    

    相关文章

      网友评论

          本文标题:权限掩码

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