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 的意义为:密码
对应于 root 的 umask 默认值 022文件
注意,不要直接用数字相减。好比 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 文件中。