
概述新建一个文件或目录,它的默认权限是什么?如果要修改一个用户创建的文件和目录的默认权限该如何做?本文将介绍相关的内容。说明:本文的演示环境为 ubuntu 16.04。文件的默认权限为了查看用户创建的文件和目录的默认权限,我们用一个普通的用户创建文件 myfile 和目录 mydir 并查看它们的默认权限:目录的权限为 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 026026 的含义为:去掉 group 中的写权限,去掉 other 中的读写权限。这时创建的文件权限为 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上图中 open 函数使用 666 权限创建文件,但是由于设置了 umask 为 077,所以内核在创建文件时移除了 group 和 other 的 rwx 权限,最终创建的文件权限为 600。创建一个目录$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir上图中 mkdir 函数使用 777 权限创建目录,但是由于设置了 umask 为 022,内核最终创建的目录权限为 755。umask 与 ACL 如果一个目录没有被设置 default ACL,那么将由 umask 决定新文件的 ACL 权限。这种情况其实就是我们常见的没有 ACL 权限时的情况。比如我们设置 umask 为 026,那么创建的文件和目录的权限就是由它决定的。如果一个目录被设置了 default ACL,那么将会由文件创建函数的 mode 参数和目录的 default ACL 共通决定新文件的 ACL 权限,此时 umask 被忽略。还以 umask 026 为例,我们创建一个目录 dir2 并设置 default ACL 权限:$ setfacl -m d:u:tester:rwx dir2然后在 dir2 目录中创建文件 testfile:这次 testfile 的权限已经不受 umask 的影响了!总结umask 是一个看似简单实则影响重大的命令,根据实际需求设置好 umask 不仅能够保护系统的安全,还会让 *** 作变得轻松(少一些 Permission denied)。参考:Umaskumask man page鸟哥 umask
# UMASK is the default umask value is the value Debian ,or even ,Could be consIDered better up his/ private user will become to get octal, -> , -> ) non-root users,
$ umask -S
$ umask
$ umask u=,g=,o=rwx
$ umask ; strace -eopen testfile >& | -; -l testfile
$ umask ; strace -emkdir testdir; - testdir
$ setfacl -m d:u:tester:rwx dir2
总结 以上是内存溢出为你收集整理的Linux umask全部内容,希望文章能够帮你解决Linux umask所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)