使用Gnome 3.18。我在其他家庭成员之间共享文件,但是我发行版(archlinux)上默认的umask是0022。因此,创建的每个文件/目录对于我们的公共组来说都不是可写的。
我试图将umask 0002放在/etc/profile中,但是gnome会话仍然在使用0022。不过,它适用于登录bash。
我还尝试在/etc/pam.d/system-auth:session required pam_umask.so umask=0002中添加这一行,它的效果与/etc/profile中的效果相同。我试过了
gedit说,如果我在gnome终端shell中手动更改umask,那么我将从它启动一个应用程序,然后由它创建的文件具有想要的权限。如果我从gnome菜单中启动gedit,它就不会启动了。所以我的问题是设置gnome会话的umask,但是我找不到它的位置。
编辑(回答吉利斯的评论):我使用gdm 3.18作为DM。我还尝试将pam_umask行添加到/etc/pam.d/gdm-launch-environment中。所有其他gdm-*文件都包含来自system-auth文件的session,因此它们不需要更多内容。这不会改变任何事情。
/etc/login.defs包含UMASK 077,但也包含USERGROUPS_ENAB yes,它应该为主要组为用户名的用户将umask设置为0077或0007。
在022中,/etc中唯一包含umask的文件是/etc/profile,但这是我第一次尝试。
至于/etc/Xsession.d,我没有这个目录。此外,由于wayland现在是默认的显示服务器,我不确定umask是否应该设置为X初始化的一部分,即使我自己仍然在使用它。
发布于 2017-07-18 16:40:49
一些Gnome应用程序是由systemd --user启动的,在这种情况下,系统将umask设置为0022,而不管pam_umask的配置值如何。我不知道有什么解决办法,但我在systemd问题跟踪器上打开了问题。这一问题也在Gnome bugzilla上有报道。
使用pam_umask的U掩膜集可以用于systemd --user未启动的应用程序。
在Ubuntu bugzilla上提出了一种解决方法,即将systemd服务覆盖到所有受影响的应用程序。
更新:对于systemd版本246和更高版本,pam_umask应该像预期的那样工作。较新的发行版应该附带一个修复错误的版本。
亲自调查
可以使用以下方法以树格式(父进程/子进程)列出系统上运行的进程:
pstree -Tapu查找PID用于:(1)会话的systemd --user实例;(2)由它启动的应用程序,如gedit,它将显示为systemd -user的子进程;(3)会话中未由systemd -user启动的进程。
比较procfs中所报告的数据:
grep Umask /proc/<pid>/statussystemd --用户本身(1)和未由它启动的进程(3)应该具有由pam_umask设置的正确的umask。由systemd -user (2)启动的进程将包含0022。
发布于 2017-12-15 13:34:10
问题是塞巴什提到的。我尝试了很多事情,但后来我找到了一个解决办法,它包括覆盖dbus的(每个用户) UMask:
$ systemctl --user edit dbus在打开的文件中,只需写:
[Service]
UMask=002 # This is the umask I want to use该文件保存在.config/systemd/user/dbus.service.d/override.conf中,并重写dbus默认的umask,我认为它是从systemd -user继承的,因为dbus是由它启动的。只要退出并再次登录,gnome应用程序就应该使用指定的umask。只是个解决办法,但对我有用。
发布于 2016-01-12 17:46:24
要在系统范围内设置默认的umask系统,首先必须启用它,这里很好地解释了这一点:
http://manpages.debian.org/cgi-bin/man.cgi?query=pam_umask&sektion=8上面的链接适用于debian和ubuntu,但对于所有其他linux系统也是如此。
要启用umask (这可能已经到位),您需要在/etc/pam.d/common-session中添加一行:
session optional pam_umask.so一旦启用,您就可以将其设置为:
/etc/login.defs我看到您已经找到了这个文件,所以您需要做的就是设置:
# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077并将其设置为0002或任何你想要的。
这将在系统范围内设置默认值,这意味着所有用户都将从那里获取umask,除非他们没有在.profile或.bashrc中专门设置。
https://unix.stackexchange.com/questions/254378
复制相似问题