如何设置系统范围的umask?

新手上路,请多包涵

我在一个运行 Linux(Debian 和 Ubuntu)的实验室工作。用户名和组名由 NIS 和 yp 处理。我们有一些共同的用户,每个人都可以访问来运行实验,然后我们每个人都有自己的用户,此外还有一个共同的组,我们都是其中的一员。

我怎样才能使共享 /home/ 驱动器(NFS)上的所有文件和目录都被用户/组读/写(/可执行)?基本上我想要的是

chmod -R 664 /home
chgrp -R commongroup /home

或等效地 umask 0002

但是运行上述命令只能修复文件夹中的当前文件,而 umask 仅适用于单个用户,并且每次用户登录时都必须运行,即。在 .bashrc 文件中(这是否适用于通过 gnome 更改模式?)。是否有系统范围的命令或设置可用于确保我们的公共组对公共文件具有写入权限?

原文由 HansHarhoff 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 729
2 个回答

Debian 和 Ubuntu 都附带 pam_umask 。这允许您在 /etc/login.defs 中配置 umask,并让它们在系统范围内应用,无论用户如何登录。

要启用它,您可能需要添加一行到 /etc/pam.d/common-session 阅读

session optional pam_umask.so

或者它可能已经启用。然后编辑 /etc/login.defs 并将 UMASK 行更改为

UMASK           002

(默认为 022 )。

请注意,用户仍然可以在自己的 ~/.profile~/.bashrc 或类似文件中覆盖 umask,但是(至少在新的 Debian 和 Ubuntu 安装中)不应该在 /etc/profile/etc/bash.bashrc 。 (如果有,只需删除它们。)

原文由 ephemient 发布,翻译遵循 CC BY-SA 3.0 许可协议

首先,确保安装了 pam-modules 包。这使得 pam_umask 模块可用。然后确保 /etc/pam.d/common-session 有一行表格

session optional pam_umask.so

以便启用 pam_umask

现在,根据 pam_umask 手册页,默认 umask 是在登录时通过检查以下每个位置来确定的,按顺序:

  1. /etc/pam.d/common-session 中设置的硬系统范围默认值。要以这种方式进行设置,请将上述文件中的行替换为:
    session optional pam_umask.so umask=002

  1. /etc/passwd 中单个用户的 GECOS 字段中的条目会覆盖该特定用户的软系统范围默认值。使用以下形式的命令创建该条目:
    chfn --other='umask=002' username

  1. UMASK=002 中的 /etc/default/login 形式的一行(您可能需要创建该文件)设置了一个软系统范围的默认值。

  2. 来自 /etc/login.defsUMASK 值。该值也用于其他用途(计算正在创建的新用户的主目录的权限;有关更多详细信息,请参见 /etc/login.defs 中的注释)。因此,最好避免依赖此设置常规登录的默认 umask,以保持独立。

因此,在您的情况下,如果您希望可以覆盖单个用户的设置,您应该在 /etc/default/login 中配置它,或者如果您愿意,如上所述在 /etc/pam.d/common-session 中设置它它对所有用户都是一样的。

请注意,即使使用硬默认设置,用户仍然可以通过在 shell 提示符下使用 umask 命令或在他们的 .profile 脚本中手动覆盖默认值 umask

另请注意,设置此默认值的传统 Unix 方法是将 umask 命令添加到 /etc/profile ,这仍然有效。但这不是在 Ubuntu 上配置此类内容的推荐方式,因为使用脚本和 GUI 很难可靠地进行管理。

请注意,不幸 的是,对于已通过 systemd --user 转换为启动的任何应用程序,这将停止工作

原文由 Yitz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题