为所有用户设置 umask

为所有用户设置 umask

我正在尝试将我的 CentOS 机器上所有用户(包括 root 用户)的默认 umask 设置为 002。

根据和其他答案,这可以通过编辑来实现/etc/profile。但是该文件顶部的评论说:

除非您知道自己在做什么,否则最好不要更改此文件。最好在 /etc/profile.d/ 中创建一个 custom.sh shell 脚本来对您的环境进行自定义更改,因为这将避免将来更新时需要合并。

因此我继续创建了以下文件:
/etc/profile.d/myapp.sh
只需一行:

umask 002

现在,当我以 root 身份登录创建文件时,该文件天生具有 664 个权限,这正是我希望的。但是由我的 Apache mod_wsgi 应用程序创建的文件或使用 sudo 创建的文件仍默认具有 644 个权限...

$ touch newfile(以 root 身份):
结果 = 664(作品)

$ sudo touch newfile
结果 = 644(无效)

Apache mod_wsgi 应用程序创建的文件:
结果 = 644(无效)

由 Python 的 RotatingFileHandler 创建的文件:
结果 = 644(无效)

为什么会发生这种情况?无论如何创建该文件,我该如何确保系统范围内的 664 个文件权限?

答案1

profile是 shell 的启动文件。在设置umask 002中将profile.d其设置为所有从登录 shell 启动其进程的用户。

您的两个示例性质不同。对于 Apache,您可以在init.d启动 http 服务器的脚本中设置 umask。

对于启动的进程,sudo您可以使用umasksudoers 文件中的选项。

答案2

完成 umask 操作的最佳方法是编辑/etc/bashrcroot 文件和~/.bashrc其他用户的文件。您为特定用户输入的任何内容~/.bashrc都将覆盖您在 /etc/profile 中输入的内容。

因此,找出您的 apache 在哪个用户下运行,并将 umask 放入~./bashrc文件中。

这适用于用户。它包括交互式用户登录,可以通过获取文件来开始工作。不需要注销和登录。

但是,如果您要为守护进程设置 umask,则需要进入 init 脚本并在其获取文件后将 umask 放在那里/etc/rc.d/init.d/functions。如果您在那之前设置 umask,它可能无法工作。但我见过一些守护进程,即使您在其 init 脚本中设置 umask 也无法工作,一个简单的例子是 RHEL 中的 cobblerd。为此,您需要将 umask 放在/etc/rc.d/init.d/functions文件本身中。

但主要是通过将 umask 值放入~/.bashrc文件起作用。

这就是我迄今为止的工作方式,但如果有其他意见,我会很高兴知道。

相关内容