umask权限使用

很显然,系统中各种文件的权限设置对特定用户的数据安全有很大影响。但是要求用户逐一明确设置系统中每个文件的权限也是不现实的,为此,需要使用umask命令,该命令可以为用户账号中新文件的创建进行缺省设置。系统管理员必须要为你设置一个合理的u m a s k值,以确保你创建的文件具有所希望的缺省权限,防止其他非同组用户对你的文件具有写权限。具体来说,umask是用来设置权限掩码的,权限掩码由3个数字组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时默认的权限。

语  法:umask [-S][权限掩码]

补充说明:umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。

参  数:

-S  以文字的方式来表示权限掩码。

登录之后,可以按照个人的偏好使用u m a s k命令来改变文件创建的缺省权限。相应的改变直到退出该s h e l l或使用另外的u m a s k命令之前一直有效。一般来说,u m a s k命令是在/ e t c / p r o f i l e文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的u m a s k,可以在该文件中加入相应的条目。如果希望永久性地设置自己的u m a s k值,那么就把它放在自己$ H O M E目录下的. p r o f i l e或. b a s h _ p r o f i l e文件中。

如何计算umask值

u m a s k命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的u m a s k值中的数字。对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用c h m o d命令增加这一权限。目录则允许设置执行权限,这样针对目录来说, u m a s k中各个数字最大可以到7。该命令的一般形式为:

umask nnn

其中n n n为u m a s k置0 0 0 - 7 7 7。

计算u m a s k值:可以有几种计算u m a s k值的方法,通过设置u m a s k值,可以为新创建的文件和目录设置缺省权限。

例如,对于u m a s k值0 0 2,相应的文件和目录缺省创建权限是什么呢?

第一步,我们首先写下具有全部权限的模式,即7 7 7 (所有用户都具有读、写和执行权限)。

第二步,在下面一行按照u m a s k值写下相应的位,在本例中是0 0 2。

第三步,在接下来的一行中记下上面两行中没有匹配的位。这就是目录的缺省创建权限。稍加练习就能够记住这种方法。

第四步,对于文件来说,在创建时不能具有文件权限,只要拿掉相应的执行权限比特即可。

这就是上面的例子,其中u m a s k值为0 0 2:

1) 文件的最大权限rwx rwx rwx (777)

2) umask值为0 0 2 - - - - - - -w-

3) 目录权限rwx rwx r-x (775) 这就是目录创建缺省权限

4) 文件权限rw- rw- r-- (664) 这就是文件创建缺省权限

系统默认的umask码是0022也就是:目录 755(rwx,rx,rx) ,文件:644(rw,r,r) 。

umask码的换算

0022 + 0755 = 0777   对应默认目录权限 反之 0777 - 0755 = 0022

0022 + 0644 +0111 = 0777 对应默认文件权限 反之 0777 - 0111 - 0644 = 0022

哈哈~~ 简单吧!假如我们要将默认目录权限设置为 744 那么对应的umask 是 0777 - 0744 = 0033 ,然后执行umask 0033命令就将umask码改成0033了。

下面是另外一个例子,假设这次u m a s k值为0 2 2:

1) 文件的最大权限rwx rwx rwx (777)

2 ) u m a s k值为0 2 2 - - - -w- -w-

3) 目录权限rwx r-x r-x (755) 这就是目录创建缺省权限

4) 文件权限rw- r-- r-- (644) 这就是文件创建缺省权限

下面是常用的u m a s k值及对应的文件和目录权限

umask值   目录   文件

0 2 2             7 5 5        6 4 4

0 2 7              7 5 0                   6 4 0

0 0 2              7 7 5        6 6 4

0 0 6              7 7 1        6 6 0

0 0 7             7 7 0        6 6 0

如果想知道当前的umask 值,可以使用u m a s k命令:如果想要改变u m a s k值,只要使用u m a s k命令设置一个新的值即可:

$ umask 002

确认一下系统是否已经接受了新的u m a s k值:在使用u m a s k命令之前一定要弄清楚到底希望具有什么样的文件/目录创建缺省权限。否则可能会得到一些非常奇怪的结果;例如,如果将u m a s k值设置为6 0 0,那么所创建的文件/目录的缺省权限就是0 6 6!除非你有特殊需要,否则没有必要去管他,系统默认的值“022”umask是用的掩码,至于掩码的概念,从基础学吧,这里不说了。 

linux中的文件/目录许可是用4位八进制数表示的。其中第一个八进制数用来表示特殊许可设置,第二个数字用来设置文件所有者的许可,第三个数字用来设置组许可,第四个数字用来设置所有人的许可。 

例如,root的权限为777,若权限掩码设为022,那么两都相减后可得755。下面是在我的系统更改umask的一些情况:

[root@linuxserver root]# umask

022

上述命令显示表示我的系统的umask值为022。

[root@linuxserver root]# umask -S

u=rwx,g=rx,o=rx

当umask值为022时,默认情况下各用户的权限。注意这里的参数“S”是大写。

[root@linuxserver root]# umask 177

[root@linuxserver root]# umask -S

u=rw,g=,o=

上述两行命令把umask值改为177,结果只有文件所有者具有读写文件的权限,其它用户不能访问该文件。这显然是一种非常安全的状态。

原文地址:https://www.cnblogs.com/fanweisheng/p/11108710.html