为所有用户设置umask

我试图把默认的umask设置为002,包括我的CentOS盒子上的所有用户。

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

除非你知道你在做什么,否则改变这个文件并不是一个好主意。 最好在/etc/profile.d/中创build一个custom.shshell脚本,以便对环境进行自定义更改,因为这样可以防止在将来的更新中进行合并。

所以我继续创build以下文件:
/etc/profile.d/myapp.sh
用单行:

 umask 002 

现在,当我创build一个以root身份login的文件时,这个文件诞生了664个权限,这是我所希望的。 但是由我的Apache mod_wsgi应用程序创build的文件,或使用sudo创build的文件仍然默认为644权限…

$ touch newfile (作为root):
结果= 664 (作品)

$ sudo touch newfile
结果= 644 (不起作用)

由Apache mod_wsgi应用程序创build的文件:
结果= 644 (不起作用)

由Python的RotatingFileHandler创build的文件:
结果= 644 (不起作用)

为什么会发生这种情况,以及如何确保664文件系统的权限,无论创build文件是什么?

profile是shell的启动文件。 在profile.d设置umask 002会为所有从loginshell启动进程的用户设置。

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

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

获得umask的最好方法是编辑root用户的/etc/bashrc文件,为其他用户编辑~/.bashrc文件。 你为~/.bashrc放入特定用户的任何东西都会覆盖你放入/ etc / profile的内容。

所以,找出你的apache在哪个用户下运行,并把umask放在~./bashrc文件中。

这适用于用户。 它包括交互式用户login,并可以通过采购文件来工作。 不需要注销和进入。

但是如果你要为守护进程设置umask,那么你需要进入初始化脚本,并在发送/etc/rc.d/init.d/functions文件之后把umask放在那里。 如果您在此之前设置了umask,则可能无法正常工作。 但是我已经看到一些守护进程,即使你在init脚本中设置了umask也不起作用,在RHEL中,一个简单的例子就是cobblerd。 为此,您需要将umask放在/etc/rc.d/init.d/functions文件中。

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

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