SDB:设置 UMASK

跳转到:导航搜索


在 openSUSE 上测试

推荐文章

相关文章


本文档描述了用户登录时使用的 UMASK 值以及为新用户设置主目录权限掩码的方法。

情况

“如何设置 umask?”这个问题在邮件列表和论坛上经常出现。然而,对此问题的正确答案却很少,因为有很多方法可以实现 umask 命令在登录后显示期望的 umask 值,但这并不总是意味着使用了正确的方法。

本文档解释了应该如何“正确”地持久地设置系统范围的 umask 或登录后为每个用户/组设置的 umask 值。


步骤 [ 此章节尚未完成,需要润色,请谨慎对待 ]

更改用户登录时设置的 UMASK 值

更改用户 umask 的常见方法是将期望的 umask 放入 "profile.d" 文件中。不建议更改 /etc/profile 文件,并且该文件的第一行注释中也对此进行了说明。老式方法是创建一个 /etc/profile.d/umask.sh 文件来更改 umask(此文件可以具有基于脚本的逻辑,为不同的用户或组设置不同的 umask)。通常,使用 $HOME/.profile 文件为每个用户设置 umask。尝试从其他 shellrc 文件(如 .bashrc 或 .bash_profile)设置 umask 是完全错误的且不可靠的。即使使用 profile.d/ 或 $HOME/.profile 文件也不是 100% 可靠的(例如,KDE 没有正确地为它的会话获取配置文件,因此不要惊讶,你的 /etc/profile.d/my_perfect_functions.sh 中的优秀函数和别名在 KDE shell 中不可用,而 .bashrc 中的函数却可以工作)。

无论如何,使用配置文件更改 umask 是一种被弃用的方法,应该使用以下 PAM 方法。



正确的方法是使用 PAM 子系统来更改系统范围或每个用户/组的 umask。请注意,pam.d/ 文件中的标题注释劝阻用户手动编辑这些文件,并且手动更改可能会在重新创建这些文件时使用 pam-config 丢失。这里的情况类似于 yast。Yast 也不喜欢对其管理的文件的手动更改。你可以使用 pam-config 方法或手动配置,但 pam-config 并非万能的,某些更改无法使用此工具完成,就像手动修改 pam.d/ 文件允许的那样。从熟练的系统管理员的角度来看,应该优先选择“控制火车残骸”的方式,因此学习如何正确修改 pam.d/ 文件应该优于使用 pam-config 包装器。

示例 /etc/pam.d/common-session 片段,添加到此文件的末尾,为非用户组 (0027) 和 secret-agents 组 (0077) 以及 uid 为 1005 的用户 (0002) 设置不同的 umask

session [default=1 success=ignore] pam_succeed_if.so quiet user ingroup not-users
session optional pam_umask.so umask=0027
session [default=1 success=ignore] pam_succeed_if.so quiet user ingroup secret-agents
session optional pam_umask.so umask=0077
session [default=1 success=ignore] pam_succeed_if.so quiet uid eq 1005
session optional pam_umask.so umask=0002

请注意,最后的匹配会覆盖之前的匹配,因此,例如,如果你的新用户 joe 属于 secret-agents 组并且具有 uid 1005,那么使用上面的代码,他的最终 umask 将为 0002。

使用 pam-config 方法设置系统范围的 umask 以下不应在常规工作站上使用。建议以每个用户/组为基础设置 umask。如果你仍然想这样做,请将以下行添加到 /etc/pam.d/common-session (示例中使用了 0027)

session optional pam_umask.so umask=0027

更改应用于新用户主目录的权限掩码值

当使用 useradd 命令添加新用户时,会考虑文件 /etc/default/useradd 和 /etc/login.defs,以提供默认值。只有了解自己在做什么的经验丰富的管理员才能更改这些值。如果你不想处理更改这些默认值,请使用 -K UMASK=$mask 来应用请求的 umask 到新创建的主目录和文件。例如,添加用户 joe 且 umask 为 0077 的 useradd 命令如下所示

useradd -K UMASK=0077 -m joe

值得注意的是,没有什么是不完美的,并且新创建的主目录(以及其中的一些文件)将具有正确的权限,但 skel 文件在大多数情况下将具有从默认 0022 umask 派生的权限,需要手动更改才能更正这些权限。有关更多信息,请查看 bug ID 943176。


在 YAST 中,此权限掩码由“用户和组管理”->“新用户默认值”->“主目录的 Umask”控制。这种命名方式可能令人困惑,因为它与登录用户会话中的 umask 值完全不同(参见上文)。

参见

man pam_umask