【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
Linux下创建文件和目录时,系统会为他们赋予默认的权限,而默认的权限则由 umask 的值决定(umask 的默认设置,可以在 /etc/profile 这个文件中找到)。在终端下输入 umask 指令,则会显示以下内容:
[root@localhost ~]# umask
0022
不同的用户 umask 的默认值不一样,上面显示的 0022 代表了 root 用户的 umask 默认值。4个数字分别表示:
第1位:特殊权限(SUID、SGID、SBIT)
第2位:文件拥有者权限
第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,文件就有执行权限了,这样是不对的。
特殊权限
上面提到 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 文件中。
来源:oschina
链接:https://my.oschina.net/u/68887/blog/811273