Linux下的权限掩码umask

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

        所以说,umask是用来指定"目前用户在新建文件或者目录时候的权限默认值"。那我们 如何得知或者设置这个umask呢?

        在linux下我们查看的方式有两种,一种可以直接输入umask,就可以看到数字形态的权限设置分数,一种则是加-S(Symbolic)参数,就能以符号类型的方式来显示出权限了。我先进行一次查看,显示如下所示:

Linux下的权限掩码umask

       我们在这里看到的0022有四组数字,第一组代表的是特殊权限,我们这里先不做讨论。

       然而,在目录和文件的默认权限属性是不同的,因为对于一个目录来说它的x权限也就是执行权限是很重要的,进入目录等操作都是需要目录具有执行权限的,而对于文件来说,一般情况都是用于数据的记录操作,所以一般不需要执行权限。从而,在linux下默认的情况是这样的:

    ▶ 如果用户创建的是目录,则默认所有权限都开放,为777,默认为:drwxrwxrwx

    ▶ 如果创建的是文件,默认没有x权限,那么就只有rw两项,最大值为666,默认为:-rw-rw-rw-

       那么之前所说的拿走的权限就是这里这个默认值要减掉的权限,r、w、x分别是4、2、1,要拿掉读权限就输入4,拿掉写权限就输入2,以此类推。

再看上图,umask为022,也就是说,对于当前用户没有拿掉权限,group用户和other用户都被拿走了w权限,所以此时如果用户进行创建目录和文件的时候,默认权限是会进行如下的减法操作:

          新建文件:666-022=644;

          新建目录:777-022=755.

        我们来验证一下是不是这样做的:

Linux下的权限掩码umask

      可以看到确实是这样的,目录的默认权限是rwxr-xr-x(755),文件的默认权限是-rw-r--r--(644)。

Umask的设置:

--------------------------------------------------------------------

       在上面的umask为022,我们创建的目录对于同组用户是没有写权限的,在实际中可能需要给同组用户能够在目录下创建和修改文件,那么此时需要创建的目录同组用户是具有写权限的,也就是说我们的umask不要拿走同组用户的写权限,那么就是把umask设置为002就可以达到效果。

        Umask的设置很简单,只需要在umask命令后加想要拿掉的权限数字就行:

Linux下的权限掩码umask

        可以看到此时新建的目录是具有写权限的。

        Linux下的etc/profile和etc/bashrc中都有默认的umask设置,我们来看一下:

Linux下的权限掩码umask

         这个是在etc/profile中的一部分内容,可以看到根据不同的uid设置了不同的umask,其实在etc/bashrc文件中也有基本相同的这部分代码,我们可以在这两个文件中设置umask,那么二者有什么区别呢?如果实在etc/profile中修改,只有在重新登录用户的时候才会发生改变,而在etc/bashrc中修改的话要是切换目录就会发生改变,因为profile是在登录用户的时候调用的,而bashrc是在打开一个shell时候调用。在这里不做详细介绍。一般情况下,是不建议这么修改的,我们如果要设置的话就直接用umask命令做更改就行。

Root用户/普通用户

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c263b153363c7d089f4fe9933233a816.html