如何为整个 gnome 会话设置`umask`?

Chr*_*uet 12 umask gnome3

使用 Gnome 3.18。我在其他家庭成员之间共享文件,但我的发行版 (archlinux) 上的默认 umask 是0022. 所以创建的每个文件/目录对于我们的公共组都是不可写的。

我尝试插入umask 0002,/etc/profile但 gnome 会话仍在使用0022. 不过,它适用于登录 bash shell。

我也尝试在/etc/pam.d/system-auth: 中添加这一行: session required pam_umask.so umask=0002 它与/etc/profile. 我试过

如果我在 gnome-terminal shell 中手动更改 umask,然后我从中启动一个应用程序,比如 gedit,然后它创建的文件具有所需的权限。如果我从 gnome 菜单启动 gedit,则不会。所以我的事情真的是为gnome会话设置umask,我找不到在哪里做。

编辑(回答吉尔斯的评论):我使用 gdm 3.18 作为 DM。我还尝试将 pam_umask 行添加到/etc/pam.d/gdm-launch-environment. 所有其他gdm-*文件都包含session来自文件的包含system-auth,因此它们不需要更多。它不会改变任何东西。

/etc/login.defs包含UMASK 077但也USERGROUPS_ENAB yes应该为主要组是用户名的用户设置umask为0077或0007。

包含022umask in的唯一文件/etc是/etc/profile但那是我的第一次尝试。

至于/etc/Xsession.d,我没有这个目录。此外,由于 wayland 现在是默认的显示服务器,我不确定是否应该将 umask 设置为 X 初始化的一部分,即使我自己仍在使用它。

seb*_*sth 6

某些 Gnome 应用程序由 启动systemd --user,在这种情况下,0022无论pam_umask的配置值如何,systemd都会将umask 设置为。我不知道任何解决方法,但我在 systemd github 问题跟踪器上打开了一个问题。此问题也在Gnome bugzilla上报告。

使用的umask设置pam_umask按预期工作对于不被启动的应用程序systemd --user。

在Ubuntu bugzilla 上建议了一种解决方法,将 systemd 服务覆盖放置到所有受影响的应用程序。

更新:对于 systemd 246 及更高版本,pam_umask 应该可以正常工作。较新的发行版应该附带修复了错误的版本。


自己调查这个

您可以使用以下命令以树格式(父/子进程)列出系统上运行的进程:

pstree -Tapu
Run Code Online (Sandbox Code Playgroud)

为以下各项查找PID:(1)您会话的systemd --user实例;(2) 它启动的应用程序,例如 gedit,它将作为子进程显示给systemd --user;和(3)在你的会话中的处理不被systemd --user推出。

对比使用umasks在报道PROCFS:

grep Umask /proc/<pid>/status
Run Code Online (Sandbox Code Playgroud)

systemd --user本身(1)和未由它启动的进程(3)应该具有由pam_umask设置的正确umask。systemd --user (2)启动的进程的umask 为. 0022


小智 2

要在系统范围内设置默认 umask,您必须首先启用它,这在这里得到了很好的解释:

http://manpages.debian.org/cgi-bin/man.cgi?query=pam_umask&sektion=8
Run Code Online (Sandbox Code Playgroud)

上面的链接适用于 debian 和 ubuntu,但对于所有其他 Linux 系统也是如此。

要启用 umask (可能已经存在),您需要添加一行/etc/pam.d/common-session:

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

启用后,您可以在以下位置进行设置:

/etc/login.defs
Run Code Online (Sandbox Code Playgroud)

我看到你已经找到了这个文件,所以你需要做的就是设置:

# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK           077
Run Code Online (Sandbox Code Playgroud)

并将其 UMASK 设置为 0002 或任何您想要的值。

这将在系统范围内设置默认值,这意味着所有用户都将从那里获取 umask,除非他们没有在.profile 或.bashrc中特别设置

  • 这只是文件名的分发选择的问题。我知道 debian 使用 `common-*` 进行通用设置。Arch 与 RedHat 一样,为此使用“system-auth”文件。不管怎样,我尝试了你的建议,将“会话可选 pam_umask.so”和“UMASK 002”添加到“/etc/login.defs”中,正如我所料,与“pam_umask.so umask=0002”一样,它工作了tty `login` 会话(或通过 SSH),但 Gnome 一如既往地设置了 `0022` umask。Gnome 必须使用内部 umask 设置,或者 archlinux 正在使用一个……我将尝试另一个发行版,看看问题是否也出现。 (5认同)