Linux—用户新建目录和文件的默认权限设置:umask详解
关注微信公众号:CodingTechWork,一起学习进步。
引言
我们有没有思考过一个问题,在登录Linux系统后,我们创建的目录或者文件的权限,为什么每次创建都是统一的?我们做以下实验:新建一个用户userA,然后分别创建目录dir01和dir02,文件t1.txt和t2.txt。
[root@linux01 ~]# useradd userA
[root@linux01 ~]# su - userA
[userA@linux01 ~]$ ll
total 0
[userA@linux01 ~]$ mkdir dir01
[userA@linux01 ~]$ mkdir dir02
[userA@linux01 ~]$ touch t1.txt
[userA@linux01 ~]$ touch t2.txt
[userA@linux01 ~]$ ll
total 8
drwxr-x--- 2 userA userA 4096 Mar 27 10:25 dir01
drwxr-x--- 2 userA userA 4096 Mar 27 10:25 dir02
-rw-r----- 1 userA userA 0 Mar 27 10:25 t1.txt
-rw-r----- 1 userA userA 0 Mar 27 10:25 t2.txt
从上述的实验中发现,每次创建目录的权限都是drwxr-x---
,即为750
,文件的权限都是-rw-r-----
即为640
。我们能想到的必定这是个默认权限,那这个默认权限由谁来控制?答案是:umask
。
[userA@linux01 ~]$ umask
0027
是的,我们可以通过umask来改变用户的创建文件和目录的默认权限,Linux是注重安全性的OS,而安全离不开权限的设置,对于创建新的目录和文件设定必要的初始权限是必不可少的,Linux和Windows在权限一个很大的区别就是:Windows中,新建目录和文件是继承上级目录权限;Linux是通过使用umask设置的默认权限给新建的目录和文件赋予初始权限。下面将一起走进umask的学习和使用。
umask
umask介绍
首先,我们要了解的是,Linux文件的最大权限是666,目录的最大权限是777,为何目录要比文件权限大?因为目录需要有执行权(x)才能够进入到目录中。
umask的作用是在用户登录Linux系统环境下,设置用户创建目录和文件的初始化权限。
umask命令
语法:
umask [-p] [-S] [mode]
参数:-p
:表示完整打印umask内容。-S
:表示以符号形式显示设置。mode
:表示设置权限,mode和chmod的命令格式一样。
示例:
[userA@linux01 ~]$ umask -p
umask 0027
[userA@linux01 ~]$ umask -S
u=rwx,g=rx,o=
[userA@linux01 ~]$ umask u=rw
[userA@linux01 ~]$ umask -p -S
umask -S u=rw,g=rx,o=
[userA@linux01 ~]$ umask -p
umask 0127
[userA@linux01 ~]$ umask u=rwx
[userA@linux01 ~]$ umask -p
umask 0027
[userA@linux01 ~]$ umask o=x
[userA@linux01 ~]$ umask -p
umask 0026
[userA@linux01 ~]$ umask -p -S
umask -S u=rwx,g=rx,o=x
umask存放位置
一般umask的值可以在/etc/profile
文件中定义。
# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
··· ···
··· ···
umask 027
其中,我们可以看到账号UID>199
且UID=GID
且用户名=用户组名
时,umask值为002
,否则,umask值为022
。
umask 027
表示当前用户的umask掩码值设置为027。
umask值计算
上面一直在讲umask掩码值,那这个值究竟怎么计算?或者说,这个掩码值和目录或文件的默认权限关系是怎样的?
[userA@linux01 ~]$ umask
0027
我们通过umask命令获取到当前用户的umask掩码值为0027,为何是4位?其实真正有效的是后3位。第1位是代表文件所具有的特殊权限(SetUID、SetGID、Sticky BIT)。
通过umask值我们可以反推出用户新建目录和文件的默认权限是什么。
原理
- 将目录或文件的默认最高权限(目录777、文件666)和umask掩码值都转换为二进制。
- 对umask
取反
。 - 将两个二进制值做
与运算
。 - 将与运算后的二进制值转换为十进制,即为用户的新建目录或文件的默认权限。
示例
目录场景:
- 掩码值:0022
- 目录默认最高权限:777
计算默认权限:
- 转为二进制:
777 = 0111 0111 0111
022 = 0000 0010 0010 - umask取反
NOT运算:1111 1101 1101 - 与运算
0111 0111 0111 总权限777
1111 1101 1101 umask取反
====================
0111 0101 0101 新建目录默认权限 - 转为十进制
0111 0101 0101=755
即该用户新建目录的默认权限为755
,即为rwxr-xr-x
。
文件场景:
- 掩码值:0022
- 目录默认最高权限:666
计算默认权限:
- 转为二进制:
666 = 0110 0110 0110
022 = 0000 0010 0010 - umask取反
NOT运算:1111 1101 1101 - 与运算
0110 0110 0110 总权限666
1111 1101 1101 umask取反
====================
0110 0100 0100 新建目录默认权限 - 转为十进制
0110 0100 0100 = 644
即该用户新建目录的默认权限为644
,即为rw-r--r--
。
公式
按照umask计算的原理很麻烦,所以弄一个公式来总结计算如下:
目录(文件)的初始权限 = 目录(文件)的最大默认权限 - umask权限
而这种公式方式需要注意分类:
目录公式:
用户目录默认权限 = 777 - umask值
文件公式:
1)偶数umask:用户文件默认权限 = 666 - umask偶数值
2)奇数umask:用户文件默认权限 = 666 - umask奇数值 + 1
示例
对照原理示例umask值=022,计算如下:
用户目录默认权限:777-022=755
,即为rwxr-xr-x
。
用户文件默认权限:666-022=644
,即为rw-r--r--
。对照引言中的实验umask值=027,计算如下:
用户目录默认权限:777-027=750
,即为drwxr-x---
。
用户文件默认权限:666-027+1=640
,即为-rw-r-----
。
umask值修改
暂时修改
暂时修改的方式,可以通过umask命令来更改,比如计算出权限对应的umask值要改为027,则直接用该用户登录Linux系统后,使用命令umask 027
即可。但是,一旦用户退出登录后,umask将恢复默认值,刚才设置的将会失效。所以,这种umask命令方式,只是适合当前会话。
永久修改
除了使用umask命令进行当前会话的用户默认权限设置外,我们还可以对该用户永久性修改umask值。针对某个用户修改,需要用该用户登录Linux,然后修改/etc/profile文件中的umask值。
修改前:
[userA@linux01 ~]$ umask
0027
[userA@linux01 ~]$ vim /etc/profile
修改后:
[userA@linux01 ~]$ vim /etc/profile
[userA@linux01 ~]$ umask
0022
[userA@linux01 ~]$ mkdir dir03
[userA@linux01 ~]$ touch t3.txt
[userA@linux01 ~]$ ll
total 12
drwxr-x--- 2 userA userA 4096 Mar 27 10:25 dir01
drwxr-x--- 2 userA userA 4096 Mar 27 10:25 dir02
drwxr-xr-x 2 userA userA 4096 Mar 27 21:48 dir03
-rw-r----- 1 userA userA 0 Mar 27 10:25 t1.txt
-rw-r----- 1 userA userA 0 Mar 27 10:25 t2.txt
-rw-r--r-- 1 userA userA 0 Mar 27 21:48 t3.txt
明显可以看出修改后,新建目录和文件的权限已经发生变化。
总结
如果我们登陆Linux系统后,新建目录或者文件很多,且权限都是某种特定的,则可以通过umask命令来暂时设置当前会话的默认权限。如果后期需要永久性的可以修改/etc/profile
中的umask值。
当然,对于应用程序一些吐文件时需要先新建的目录或者文件设置权限时,我们为了安全方式,可能不能永久性修改umask值,但,我们可以在启动脚本里面加上umask 022
这种命令,来使得当前应用启动时受到当前启动脚本中的umask来控制应用程序输出的文件或目录的默认权限。
Linux—用户新建目录和文件的默认权限设置:umask详解的更多相关文章
- Linux下遍历目录及文件,更改权限
Linux下遍历目录及文件,更改权限 引言: 我在Linux下搭建android时,将eclipse及sdk复制到/usr/下时,总会出现无法读,无法写写样的问题. 解决方案: 有两个方案: 一.将复 ...
- 如何设置UNIX/Linux中新创建目录或文件的默认权限
在unix或者linux中,每创建一个文件或者目录时,这个文件或者目录都具有一个默认的权限,比如目录755,文件644,那么这些默认权限是怎么控制的呢? 答案是"umask"权限掩 ...
- Linux创建目录和文件的默认权限设置
这两天,项目中使用jenkins自动构建系统时遇到了在Linux中创建目录和文件的权限问题,临时的解决办法是在脚本中增加了chmod赋权限命令; 偶然想到Linux应该是可以设置默认权限的,故学习了一 ...
- mysql基础之mariadb的安装,连接,用户,密码,权限设置语句详解
一.mariadb安装 1.配置mariadb源: [root@ren7 ~]# vim /etc/yum.repos.d/mariadb.repo [mariadb] name = MariaDB ...
- Linux 文件和目录的权限设置 - umask(默认权限),chmod(改变权限)
1. chmod 改变已有目录或文件的权限 chmod 设置已有目录或文件的权限.可以为指定范围的用户添加或删除权限. 权限范围的表示法如下: u:User,即文件或目录的拥有者: g:Group,即 ...
- linux用户,组,文件等操作
参考: https://blog.csdn.net/chengqiuming/article/details/78601977 , https://www.cnblogs.com/123-/p/4 ...
- Linux文件的默认权限:umask
1. 文件的默认权限 Linux下当我们新建一个文件和目录时,该文件和目录的默认权限是什么? 通过umask命令来查看: $ umask0002 $ umask -Su=rwx,g=rwx,o=rx ...
- linux下为目录和文件设置权限
摘:linux下为目录和文件设置权限 分类: Linux2012-05-09 03:18 7456人阅读 评论(1) 收藏 举报 linuxwordpressweb数据库serverfile linu ...
- Linux中/proc目录下文件详解
转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...
随机推荐
- ADN vs CDN All In One
ADN vs CDN All In One Netlify & JAMstack https://app.netlify.com/teams/xgqfrms/sites ADN Applica ...
- Publish/Subscribe Pattern & Vanilla JavaScript
Publish/Subscribe Pattern & Vanilla JavaScript https://en.wikipedia.org/wiki/Publish–subscribe_p ...
- nest cli bug
nest cli bug Error: Collection "@nestjs/schematics" cannot be resolved. Error: Collection ...
- how to copy to clipboard using windows cmd
how to copy to clipboard using windows cmd Windows clipboard command line https://www.labnol.org/sof ...
- trao 模拟点击 & js auto click
trao 模拟点击 & js auto click 日历上选择某一天,在 scrollview 自动定位到选择的那一天 click 后获取 item 的 e.target.offsetLeft ...
- 注解处理器APT详解
本文转载自ANNOTATION PROCESSING 101 Introduction In this blog entry I would like to explain how to write ...
- .NET Core Swagger 的分组使, 以及相同Action能被多个分组公用,同时加载出尚未分组的数据出来
1.本文章参考 点击链接跳转 改写的 一对多分组模式.需要一对一的可以参考 2.本文主要讲的是 一对多 分组公用, 同时把尚未分组的加载出来 3.效果演示GIF图: 具体操作代码如下: 1.在项目创建 ...
- 【Notes_2】现代图形学入门——向量与线性代数
向量与线性代数 点乘和叉乘 Dot Multiplication 点乘在图形学的应用 (1) 求两个向量之间的夹角: $$\cos(\theta) = \frac{(\vec{a} \cdot \ve ...
- python进阶(7)垃圾回收机制
Python垃圾回收 基于C语言源码底层,让你真正了解垃圾回收机制的实现 引用计数器 标记清除 分代回收 缓存机制 Python的C源码(3.8.2版本) 1.引用计数器 1.1环状双向链表 refc ...
- Same Origin Policy 浏览器同源策略详解
同源策略 Same Origin Policy 日常开发中最常与网络打交道,那关于浏览器的同源策略和跨域相关的知识是该整理一下了. 首先需要明确的是,同源策略是浏览器的安全策略,由于存在这个策略,我们 ...