如何设置系统范围的umask?

时间:2012-04-19 01:41:55

标签: linux system umask

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

如何使用户/组对共享/home/驱动器(NFS)上的所有文件和目录进行读/写(/可执行)?基本上我想要的是

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

或等效umask 0002

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

3 个答案:

答案 0 :(得分:95)

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安装中)不应该覆盖{{{ 1}}或/etc/profile。 (如果有,只需删除它们。)

答案 1 :(得分:23)

首先,确保已安装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
    
  2. /etc/passwd中单个用户的GECOS字段中的条目会覆盖该特定用户的软系统范围默认值。使用以下形式的命令创建该条目:

    chfn --other='umask=002' username
    
  3. UMASK=002/etc/default/login形式的一行(您可能需要创建该文件)设置软系统范围的默认值。

  4. 来自UMASK的{​​{1}}值。该值还用于其他内容(计算正在创建的新用户的主目录的权限;有关详细信息,请参阅/etc/login.defs中的注释)。所以最好不要依赖它来设置常规登录的默认umask,以保持分离。

  5. 因此,在您的情况下,如果您希望可以覆盖单个用户的设置,则可以在/etc/login.defs中进行配置,或者如果您需要,可以如上所述在/etc/default/login中进行设置对所有用户都一样。

    请注意,即使使用硬默认设置,用户仍可以在shell提示符下或/etc/pam.d/common-session脚本中使用umask命令手动覆盖默认umask

    另请注意,传统的Unix设置此默认设置的方法是向.profile添加umask命令,这仍然有效。但是在Ubuntu上配置这样的东西不是推荐的方法,因为使用脚本和GUI很难可靠地管理。

    请注意,不幸的是stopped working for any application which has been converted to launch via systemd --user

答案 2 :(得分:0)

为了匹配组权限,在服务器上,设置的gid位(“粘性位”之一)可以被视为一个附加选项。

如果共享目录链接到,则启动(使用root): chmod -R 2775 folder_for_the_group 可能很有趣。

对于在文件夹中创建的任何新文件,创建者将是所有者,但将自动指定该组(只要创建者是该组的一部分)。

权利'网格现在显示为-rwxrwsr-x +