过去,我总是设置umask
为~/.profile
。我设置了umask
,077
所以我的文档获得了 的权限600 (rw-------)
。但~/.profile
在 Ubuntu 17.04 中,将其设置为 不再有效。
因此,当在 Ubuntu 17.04 上的 gnome 会话中创建新文档时,我可以在哪里进行配置以便使用权限 600 创建它们?
答案1
要设置任何用户每天创建的所有目录和文件的权限:
- sudo nano /etc/pam.d/common-session
- 找到包含“sessionoptionalpam_umask.so”的行
- 将其更改为“会话可选 pam_umask.so umask=0077”
- 保存文件。
- 重启。
新文件将有 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