在您的情况下,默认情况下,Apache本身添加的所有文件都将归服务器用户所有www-data
. 但是,由于您的用户使用FTP进行部署,这些文件归他们所有,因此Apache会引起您的注意。更改的所有权wp-content
文件夹收件人www-data
完全不是不安全的,因为这是一个仅由Apache使用的默认用户,但正如您所说的,这只是一个临时解决方案。
对于永久解决方案,我建议Tom\'s解决方案来自this post on ServerFault:
试图扩展@Zoredache的answer, 当我亲自试一试时:
创建一个新组(www-pub)并将用户添加到该组
groupadd www-pub
usermod -a -G www-pub usera # must use -a to append to existing groups
usermod -a -G www-pub userb
groups usera ## display groups for user
将/var/www下的所有内容的所有权更改为root:www pubchown -R root:www-pub /var/www # -R for recursive
将所有文件夹的权限更改为2775 chmod 2775 /var/www
2
=设置组id,7
=rwx
对于所有者(根),7
=rwx
对于集团(www-pub),5
=rx
for world(包括apache www数据用户)设置组ID(SETGID) 位(2)会将组(www pub)复制到该文件夹中创建的所有新文件/文件夹中。其他选项有SETUID(4)来复制用户id,还有STICKY(1),我认为它只允许所有者删除文件。
有一个-R
递归选项,但这不会区分文件和文件夹,因此您必须use find, 像这样:
find /var/www -type d -exec chmod 2775 {} +
将所有文件更改为0664find /var/www -type f -exec chmod 0664 {} +
将用户的umask更改为0002umask控制默认的文件创建权限,0002表示文件将有664个目录和775个目录。设置(通过编辑umask
的底部线条/etc/profile
在我的情况下)意味着一个用户创建的文件可以由www组中的其他用户写入,而无需chmod
他们
通过创建文件和目录并验证所有者、组和权限来测试所有这些
ls -l
.
注意:您需要注销/登录才能使对组的更改生效!
<小时>EDIT:
如果您真的想为不同的客户端运行托管服务器,那么可以考虑以不同的方式设置和运行您的PHP,默认情况下(如mod_php
). 我建议将其作为PHP-FPM
服务,因为它可以调整为使用用户的权限,这将进一步阻止PHP服务器对web根目录中的所有文件拥有完全的所有权和权限。
This 是一篇优秀的文章,介绍了运行PHP的不同方法。我不是这方面的专家,你可以从ServerFault.