我在运行Linux(Debian和Ubuntu)的实验室工作。用户名和组名由NIS和yp处理。我们有一些普通用户,每个人都可以访问运行实验,然后我们每个人都拥有自己的用户,此外还有一个我们都是其成员的公共组。
如何使用户/组对共享/home/
驱动器(NFS)上的所有文件和目录进行读/写(/可执行)?基本上我想要的是
chmod -R 664 /home
chgrp -R commongroup /home
或等效umask 0002
。
但是运行上述命令只会修复文件夹中的当前文件,而umask仅适用于单个用户,并且必须在每次用户登录时运行,即。在.bashrc
文件中(并且这将通过gnome用于更改模式吗?)。是否有系统范围的命令或设置可用于确保我们的commongroup对公共文件具有写入权限?
答案 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:
/etc/pam.d/common-session
中设置的硬系统默认值。要以这种方式设置,请使用以下命令替换上述文件中的行:
session optional pam_umask.so umask=002
/etc/passwd
中单个用户的GECOS字段中的条目会覆盖该特定用户的软系统范围默认值。使用以下形式的命令创建该条目:
chfn --other='umask=002' username
UMASK=002
中/etc/default/login
形式的一行(您可能需要创建该文件)设置软系统范围的默认值。
来自UMASK
的{{1}}值。该值还用于其他内容(计算正在创建的新用户的主目录的权限;有关详细信息,请参阅/etc/login.defs
中的注释)。所以最好不要依赖它来设置常规登录的默认umask,以保持分离。
因此,在您的情况下,如果您希望可以覆盖单个用户的设置,则可以在/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 +