使用 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 初始化的一部分,即使我自己仍在使用它。
某些 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中特别设置
| 归档时间: |
|
| 查看次数: |
6612 次 |
| 最近记录: |