Linux的权限系统保护着一个用户是否可以进入一个目录或者读、写、执行一个文件。通过在文件和文件夹上设置权限,权限可以赋予或者收回给不同的用户以及用户组。但是, 用户可以创建一个文件, 并期望其组中的其他人访问该文件, 但初始文件权限可以防止这种情况发生。为了帮助避免这种情况, 此配方将教您如何通过指定掩码值来设置新文件和目录的默认权限。
准备需要CentOS系统和管理员权限,使用root账户或者使用sudo。
它是如何做到的跟随下面的步骤来指定新文件或目录的默认权限:
- 打开/etc/profile文件,开始配置我们的全局掩码值:
vi /etc/profile
- 在文件的末尾,添加如下的指令(可以进行调整):
umask 0007
- 覆盖全局掩码,设置每个用户自己的掩码,打开用户的配置文件:
vi /home/tboronczyk/.bashrc
- 在文件的末尾,同样,加入我们的配置:
umask 0007
- 如果我们只是想在登陆后的session里面生效,那么我们就不用修改配置文件,直接在shell命令行里面打入如下的命令就好了:
umask 0007
注意- 如果我们想查看当前的掩码值,那么直接使用使用umask即可。
本篇文章展示了三个方法来配置掩码值。但是,如果想理解掩码值是如何工作的,我们需要了解传统的读写执行权限系统。
Linux文件系统里面的目录和文件属于一个用户以及用户组,并且设置了权限管理,谁可以访问,谁不可以访问。当一个用户尝试访问一个资源的时候,系统会对文件的属性信息以及用户的信息进行对比,判断请求访问可以还是不可以。
三种权限分别是读、写、执行。由于对每个值的访问只能是两个值之一 (允许或不允许), 并且由于此类二元选项可以用1表示 yes, 0 表示 "否", 因此可以将1和0的序列视为位模式, 其中每个权限在 序列。下图显示了如何将二进制是和否的列表转换为对人类友好的值:
二进制值表示用户是否有权访问资源
从文件或目录的角度来看, 有三种类型的用户。用户要么是文件的所有者, 要么是所属组的成员, 要么不是 (其他人)。
为每种类型的用户授予资源一组权限, 如下图所示:
文件或目录的完整权限集包括三种类型的用户
这是传统 Unix 权限系统背后的逻辑, 但如果一开始这似乎令人生畏, 请不要担心。确定一类用户的权限实际上只是一个加法的问题。从0开始, 根本没有访问权限。若要允许读取访问, 请添加4。对于写访问, 添加2。对于执行, 添加1。这些值来自于将位字符串中的权限值视为二进制数字, 但它们很容易记住。因此, 为了允许所有访问, 我们添加 4 2 1, 等于7。若要只允许读取和执行访问, 4 1 等于5。使用权限的次数越多, 您就会越能自动识别某些组合。
创建文件时, 系统以666开头作为默认值, 为所有三个类别的用户提供读和写访问权限。目录以777开头, 因为目录上的可执行权限允许用户遍历目录。然后, 系统减去创建用户的 umask 值, 结果将确定在创建资源时将为其分配哪些权限。
假设我们创建了一个新目录, 我们的 umask 值为0027。系统从所有其他用户的字段中减去 7, 从组的字段中减去2。7-7 为 0, 7-2 为 5, 因此新目录的默认权限为750。
因为我们从文件的默认值中减少一点开始, 所以最终可能会出现一个负权限号。如果 umask 使用值7屏蔽了所有权限, 但文件的起始值为 666, 则6-7 给出-1。超出0是没有意义的, 所以系统将其视为0。因此, 0027 的掩码为我们提供了650文件权限。
每当用户登录以配置其会话环境时, 都会执行。在配置文件中调用 umask 具有为所有用户设置掩码的效果。. bashrc 是在配置文件之后执行的, 并且是特定于用户的;因此, 它对 umaskoverrides 的调用将覆盖以前设置的值, 并为该特定用户设置掩码。
See alsoRefer to the following resources for more information about umask:
- Wikipedia: Umask (http://unix.stackexchange.com/questions/102075/why-are-666-the-default-file-creation-permissions)
- Why are 666 the default file creation permissions? (https://en.wikipedia.org/wiki/Umask)
- Controlling file permissions with umask (http://linuxzoo.net/page/sec_umask.html)