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


14

我需要由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
您应该尝试使用“ /etc/init.d/apache2 restart”或“ service apache2 restart”重启Apache
Jens Bradler 2012年

是的,两者都不起作用。
artfulrobot 2012年

如何创建新文件(WebDAV,PHP)?
詹斯·布拉德勒

在测试中,我正在使用file_put_contents()。但是我要对此进行“修复”的代码是Drupal的Less模块​​(该模块创建已处理的Less CSS文件的缓存版本)。我的具体问题是我无法drush cc all以我的用户身份运行,因为它会在所有这些由www数据创建的缓存文件中出错。
artfulrobot 2012年

Answers:


11

为确保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,请检查Apache起始文件/etc/init.d/apache2中是否将使用文件/ etc / apache2 / envvars:

...
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

谢谢!即使让我觉得自己读起来像个白痴(我为rw组输入了错误的八进制)*脸红*
artfulrobot 2012年

您的PHP小片段保存了我的理智,PDO Sqlite3 Wordpress插件将始终将group设置为仅对其数据库文件读取。
Daniel Sokolowski

2

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

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

# chmod g+s wordpress

使新文件具有rw组权限,例如。这样就 www-data可以写入由上传用户SFTPed的文件:

# 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

如果应用程序试图写有减少权限的文件,这不会有问题吗?
berbt

-不是在所有的应用程序将只是这实际上混淆我有点开始减少权限写stackoverflow.com/questions/28454551/...
丹尼尔Sokolowski

1
我认为此命令setfacl --default --modify group:rwx wordpress缺少冒号。应该是setfacl --default --modify group::rwx wordpress
Marcos

2

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

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

$ pwd
/etc/systemd/system/multi-user.target.wants

$ cat apache2.service
[单元]
Description = Apache HTTP服务器
之后= network.target remote-fs.target nss-lookup.target

[服务]。
。
。
。
UMask = 0002

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

Debian Squeeze没有使用systemd。
womble

是的,在原始问题的末尾,他们确实说了Debian Squeeze。由于问题来自今天的大约8年前,并且我正试图解决截至2019年底的最新Debian标题中提出的问题,所以我才发布了这个问题。我认为相对于八年前的今天,大多数正在寻找解决方案的人可能会从我的解决方案中受益,因此,我将保留我的意见。感谢您指出这一点。
duplexddaann
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.