如何在 Debian 上的 Apache 中设置默认 umask?

如何在 Debian 上的 Apache 中设置默认 umask?

我需要 apache2 创建的文件002默认具有 umask ,即组 rw 。

我尝试将其umask 002放入 /etc/apache2/envvars 中,尽管此脚本确实在 apache 启动时执行(apache2ctl graceful),但 umask 不起作用。大概在启动过程的某个地方(例如,当用户从 降级root到 时www-data),有更好的地方可以放置它。

我读过关于 Fedora 的帖子,其中一篇建议添加 umask,/etc/init.d/apache2但这些都不适用于 Debian(Squeeze)。

你能帮我吗?

答案1

为确保 umask 设置生效,请使用简单测试,不要为此使用任何其他 Web 应用程序。这些应用程序可能会独立于 Apache 的 umask 设置更改权限。

简单测试PHP脚本:

<?php
if ($fp = fopen(time() . '.txt', 'w')) {
  fwrite($fp, 'This is a simple test.');
  fclose($fp);
  echo "done";
} else {
  echo "error - cannot create file";
}
?>

请注意,用户 www-data 对安装此简单测试文件的文件夹具有写权限。

要运行新的 umask,请检查文件 /etc/apache2/envvars 是否将在 Apache 启动文件 /etc/init.d/apache2 中使用:

...
PIDFILE=$(. /etc/apache2/envvars && echo $APACHE_PID_FILE)
...

在 /etc/apache2/envvars 中设置你的 umask:

...
# umask 002 to create files with 0664 and folders with 0775
umask 002

重新启动 Apache:

service apache2 restart

检查差异:

#> ls -l *.txt
-rw-rw-r-- 1 www-data www-data  14 2012-05-01 15:56 1335880583.txt
-rw-r--r-- 1 www-data www-data  14 2012-05-01 15:55 1335880540.txt

答案2

如果您运行多个站点,则可以使用每个目录的访问控制列表(ACL)设置默认组权限,如下所示:

设置setid标志以强制所有新文件从目录继承组:

# chmod g+s wordpress

使新文件具有rw组权限,例如,以便 www-data可以写入上传用户通过 SFTP 发送的文件:

# setfacl --default --modify group::rwx wordpress 

确认 ACL 如下:

# getfacl wordpress
# file: wordpress
# owner: carissacosgrove
# group: www-data
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

创建一个文件来确认它有效:

# ll test
-rw-rw-r-- 1 root www-data 0 Feb 17 01:09 test

答案3

(对于使用 systemd 的 Debian Stretch - 感谢 womble!)

输入UMask=0002Apache2 systemd 服务单元文件,重新加载服务单元,然后重新启动 Apache2。

$密码
/etc/systemd/system/multi-user.target.wants

$ cat apache2.service
[单元]
描述=Apache HTTP 服务器
之后=网络.目标远程文件系统.目标nss查找.目标

[服务]。
掩码=0002

$ sudo systemctl 守护进程重新加载
$ sudo systemctl 重新启动 apache2

相关内容