linux中设置默认权限的命令,Linux umask 命令使用详解

原标题:Linux umask 命令使用详解

新建一个文件或目录,它的默认权限是什么?如果要修改一个用户创建的文件和目录的默认权限该如何做?本文将介绍相关的内容。说明:本文演示的Linux环境为 Ubuntu 16.04。

文件的默认权限

为了查看用户创建的文件和目录的默认权限,我们用一个普通的用户创建文件 myfile 和目录 mydir 并查看它们的默认权限:

fdfe6842c1f6c6dd1c0eb354c77a241c.png

目录的权限为 775,文件的权限为 664。对比之下发现目录比文件多了执行的权限。这是因为执行权限对于目录来说是非常重要的,有了目录的执行权限才能够进入目录中进行文件操作。

默认情况下对于目录来说最大的权限是 777,对于文件来说最大的权限一般为 666(只有可以执行的文件才添加可执行权限)。所以我们创建的文件和目录的共同特点是从最大权限中减去了 2,也就是其他用户的写权限。而这个被减去的值就是我们常说的 umask。umask 还是 bash 的一个内置命令,默认输出当前用户的 umask 值:

注意,umask 显示的值为从默认的最大权限中减去的值。上图中的第一个 0 表示的是特殊权限位,这里我们可以暂时忽略它。

系统的默认策略(Ubuntu16.04)

系统在用户登录时通过 login 程序调用 pam_umask 模块设置用户默认的 umask。从 login 程序的配置文件 /etc/login.defs 中我们可以找到 umask 相关的配置:

# UMASK is the default umask value for pam_umask and is used by

# useradd and newusers to set the mode of the new home directories.

# 022 is the "historical" value in Debian for UMASK

# 027, or even 077, could be considered better for privacy

# There is no One True Answer here : each sysadmin must make up his/her

# mind.

#

# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value

# for private user groups, i. e. the uid is the same as gid, and username is

# the same as the primary group name: for these, the user permissions will be

# used as group permissions, e. g. 022 will become 002.

#

# Prefix these values with "0" to get octal, "0x" to get hexadecimal.

#

UMASK 022

……..

# Enable setting of the umask group bits to be the same as owner bits

# (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is

# the same as gid, and username is the same as the primary group name.

#

# If set to yes, userdel will remove the user´s group if it contains no

# more members, and useradd will create by default a group with the name

# of the user.

#

USERGROUPS_ENAB yes

乍一看上面的配置信息,用户的默认 umask 应该是 022 才对啊。仔细地阅读相关的说明信息发现,当 USERGROUPS_ENAB 被设置为 yes 时(默认值),对于 uid 和 gid 相同且用户名和主组名相同的用户,系统会把其 umask 改为 002。所以我们看到用户 nick 的 umask 为 002。

由于 root 用户的特殊性,它默认的 umask 与其它用户是不同的,其值为 022:

umask 命令

umask 是 bash 的一个内置命令,用来显示或设置新建文件/目录的权限掩码(umask)。前面我们以数字的方式输出了用户默认的 umask 值,这次我们以符号的方式进行输出:

$ umask -S

以符号输出的就是用户创建目录时的默认权限,算一下,其实就是 775。

为了改变用户创建的文件/目录的默认值,我们可以改变 umask 的默认值。

设置 umask 值

最简单的方式就是为 umask 命令指定一个数字:

$ umask 026

026 的含义为:去掉 group 中的写权限,去掉 other 中的读写权限。

84721cdc997efbb393a1c723ff274b5f.png

这时创建的文件权限为 640,目录权限为 751。注意,修改 umask 后只有新建的文件和目录受影响,已经存在的文件和目录的权限不会被影响。

以符号的方式设置 umask 值

比如下面的命令:

$ umask u=, g=w, o=rwx

上面的命令表示从 group 中去掉写权限,从 other 中去掉读写执行的权限。

注意:"=" 号在 umask 命令和 chmod 命令中的作用恰恰相反。在 chmod 命令中,利用它来设置指定的权限,而其余权限则被删除。但是在 umask 命令中,将在原有权限的基础上删除指定的权限。

在 ~/.bashrc 文件中为用户设置默认的 umask

如果让用户每次登陆后都执行 umask 命令修改默认的 umask 值是不科学的,我们可以在用户的 ~/.bashrc 文件中执行 umask 命令,这样用户登录后 umask 的值自动就变成了设置的值。把下面的命令添加到 ~/.bashrc 文件的最后一行:

umask 026

保存后重新登录一次,然后查看 umask 的值:

文件和目录的创建

下面通过 strace 来跟踪文件和目录创建的过程,看看 mask 是如何影响它们的创建操作的。

创建一个文件

$ umask 077; strace -eopen touch testfile 2>&1 | tail -2; ls -l testfile

f7cf1ef09c1b0a9c3734f89e4e4f990d.png

上图中 open 函数使用 666 权限创建文件,但是由于设置了 umask 为 077,所以内核在创建文件时移除了 group 和 other 的 rwx 权限,最终创建的文件权限为 600。

创建一个目录

$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir

08988b7272bf606b2cf53cfedd08b0e7.png

上图中 mkdir 函数使用 777 权限创建目录,但是由于设置了 umask 为 022,内核最终创建的目录权限为 755。

umask 与 ACL

如果一个目录没有被设置 default ACL,那么将由 umask 决定新文件的 ACL 权限。这种情况其实就是我们常见的没有 ACL 权限时的情况。比如我们设置 umask 为 026,那么创建的文件和目录的权限就是由它决定的。

251d7b201d14c16d47a31ec00f38fa4a.png

如果一个目录被设置了 default ACL,那么将会由文件创建函数的 mode 参数和目录的 default ACL 共通决定新文件的 ACL 权限,此时 umask 被忽略。还以 umask 026 为例,我们创建一个目录 dir2 并设置 default ACL 权限:

$ setfacl -m d:u:tester:rwx dir2

5da79cc8a19c6ef17ad6be553d6a2efe.png

然后在 dir2 目录中创建文件 testfile:

这次 testfile 的权限已经不受 umask 的影响了!

总结

umask 是一个看似简单实则影响重大的命令,根据实际需求设置好 umask 不仅能够保护系统的安全,还会让操作变得轻松(少一些 Permission denied)。

来自:https://www.cnblogs.com/sparkdev/p/9651890.html返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 1
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值