![更改 umask 值](https://linux22.com/image/121072/%E6%9B%B4%E6%94%B9%20umask%20%E5%80%BC.png)
我想将umask
特定用户的值从 022 更改为 002 jboss
。现在 /etc/profile 中的设置如下:
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi
如果我更改/etc/profile
,它将影响所有用户,但我只想更改用户的设置jboss
。为此,我可以.basrhrc/.bash_profile
在用户的主目录下进行编辑。但对我来说问题是用户没有 shell 。任何umask
为没有 shell 的用户设置的方法。
答案1
这umask
是进程的属性,而不是用户的属性。
它由子级继承,并在执行命令(甚至是 setuid 命令)时保留。
它是通过umask()
系统调用设置的。该umask()
系统调用的 shell 接口是umask
内置命令。
每当进程更改 uid 时,没有什么神奇的方法可以更改 umask,但可以配置一些通常用于更改 uid 的程序。至少在 Linux 上使用 PAM 堆栈(通常是登录程序)、使用模块pam_umask
或sudo
.
但在这里,考虑到该用户没有 shell,我想它不是登录的用户,并且您实际上希望以该用户身份运行一个特定的软件来拥有该 umask。然后,这应该只是启动该软件的问题:
(umask 002; exec that-software)
在 shell 脚本中。