跟老男孩学Linux运维-核心系统命令实战-第2章-文件和目录操作命令-umask显示或设置权限掩码

2.25.umask显示或设置权限掩码(*****)

2.25.1.命令详解

umask是通过八进制的数值来定义用户创建文件或目录的默认权限

#-p 输出的权限掩码可直接作为命令来执行
#-S 以字符方式输出权限掩码

2.25.2.通过umask计算文件目录权限

1.文件权限计算

创建文件默认最大的权限为 666(-rw-rw-rw-),默认创建的文件没有可执行权限 x 位。

对于文件来说,umask 的设置是在假定文件拥有八进制 666 的权限上进行的,文件的权限就是 666 减 umask(umask 的各个位数字也不能大于 6,比如 077 就不符合条件)的掩码数值,如果得到的 3 位数字其每一位都是偶数,那么这就是最终结果;如果有若干位的数字是奇数,那么这个奇数需要加 1 变成偶数,最后得到全是偶数的结果。

示例如下:

1)假设 umask 值为:022(所有位为偶数)

6 6 6     #<== 文件的起始权限值
0 2 2 -   #<== umask 的值
--------
6 4 4

2)假设 umask 值为:045(其他用户组位为奇数)

6 6 6     #<== 文件的起始权限值
0 4 5 -   #<== umask的值
—————
6 2 1     #<== 计算出来的权限。由于 umask 的最后一位数字是奇数5,所以,在其它用户组位再加1
0 0 1 +   #<== umask 对应的奇数位加 1 
—————
6 2 2     #<== 真实文件权限
   

2.目录权限计算

创建目录默认最大权限 777(-rwx-rwx-rwx),默认创建的目录属主是有 x 权限的,允许用户进入。

对于目录来说,umask 的设置是在假定文件拥有八进制 777 权限上进行,目录八进制权限 777 减去 umask 的掩码数值。

7 7 7         #<== 目录的起始权限值
0 2 2 -       #<== umask的值
—————
7 5 5         

2.25.3.使用范例

#系统默认的umask值

#超级用户
umask

#普通用户
umask

#上面的结果是由下面的配置文件决定的
sed -n '61, 64p' /etc/profile

#使用id查看用户组
id -gn

#使用id查看用户名
id -un

#显示当前登录用户的UID值
echo $UID

注意:普通用户的 umask 未必是 002

#-p 和 -S 参数的使用
umask -p
umask -S

#验证修改 umask 值对文件权限的影响
umask
touch file1;ll -h file1
umask 044
touch file2;ll -h file2
umask 034
touch file3;ll -h file3

#验证修改 umask 值对目录权限的影响
umask
mkdir dir1;ll -d dir1
umask 044 
mdkir dir2;ll -d dir2
umask 055
mkdir dir3;ll -d dir3

上面的修改都是临时生效的,想要永久生效就需要修改配置文件  

#修改配置文件使得 umask 永久生效
#通过命令查看 umask 的永久配置情况,配置文件可以是 /etc/bashrc 或 /etc/profile
sed -n '61,69p' /etc/bashrc
sed -n '57,64p' /etc/profile

以上是系统默认的 umask 配置情况,我们在工作中可以修改 /etc/bashrc 和 /etc/profile 实现对 umask 的永久修改,但是几乎没有什么需求必须要修改 umask,默认的 umask 是系统安全的临界点,是最适合的,这点请大家注意。

下面直接将修改 umask 的命令放在 /etc/profile 文件的最后一行,配置完成后,查看代码如下:

tail -1 /etc/profile

#结果
umask 033

上面的方法是一刀切的方法,所有用户的 umask 值统一设置为 033

 

posted on 2019-12-05 08:10  herisson_pan  阅读(12)  评论(0)    收藏  举报

导航