如何设置系统范围的umask?

Han*_*off 62 linux system umask

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

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

chmod -R 664 /home
chgrp -R commongroup /home
Run Code Online (Sandbox Code Playgroud)

或者等价的umask 0002.

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

eph*_*ent 95

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

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

session optional pam_umask.so
Run Code Online (Sandbox Code Playgroud)

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

UMASK           002
Run Code Online (Sandbox Code Playgroud)

(默认为022).

请注意,用户仍然可以超越的umask在自己~/.profile~/.bashrc或相似的,但(至少在新Debian和Ubuntu的安装)不应该有umask的任何压倒一切的/etc/profile/etc/bash.bashrc.(如果有,只需删除它们.)

  • debian 7确实**不**默认启用此功能. (6认同)
  • 在12.04中,它默认启用. (3认同)

Yit*_*itz 23

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

session optional pam_umask.so
Run Code Online (Sandbox Code Playgroud)

这样pam_umask就可以了.

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

  1. 设置了硬系统范围的默认设置/etc/pam.d/common-session.要以这种方式设置,请使用以下方法替换上述文件中的行:

    session optional pam_umask.so umask=002
    
    Run Code Online (Sandbox Code Playgroud)
  2. 单个用户的GECOS字段中的条目将/etc/passwd覆盖该特定用户的软系统范围默认值.使用以下形式的命令创建该条目:

    chfn --other='umask=002' username
    
    Run Code Online (Sandbox Code Playgroud)
  3. 表单UMASK=002中的一行/etc/default/login(您可能需要创建该文件)设置软系统范围的默认值.

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

因此,在您的情况下,/etc/default/login如果您希望可以覆盖单个用户的设置,或者/etc/pam.d/common-session如果您希望它对所有用户都相同,则应将其设置为如上所述.

请注意,即使使用硬默认设置,用户仍可以umask使用umaskshell提示符或.profile脚本中的命令手动覆盖默认值.

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

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

  • Ubuntu Server 16.04.1中不存在`/ etc/defaults`.正确的路径是`/ etc/default/login`吗? (3认同)
  • 在某些情况下,有"USERGROUPS_ENAB"选项可以将"022"更改为"002". (2认同)