linux umask:文件访问权限控制预设值

1. umask 定义

        在 linux 系统中,umask 被定义在 /etc/profile 配置文件中,有一段 shell 脚本对 umask 是这么定义的。在 shell 会话输入命令:

$ cat /etc/profile        # 查看 /etc/profile 配置文件的内容

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002    # uid 大于 199,并且组名等于用户名 -gn(g:group n:name) -un(u:user n:name),即:普通用户
else
    umask 022    # root 用户的 uid = 0
fi

从以上 shell 脚本对 umask 的定义,我们可以知道:

(1)对于普通用户而言,umask 是八进制数(以数字 0 开头的数)002,这个数的二进制表示为:000,000,010。

(2)对于 root(超级用户)而言,umask 是八进制数 022,这个数用二进制表示为:000,010,010。

2. 文件和文件夹的访问权限 = mode & ~umask

        linux 系统在创建新文件夹时,会设置一个默认文件夹访问权限:mode = 0777(八进制数),这个数的二进制表示为:111,111,111。在创建新文件时,会设置一个默认的文件访问权限:mode = 0666(八进制数),这个数的二进制表示为:110,110,110。

        对于这个八进制数的二进制表达与访问权限的对应关系为:每三位为一组,从左往右第一组是拥有者(user)的访问权限、第二组是跟文件拥有者同组的用户的访问权限(group)、第三组是其他用户的访问权限(other)。每组从左往右,第一位是是否可读(1:可以,0:不可以)、第二位是是否可写(1:可以,0:不可以)、第三位是是否可执行(1:可以,0:不可以)。所以

(1)对于普通用户新创建的文件夹的访问权限为:mode & ~umask = 111,111,111 & 111,111,101 = 111,111,101,即对应于在 shell 会话执行命令行 $ ls l- 下显示的:drwxrwxr-x。对于普通用户新创建的文件的访问权限为:mode & ~umask = 110,110,110 & 111,111,101 = 110,110,100,即对应于在 shell 会话执行命令行 $ ls l- 下显示的:-rw-rw-r--。

(2)对于 root 用户新创建的文件夹的访问权限为:mode & ~umask = 111,111,111 & 111,101,101 = 111,101,101,即对应于在 shell 会话执行命令行 $ ls l- 下显示的:drwxr-xr-x。对于 root 用户新创建的文件的访问权限为:mode & ~umask = 110,110,110 & 111,101,101 = 110,100,100,即对应于在 shell 会话执行命令行 $ ls l- 下显示的:-rw-r--r--。

用普通用户创建文件夹,文件验证:

linux umask:文件访问权限控制预设值_第1张图片

用 root 用户创建文件夹,文件验证:

linux umask:文件访问权限控制预设值_第2张图片

3. umask 是什么?

        根据以上分析,umask 是 linux 系统对文件和文件夹访问权限控制的预设值。新创建的文件、文件夹的访问权限 = mode & ~umask,默认文件夹的访问权限 mode = 0777,默认文件的访问权限 mode = 0666。默认情况下,普通用户的 umask = 002,root 用户的 umask = 022。

4. 查看当前用户的 umask

$ umask

5. 永久设置 umask

$ vim /etc/profile               // 对 umask 值进行修改

$ source /etc/profile         //刷新环境变量

6. 临时修改 umask

在 shell 会话中,$ umask 002,仅在当前 shell 会话中有效。

linux umask:文件访问权限控制预设值_第3张图片

你可能感兴趣的:(linux环境编程学习笔记,linux,服务器,运维)