Linux下的权限掩码umask
权限掩码umask
我们都知道在linux下创建一个文件或者目录之后是可以通过chmod等命令进行权限设置,来达到给当前用户、用户组用户以及其他用户分配不同的访问权限。那么,我们新创建的目录和文件本身也是有它的默认权限的,这个默认权限是什么,就是由权限掩码umask所确定的。它的功能可以说与chmod刚好相反的,代表默认拿走的也就是说不要的权限。
所以说,umask是用来指定"目前用户在新建文件或者目录时候的权限默认值"。那我们 如何得知或者设置这个umask呢?
在linux下我们查看的方式有两种,一种可以直接输入umask,就可以看到数字形态的权限设置分数,一种则是加-S(Symbolic)参数,就能以符号类型的方式来显示出权限了。我先进行一次查看,显示如下所示:
我们在这里看到的0022有四组数字,第一组代表的是特殊权限,我们这里先不做讨论。
然而,在目录和文件的默认权限属性是不同的,因为对于一个目录来说它的x权限也就是执行权限是很重要的,进入目录等操作都是需要目录具有执行权限的,而对于文件来说,一般情况都是用于数据的记录操作,所以一般不需要执行权限。从而,在linux下默认的情况是这样的:
▶ 如果用户创建的是目录,则默认所有权限都开放,为777,默认为:drwxrwxrwx
▶ 如果创建的是文件,默认没有x权限,那么就只有r、w两项,最大值为666,默认为:-rw-rw-rw-
那么之前所说的拿走的权限就是这里这个默认值要减掉的权限,r、w、x分别是4、2、1,要拿掉读权限就输入4,拿掉写权限就输入2,以此类推。
再看上图,umask为022,也就是说,对于当前用户没有拿掉权限,group用户和other用户都被拿走了w权限,所以此时如果用户进行创建目录和文件的时候,默认权限是会进行如下的减法操作:
新建文件:666-022=644;
新建目录:777-022=755.
我们来验证一下是不是这样做的:
可以看到确实是这样的,目录的默认权限是rwxr-xr-x(755),文件的默认权限是-rw-r--r--(644)。
Umask的设置:
--------------------------------------------------------------------
在上面的umask为022,我们创建的目录对于同组用户是没有写权限的,在实际中可能需要给同组用户能够在目录下创建和修改文件,那么此时需要创建的目录同组用户是具有写权限的,也就是说我们的umask不要拿走同组用户的写权限,那么就是把umask设置为002就可以达到效果。
Umask的设置很简单,只需要在umask命令后加想要拿掉的权限数字就行:
可以看到此时新建的目录是具有写权限的。
Linux下的etc/profile和etc/bashrc中都有默认的umask设置,我们来看一下:
这个是在etc/profile中的一部分内容,可以看到根据不同的uid设置了不同的umask,其实在etc/bashrc文件中也有基本相同的这部分代码,我们可以在这两个文件中设置umask,那么二者有什么区别呢?如果实在etc/profile中修改,只有在重新登录用户的时候才会发生改变,而在etc/bashrc中修改的话要是切换目录就会发生改变,因为profile是在登录用户的时候调用的,而bashrc是在打开一个shell时候调用。在这里不做详细介绍。一般情况下,是不建议这么修改的,我们如果要设置的话就直接用umask命令做更改就行。
Root用户/普通用户
从上面我们又可以发现,在profile中设置了两个umask。之前我们是在root目录下查看的,此时我们切换到普通用户dh进行查看:
可以看到确实和root用户下不一样,此时的umask是0002,也就是说默认拿掉的权限少了。这是linux系统基于安全的考虑,对于一般用户身份,保留了用户组的写权限,而root 用户下是拿掉了这项权限的。
默认权限的计算:
--------------------------------------------------------------------
可以看到上面在计算创建的文件和目录的默认权限的时候,我写的是这样的:666-022=644;777-022=755.,但这并不是做了对应数字的加减,刚刚看到数字相减的结果和最后验证的结果是一样的,但这只是巧合而已。
我们知道上面的每一个数字是代表着某一个用户对于文件或者目录有没有读、写、执行权限的衡量,比如6,代表了rw-,即只有度读和写权限,是421中4+2的结果,所以并不是一个单纯的十进制数,我们在计算的时候并不能直接以十进制相减来计算。
其实也很简单,我们只要知道421分别对应rwx,在计算的过程中用rwx来算就行了,或者就用二进制计算。这个熟练一点的话根本不需要方法的,完全口算就可以出来的,熟练就好。
文章原创作者:Mr_Listening https://home.cnblogs.com/u/MrListening/
Linux下的权限掩码umask的更多相关文章
- [转]Linux下权限掩码umask
本文转自:http://www.cnblogs.com/123-/p/4188942.html ---------------------------------------------------- ...
- Linux下权限掩码umask
一 权限掩码umask umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读( ...
- Linux 下的权限改变与目录配置
Linux 下的权限改变与目录配置 ./代表本目录的意思. (1):用户与用户组, 1:文件所有者,文件被某一用户所有 2:用户组: 对文件给与一个或者多个用户权限配置 3:其它人: (2):l ...
- Linux下文件目录权限和对应命令的总结
Linux下的权限有rwx三种,分别对应读,写,执行三种,在对文件和目录时,分别是下列含义: 对应权限的命令为: 文件: r-- cat, more, head, tail w-- echo, vi ...
- 计算Linux权限掩码umask值
创建文件默认最大权限为666 (-rw-rw-rw-),默认创建的文件没有可执行权限x位. 创建目录默认最大权限777(-rwx-rwx-rwx),默认创建的目录属主是有x权限,允许用户进入. 简单的 ...
- linux下文件权限更改(转载)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_33571752/article/d ...
- linux下进程权限分析
转自http://blog.chinaunix.net/uid-27105712-id-3349522.html 在linux下,关于文件权限,大部分人接触比较多,也比较熟悉了解.但是对进程权限一般知 ...
- sqlite数据库读写在linux下的权限问题
近期在学linux,恰巧有个php项目要做.于是配置好环境打算在linux下做. 无奈站点执行后一片空白.经过调试发现是sqlite数据库的问题. 安装sqlite扩展 apt-get install ...
- linux下的权限控制
终于还是要弄服务器了,这是多年前用fedora的时候整理的,也贴出来,顺便也再复习一下. 先来了解一下文件属性,在shell环境里输入:ls -l 可以查看当前目录文件.如:drwxr-xr-x. 1 ...
随机推荐
- android 拍照或者图库选择 压缩后 图片 上传
通过拍照或者从相册里选择图片通过压缩并上传时很多应用的常用功能,记录一下实现过程 一:创建个临时文件夹用于保存压缩后需要上传的图片 /** * path:存放图片目录路径 */ private Str ...
- Java 容器相关知识全面总结
Java实用类库提供了一套相当完整的容器来帮助我们解决很多具体问题.因为我本身是一名Android开发者,包括我在内很多安卓开发,最拿手的就是ListView(RecycleView)+BaseAda ...
- Hibernate之QBC查询与本地SQL查询
1. QBC查询: QBC 查询就是通过使用Hibernate提供的QueryByCriteria API 来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口 ...
- HDU 5762 Teacher Bo (暴力)
Teacher Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 Description Teacher BoBo is a geogra ...
- jquery easyui防止超出浏览器边界
var easyuiPanelOnMove=function(left,top){ if(left<0){ $(this).window('move',{ left:1 }); } if(top ...
- [转]ORA-00907: 缺失右括号
转至:http://www.cnblogs.com/Olive116/p/5149680.html ORA-00907: 缺失右括号 前言 最近在开发过程中使用oracle数据库,在程序中进行查询数据 ...
- 第十五章 String讲解
package ch15; import java.util.Scanner; public class Test { public static void main(String[] args) { ...
- 编译小结(6)认识Automake
我前面说了很多如何用gcc或 Makefile怎么编译的东东,但在Linux下装过软件的都应当见过,很多源码安装的包是用Automake 来编译的.输入下"./configur ...
- Thinkphp框架----微信公众测试号开发(2)
---恢复内容开始--- 最近忙着投简历找工作.现在继续更 微信回复图文设置. 效果: 页面HTML需要一个form表单 简单效果: 接下来是数据库 字段:id title(标题) text(描述) ...
- ADO.NET 快速入门(九):使用关系型数据
DataSet 可以包含非关联表,也可以包含关联表.你可以把 DataSet 想象成一个文档数据.事实上,除了 DataSet 是基于层级模型的,其它和 XML 数据文档是一样的.由于数据通常存储在关 ...