我需要由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