适配WordPress与非WordPress站点的文件权限优化方案咨询
嘿,我完全懂你现在的两难——既要让WordPress能顺顺利利自动更新、装插件主题,又不想放弃用WebAdmin这个日常用户便捷维护所有站点(不管是纯自定义站还是WP混合站)的便利性,还得牢牢守住安全性。咱们来捋个既能通用又优雅的方案出来。
首先,先聊聊你之前的非WordPress站点权限设置:
你用WebAdmin做所有者、www-data做组,配合750权限+g+s位,再单独给Uploads目录开www-data权限的方案,其实是非常合理的——既保证了你作为维护者能读写操作,又让Web服务器进程(www-data)只有必要的读取权限,安全性拉满,完全没问题。
但WordPress的需求不一样:它自动更新、安装主题插件时,需要往核心目录(比如wp-content、wp-admin)写入文件,而你之前的750权限只给了组读取权限,所以WP才会弹出FTP凭证的要求。改成www-data做所有者虽然解决了更新问题,但把你日常维护的路堵死了,确实很麻烦。
最优通用方案:把WebAdmin加入www-data组
咱们先明确:把WebAdmin添加到www-data组,而不是反过来,这是安全性和便利性的平衡最优解。
为什么不能反过来?如果把www-data加入WebAdmin组,那Web服务器进程就拥有了WebAdmin组的所有权限——万一服务器被恶意脚本入侵,攻击者就能拿到WebAdmin能访问的所有资源权限,风险太高。而把WebAdmin加入www-data组,只是让你日常维护的用户拥有Web服务器组的权限,Web进程本身的权限范围没变,安全得多。
具体操作步骤
先把WebAdmin加入www-data组(
-aG是追加组,不会覆盖用户原有组):sudo usermod -aG www-data WebAdmin注意:修改组后,WebAdmin需要重新登录(或者临时执行
newgrp www-data)才能让新组权限生效。针对WordPress站点调整权限(不用改所有者,保持WebAdmin为所有者即可):
- 统一设置所有者和组:
sudo chown -R WebAdmin:www-data /var/www/wp_example.com/ - 设置所有目录权限为
770(所有者和组都能读写执行,其他用户无任何权限),同时保留g+s位,让新建文件自动继承www-data组:sudo find /var/www/wp_example.com/ -type d -exec chmod 770 {} \; sudo chmod g+s /var/www/wp_example.com/ - 设置所有文件权限为
660(所有者和组都能读写,其他用户无权限):sudo find /var/www/wp_example.com/ -type f -exec chmod 660 {} \; - 对于Uploads目录,这个权限已经足够(组有读写权限),不需要单独改
755,比原来的设置更安全。
- 统一设置所有者和组:
为什么这个方案能通用所有站点?
- 对于非WordPress站点:你可以继续沿用原来的
750/640权限,也可以统一用上面的770/660——后者反而更灵活,要是你的自定义站有需要程序写入的目录,也能直接满足,不用额外调整。 - 对于WordPress站点:现在Web服务器进程(www-data)拥有了目录和文件的写入权限,自动更新、安装插件主题再也不会要FTP凭证;同时你用WebAdmin用户依然能直接通过FTP/SSH操作所有文件,不用再碰root账号。
- 对于混合站点:完美兼顾两边——WP部分能自动更新,自定义部分你能正常维护,权限逻辑统一,不用再区分站点类型单独设置。
额外安全提醒
- 坚决不要给
other用户(也就是权限位的最后一位)任何权限,所以用770/660而不是775/665,避免无关用户访问站点文件。 - 如果你未来要把站点交给其他用户维护,只需要把新用户加入www-data组,再调整站点目录的所有者为新用户(或者让新用户加入WebAdmin组),灵活度拉满。
备注:内容来源于stack exchange,提问作者Chiwda

