设置Apache用户的umask

我正在设置一个LAMP服务器,并希望将Apache的umask设置设置为002,以便所有Apache创build的文件都具有设置的组写入权限位(因此同一组的成员可以覆盖文件)。

有谁知道如何做到这一点? 我知道在Ubuntu上,可以使用/ etc / apache2 / envvars文件来configurationumask,但服务器正在运行CentOS。

更新这个问题涉及到我刚才问的另一个问题( Linux用户和组为一个LAMP服务器 )。 如果你喜欢,请更新这个问题,使用最好的设置是让一个开发者用户在一个可以编辑由apache用户创build的文件的服务器上使用。

Apache从其父进程(即启动Apache的进程)inheritance它的umask ; 这通常应该是/etc/init.d/脚本。 因此,在该脚本中放置一个umask命令。

对于CentOS和其他Red Hat发行版,将umask设置添加到/ etc / sysconfig / httpd并重新启动apache。

 [root〜] $ echo“umask 002”>> / etc / sysconfig / httpd
 [root〜] $ service httpd restart

更多信息: Apache2 umask | MDLog:/系统pipe理员

对于Debian和Ubuntu系统,您可以编辑/etc/apache2/envvars

这是Googlesearch“CentOS 7 apache umask”search结果的第一个结果,所以我将分享我需要做的工作来使CentOS 7得到这个工作。

在CentOS 7中, echo "umask 002" >> /etc/sysconfig/httpd -method并不适用于我。

我通过创build一个文件夹/etc/systemd/system/httpd.service.d覆盖了systemd启动文件,并在那里创build了一个带有行的文件umask.conf

 [Service] UMask=0007 

启动,它为我工作。

/etc/apache2/envvars添加一个umask 命令对我来说似乎不是一个好主意,不仅仅是因为文件的名字(仅提及variables),而且是基于这个文件中的注释:

 # Since there is no sane way to get the parsed apache2 config in scripts, some # settings are defined via environment variables and then used in apache2ctl, # /etc/init.d/apache2, /etc/logrotate.d/apache2, etc. 

这表明/etc/apache2/envvars可能由任何执行Apache相关任务的脚本提供,并且更改这些(未知的)脚本的umask是相当危险的。

另一方面,如果想改变Apache的umask目标放宽由mod_dav创build的文件的权限,你应该考虑DAV的仓库被认为是Apache的私有,并让其他进程访问这些文件可能会导致各种isses(包括腐败) 。

在Debian中,为Apache设置umask的另一个地方是/ etc / default / apache2。 在这个文件的末尾只有这行:umask 0002

对于Ubuntu有工具svnwrap

  1. 安装sudo apt-get install subversion-tools
  2. 用svnwrap包装svn和svnserve:
    sudo ln -s /usr/bin/svnwrap /usr/local/bin/svn
    sudo ln -s /usr/bin/svnwrap /usr/local/bin/svnserve

在这之后,所有使用file://,svn + ssh://和http://协议的svn操作都将使用umask 002

添加由罗蒂/蜘蛛侠为CentOS7的答案:而不是改变后的“启动”,这些命令可以使用:

 systemctl daemon-reload service httpd restart 

可能想要做的是在你的CGI正在处理的目录上设置组sticky bit( SetGID )位:

chgrp mygroup dir chmod g+s dir

确保当你这样做(用户)apache在mygroup组(在/etc/group ),所以它将有权限。

这将使得在该目录下创build的任何文件将与目录所属的组相同。

这比为apache可能运行的每个cgi脚本设置全局umask更安全。

(这是git-http-backend通常从Apache运行的方式)。

通常不推荐从“尝试和真正的Apache方式”中转移。 很多时间和艰苦的经验已经进入了这样的事情的select。