文档

文档

过去,我总是设置umask~/.profile。我设置了umask077所以我的文档获得了 的权限600 (rw-------)。但~/.profile在 Ubuntu 17.04 中,将其设置为 不再有效。

因此,当在 Ubuntu 17.04 上的 gnome 会话中创建新文档时,我可以在哪里进行配置以便使用权限 600 创建它们?

答案1

要设置任何用户每天创建的所有目录和文件的权限:

  1. sudo nano /etc/pam.d/common-session
  2. 找到包含“sessionoptionalpam_umask.so”的行
  3. 将其更改为“会话可选 pam_umask.so umask=0077”
  4. 保存文件。
  5. 重启。

新文件将有 600 个。新目录将有 700 个。

答案2

tl; dr:在文件中用UMASK 022例如替换,但不能 100% 起作用。UMASK 027/etc/login.defs


文档

查看手册页(20.04)有关这方面的信息。有几个地方可以设置:我过去使用过/etc/pam.d/login或,但停止工作了,所以现在我使用哪个/etc/default/login/etc/login.defs部分作品。

PAM 模块尝试按以下顺序从以下位置获取 umask 值:

· umask=用户 GECOS 字段中的条目

· umask= 参数

· /etc/login.defs 中的 UMASK 条目(受 /etc/login.defs 中的 USERGROUPS_ENAB 影响)

· UMASK= 来自 /etc/default/login 的条目

(...)

例子

将以下行添加到 /etc/pam.d/login 以设置登录时用户特定的 umask:

    session optional pam_umask.so umask=0022

Ubuntu 18.04、Ubuntu 20.04

在文件中,/etc/login.defs有一个条目UMASK 022可以替换为,在我的情况下是UMASK 027。然后重新启动。结果如下:

Ubuntu 18.04:

$ umask
0022
$ more /etc/login.defs | grep ^UMASK
UMASK       027

$ echo foo > terminal

NOTE:  Open gedit from Dock and write file `dock`
       Open gedit from Menu and write file `menu`

$ ls -l dock menu terminal
-rw-r--r-- 1 daniel daniel 4 nov  4 16:11 dock
-rw-rw---- 1 daniel daniel 4 nov  4 16:11 menu
-rw-r--r-- 1 daniel daniel 4 nov  4 16:11 terminal

Ubuntu 20.04:

$ umask
0007
$ more /etc/login.defs | grep ^UMASK
UMASK       027

$ ls -l foo bar
ls: cannot access 'foo': No such file or directory
ls: cannot access 'bar': No such file or directory

$ touch foo
$ echo hello > bar
$ ls -l foo bar
-rw-rw---- 1 daniel daniel 6 nov  4 17:20 bar
-rw-rw---- 1 daniel daniel 0 nov  4 17:20 foo

可能在 17.04 中有效

请注意,此文件在我的 Ubuntu 版本中不存在,在这种情况下我们可以创建它。

$ sudo sh -c "echo 'session optional pam_umask.so umask=0027' >> /etc/default/login"

$ more /etc/default/login
session optional pam_umask.so umask=0027

邪恶的虫子

现在,如果我们重新启动并在终端中询问 umask,我们仍然会得到0022(在 Ubuntu 18.04 的情况下)而不是0027设置的 umask。请参阅错误 #1685754

但是如果我们打开一个应用程序(例如文本编辑器)并保存文件,我们会注意到新的 umask 影响了权限。从菜单打开它,而不是从终端打开它,因为它似乎umask从终端中拾取了(坏的)。

参考

答案3

我最近在 Ubuntu 20.04 TLS 上遇到了这个问题并找到了解决方案。

$ man -k umask
$ man pam_umask

这将让我们找到讨论 umask 的手册页的位置 - 所有信息都可以在那里找到。

/etc/pam.d/common-session

pam_umask模块会根据/etc/login.defs中的系统默认值和用户设置来设置umask。

这解决了不同 shell、显示管理器、远程会话等的 umask 设置不同的问题。

来自 PAM_UMASK(8):

pam_umask 是一个 PAM 模块,用于设置当前环境的文件模式创建掩码。PAM 模块尝试按以下顺序从以下位置获取 umask 值:

umask= 用户 GECOS 字段中的条目

umask= 参数 UMASK 条目

来自 /etc/login.defs(受 /etc/login.defs 中的 USERGROUPS_ENAB 影响)

UMASK= 来自 /etc/default/login 的条目

注意括号里的文字:受 /etc/login.defs 中 USERGROUPS_ENAB 的影响。

什么是 USERGROUPS_ENAB?

/etc/login.defs

如果 USERGROUPS_ENAB 设置为“yes”,则会修改私人用户组的 UMASK 默认值,即 uid 与 gid 相同,用户名与主组名相同:对于这些,用户权限将用作组权限,例如 022 将变为 002。

在没有指定的情况下,权限掩码(umask)被初始化为022。

您现在可以运行此命令:

$ sudo nl /etc/login.defs | grep USERGROUPS_ENAB

仔细检查您是否将 USERGROUPS_ENAB 设置为“是”,是否取消注释(默认),以及您可以在文档的哪一行找到它。

因此,当您将默认的“UMASK 022”更改为“UMASK 027”时,如果 USERGROUPS_ENAB 设置为“是”,您将看到您的 umask 已设置为 007(而不是 027) - 因为它忽略了第二位置(组权限)。

解决方法很简单:取消注释“USERGROUPS_ENAB”设置为“yes”的行。如果您已将 umask 值更改为“UMASK 027”,则重启后 umask 将被设置为 027。

您可以通过在 shell 中运行此命令来验证这一点。

$ umask

总而言之,唯一重要的配置文件是/etc/login.defs

将您的 umask 设置为所需值,并确保取消注释 USERGROUPS_ENAB 行以更改组权限。

希望这可以帮助。

答案4

如果您使用 GDM,它不会~/.profile像 LightDM 那样读取。并且终端通常会打开一个非登录 shell。最终结果是,~/.profile当您使用 GDM 登录后打开终端时,它根本不会加载。

任何一个:

  • 输入您的设置~/.bashrc,或
  • 设置你的终端来启动登录 shell,或者
  • 切换到 LightDM

相关内容