我需要 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=0002
Apache2 systemd 服务单元文件,重新加载服务单元,然后重新启动 Apache2。
$密码 /etc/systemd/system/multi-user.target.wants $ cat apache2.service [单元] 描述=Apache HTTP 服务器 之后=网络.目标远程文件系统.目标nss查找.目标 [服务]。 。 。 。 掩码=0002 $ sudo systemctl 守护进程重新加载 $ sudo systemctl 重新启动 apache2