关于linux系统中umask值的说明-以及计算转换成默认权限符号的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于linux系统中umask值的说明-以及计算转换成默认权限符号的方法相关的知识,希望对你有一定的参考价值。

关于linux系统中的umask值,我们可以通过man手册的解释为:The user file-creation mask is set to mode

简单的理解,就是用户的umask的值决定着文件(也包括目录)创建时的默认权限,对于root用户来说,一般为0022

[root@qq-5201351 ~]# umask
0022

这样可能还是不能很直观的表达出,可以通过如下的命令进行计算,以更容易理解的格式展示出来

[root@qq-5201351 ~]# umask -S
u=rwx,g=rx,o=rx

但上面的仅仅是针对的创建一个新目录后的默认权限将是 u=rwx,g=rx,o=rx    

这个是如何计算出来的,笔者经常使用的方法如下:

对于目录的默认权限:(rwx rwx rwx)  -  (0022)  -->   (rwx rwx rwx)  -  (--- -w- -w-)  = rwxr-xr-x  这样也就是上面的结果:u=rwx,g=rx,o=rx

对于文件的默认权限:(rw- rw- rw-)  -  (0022)  -->   (rw-  rw-  rw-)  -  (--- -w- -w-)   = rw- r-- r--  这样最后的权限结果就将是:u=rw,g=r,o=r

注意:因为对于文件,默认是不能有执行权限的,所以在计算时,被减数就只能为 rw-rw-rw- , 这样也能防止计算出的结果会有执行权限,那样就不安全了

 

还有一点需要说明一下,umask的值是4位,当然linux文件的权限也可以写成4位的形式,这里说明一下umask的第一位数字

笔者是参考至官网文档(Red Hat Enterprise Linux / 8 /Configuring basic system settings / Chapter 26. Managing the umask):

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/assembly_managing-the-umask_configuring-basic-system-settings

其中有一段Note,还特意解释了一下umask的第一位:

When displaying the umask in octal mode, you may notice it displayed as a four digit number (0002 or 0022). The first digit of the umask represents a special bit (sticky bit, SGID bit, or SUID bit). If the first digit is set to 0, the special bit is not set.

也即是说,umask的第一个数字表示一个特殊位(SBIT粘性位、SGID位或SUID位),如果第一个数字设置为0,则不设置特殊位。

但实际上,对于umask,要么我们就写三位,前面就默认为0

如果写成4位,那么第一个数字,也只能为0 ,否则会报错:-bash: umask: 1000: octal number out of range

 

 

 

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17432433.html

 

关于linux的umask命令

谁给将将umask是怎么个设置文件权限? 特别是php内的umask 什么时候用到? 怎么个用法? umask=18的时候是怎么个意思? 百度了一大堆 没发现有用的信息!

umask分配权限是对某个用户或用户组从权限中减去某个权限,这个权限指的是用户在创建新文件是对新建文件的权限在Linux中权限可以用数字来表示r=4,w=2,x=1,其中r表示读权限、w表示写权限、x表示执行权限,一个用户或用户组的权限是通过这些数字相加来表示的,比如只有读写权限,则权限数字为4 + 2 = 6所以,一个用户的最大权限是4 + 2 + 1 = 7,如果想从用户权限中减去某个权限,就用umask命令比如umask 1 删除文件创建者对新建文件的执行权限如果是删除读写权限,则umask后面的数字应该是4 + 2 = 6通常umask后面的权限数字参数有3个权限位,每个权限位分别表示文件创建者、文件创建者所在用户组和其它用户比如umask 236 表示删除文件创建者对新建文件的写权限、删除文件创建者所在用户组对新建文件的写和执行权限、删除其它用户对新建文件的读和写权限这是Linux的umask命令的含义但是对于php里面的umask我就不清楚了,因为我对php也不熟悉 参考技术A 这是Linux中的umask函数

我们创建文件的默认权限是怎么来的?如何改变这个默认权限呢?

umask是什么?

当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。

如何计算umask值?
umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来说,umask中各个数字最大可以到7。

该命令的一般形式为:umask nnn
其中nnn为umask置000 - 777。

我们只要记住u m a s k是从权限中“拿走”相应的位即可。下表是umask值与权限的对照表:
umask 文件 目录
--------------------
0 6 7
1 6 6
2 4 5
3 4 4
4 2 3
5 2 2
6 0 1
7 0 0
--------------------

如:umask值为022,则默认目录权限为755,默认文件权限为644。
参考技术B umask和文件权限是相反的-rwxrwxrwx,这个Linux文件的权限是777umask此时就是000总之umask+文件权限=777你这个umask=18赋值就错了,不可能到8的umask就是为一个新创建的文件赋予新的权限的函数,就这个功能 参考技术C umask 是屏蔽掉新文件或目录不应有的访问允许权限的掩码. 设置权限,你可能要的是chown,chmod,chgrp这些吧!

以上是关于关于linux系统中umask值的说明-以及计算转换成默认权限符号的方法的主要内容,如果未能解决你的问题,请参考以下文章

(转)深入浅出linux系统umask值及其对应的文件权限讲解

Linux文件系统命令 umask

关于linux的umask命令

linux基础学习

Linux命令之umask

Linux默认权限超级简单计算方法