Linux umask与文件默认权限

戏子无情 提交于 2019-12-27 21:24:09

【推荐】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 文件中。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!