在 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/passwd
sudo 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?。