在 Ubuntu 上运行 PHP 的 www-data 用户的 umask

在 Ubuntu 上运行 PHP 的 www-data 用户的 umask

在 Ubuntu 14.04 中设置一个新的网络服务器,并尝试处理 PHP 生成的文件的文件权限。

默认情况下,中的所有目录和文件/var/www都归 www-admin 所有/归其分组。目录权限为rwxrwsr-x,文件权限为rw-rw-r--

然后,我们将有限数量的目录上的组设置为 www-data - 这样 PHP(通过 Apache)就可以在此位置写入日志和缓存文件。

但是,我无法让 PHP 遵守 umask 0002,因此 PHP 生成的文件只有 www-data 用户才可写入。这是一个问题,因为我们使用持续集成和一些其他清理过程。

到目前为止,我已经:

  • 将 umask 设置为 0002/etc/pam.d/common-session
  • 将 umask 设置为 0002/etc/pam.d/common-session-noninteractive
  • 将 umask 设置为 0002/etc/profile
  • 将 umask 设置为 0002/etc/apache2/envvars
  • 将 umask 设置为 0002/etc/login.defs
  • 将 umask 设置为 0002以便www-data使用/etc/passwdsudo chfn -o "umask=002" daemon_username

但我还是陷入困境。

我已经停止/启动了该服务,甚至重新启动了计算机——但没有任何效果。

答案1

/etc/apache2/envvars 中的“umask 002”应该可以工作。

注意:必须通过“service apache2 stop; service apache2 start”重启Apache才能生效,而不是通过“service apache2 restart”!

如果您需要更详细的示例,请参见此处:https://serverfault.com/a/384922/228027

答案2

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

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

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

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

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::r-x
default:user::rwx
default:group::rwx
default:other::r-x

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

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

答案3

问题在于这些文件是由 PHP-FPM 创建的。它是父进程,而不是 apache2。我唯一能解决这个问题的方法是将 umask 添加到 /etc/init/php7.1-fpm.conf。然后重新启动 PHP-FPM。

相关主题:Nginx/php-fpm umask 设置

答案4

这对我来说也不起作用,直到我意识到以下几点:Wordpress 的 PDO SQLite 驱动插件将创建仅具有组读取权限的数据库文件。

使用此处的创建脚本来测试您的理智:如何在 Debian 上的 Apache 中设置默认 umask?

相关内容