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

我需要由apache2创build的文件默认情况下有umask 002 ,即组rw。

我试过把umask 002放在/ etc / apache2 / envvars中,虽然这个脚本是作为apache启动的一部分执行的( apache2ctl graceful ),但umask没有任何作用。 大概在启动过程的某个地方(例如,当用户从root降级到www-data ),还有一个更好的地方。

我已经阅读了关于Fedora的文章,并且build议将umask放在/etc/init.d/apache2但是这些文件都不适用于Debian(Squeeze)。

你能帮我吗?

为了确保umask设置生效,请使用简单的testing,并且不要使用任何其他Web应用程序。 可能是这些应用程序独立于Apache的umask设置来更改权限。

简单testingPHP脚本:

 <?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对已安装此简单testing文件的文件夹具有写入权限。

要运行新的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 

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

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

 root@sh1:/srv/www/php/fastwarren.ca# chmod g+s wordpress 

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

 root@sh1:/srv/www/php/fastwarren.ca# setfacl --default --modify group:rwx wordpress 

确认ACL是这样的:

 root@sh1:/srv/www/php/fastwarren.ca# getfacl wordpress # file: wordpress # owner: carissacosgrove # group: www-data # flags: -s- user::rwx group::rwx other::rx default:user::rwx default:group::rwx default:other::rx 

创build一个文件来确认它的工作:

 root@sh1:/srv/www/php/fastwarren.ca# ll test -rw-rw-r-- 1 root www-data 0 Feb 17 01:09 test