Linux umask与文件默认权限

Linux下建立文件和目录时,系统会为他们赋予默认的权限,而默认的权限则由 umask 的值决定(umask 的默认设置,能够在 /etc/profile 这个文件中找到)。在终端下输入 umask 指令,则会显示如下内容:bash

[root@localhost ~]# umask
0022

不一样的用户 umask 的默认值不同,上面显示的 0022 表明了 root 用户的 umask 默认值。4个数字分别表示:code

第1位:特殊权限(SUID、SGID、SBIT)class

第2位:文件拥有者权限file

第3位:文件拥有者组权限终端

第4位:其它用户权限权限

在权限默认属性上,Linux的文件和目录是不同的。文件默认是没有x权限,即默认最大权限为rw,最大值为666;目录默认最大权限为rwx,最大值为777。所以,默认的状况下,umask 的意义为:密码

  • 若用户建立的是文件,则要在 rw 权限中减去 umask 对应的权限
  • 若用户建立的是目录,则要在 rwx 权限中减去 umask 对应的权限

对应于 root 的 umask 默认值 022文件

  • 建立文件时,文件默认的权限为:(rw-rw-rw-)-(----w--w-)=(rw-r--r--)
  • 建立目录时,目录默认的权限为:(rwxrwxrwx)-(----w--w-)=(rwx-r-xr-x)

注意,不要直接用数字相减。好比 umask 的值为 033,若用数字相减,则建立文件时默认值为633,文件就有执行权限了,这样是不对的。co

特殊权限数字

上面提到 umask 的值的第1位数字表示特殊权限(SUID、SGID、SBIT),那什么是特殊权限呢?Linux系统的用户密码是保存在 /etc/shadow 这个文件中的,咱们看一下这个文件的权限

[root@localhost ~]# ll /etc/shadow
----------. 1 root root 1293 12月 22 15:29 /etc/shadow

上面显示这个文件只能 root 用户才有修改权限。可是平时普通用户执行 /usr/bin/passwd 指令是能够正常修改密码的,这不是和Linux的文件权限出现冲突了吗?这时候特殊权限就派上用场了。看一下 /usr/bin/passwd 命令的权限

[root@localhost ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

上面出现了一个s权限,这就是特殊权限SUID。它的意思是 /usr/bin/passwd 指令在运行时,暂时获取到该文件拥有者的权限(这里是root),因此修改密码时才能成功保存到 /etc/shadow 文件中。

相关文章
相关标签/搜索