首页 > 编程知识 正文

linux gzip命令,lsattr命令详解

时间:2023-05-03 20:04:45 阅读:50883 作者:4402

原始标题:如何使用Linux umask命令

新文件或目录的默认权限是什么? 我如何更改用户创建的文件和目录的默认访问权限? 本文介绍相关内容。 说明:本演示文稿的Linux环境为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相关的设置。

# umaskisthedefaultumaskvalueforpam _ umaskandisusedby

# useraddandnewuserstosetthemodeofthenewhomedirectories。

# 022 is the ' historical ' valueindebianforumask

# 027,or even 077,couldbeconsideredbetterforprivacy

# thereisnoonetrueanswerhere 3360 eachsysadminmustmakeuphis/her

# mind

#

# If USERGROUPS_ENAB is set to 'yes ',thatwillmodifythisumaskdefaultvalue

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

# thesameastheprimarygroupname : for these,the user permissions will be

#使用As组权限,e. g. 022 will become 002。

#

# prefixthesevalueswith '0' to get octal,'0x' to get hexadecimal。

#

UMASK 022

.

# enablesettingoftheumaskgroupbitstobethesameasownerbits

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

# the same as gid,andusernameisthesameastheprimarygroupname。

#

# If set to yes,userdelwillremovetheusersgroupifitcontainsno

# more members,anduseraddwillcreatebydefaultagroupwiththename

# of the user。

#

user groups _ enab是

乍一看,上述配置信息应该是用户默认的umask为022。 仔细阅读相关说明后,如果USERGROUPS_ENAB设置为yes (默认值),则对于uid和gid相同且用户名和主体组名相同的用户,umask将更改为002。 所以我看到了用户nick的umask是002。

由于根用户的特殊性,默认的umask与其他用户不同,值为022。

umask命令

umask是bash的内置命令,用于显示或设置新文件/目录的权限掩码(umask )。 之前用数字输出了用户的默认umask值

,这次我们以符号的方式进行输出:

$ umask -S

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

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

设置 umask 值

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

$ umask 026

026 的含义为:去掉 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)。

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

责任编辑:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。