RedHat服务器Apache多用户多WordPress网站权限配置方案咨询
嗨,我来帮你梳理下这个权限配置的问题,你遇到的核心问题其实不是所有者和组的顺序,而是目录的基础权限设置和用户访问的隔离逻辑没到位,咱们一步步来解决:
首先,你之前用chown company1:apache /var/www/company1/*的方式,之所以company1能访问company2的文件夹,大概率是因为/var/www或者/var/www/company2的权限是755——这意味着所有用户(包括company1)都有读和执行权限,自然能进入company2的目录。反过来换apache:company1也解决不了这个问题,因为这只是把所有者换成了apache,组设为company1,但其他用户依然可能有访问权限。
下面是更合理的配置方案,兼顾用户隔离和Apache的运行需求:
1. 调整目录结构的所有权与基础权限
- 先给每个公司的根目录设置专属的用户和组:
chown -R company1:company1 /var/www/company1 chown -R company2:company2 /var/www/company2 - 然后设置目录权限,确保只有所有者和所属组能访问,其他用户完全无权:
chmod -R 750 /var/www/company1 chmod -R 750 /var/www/company2 - 最后调整
/var/www的权限,让普通用户只能进入自己的子目录(不能查看其他公司的目录列表):
这里chmod 711 /var/www711的意思是:所有者有读写执行,组和其他用户只有执行权限——这样用户能进入/var/www,但看不到里面的其他公司目录,只能进入自己有权限的companyX文件夹。
2. 让Apache拥有必要的读写权限
Apache需要对WordPress的目录和文件有读写权限(比如上传媒体、更新插件),这里有两种常用方式:
方式一:将Apache用户加入对应公司的组
把apache用户添加到company1和company2的组里:
usermod -aG company1 apache usermod -aG company2 apache
这样apache就继承了组的权限,能对/var/www/companyX下的文件进行读写操作,同时因为目录权限是750,其他公司的用户依然无法访问不属于自己的目录。
方式二:使用ACL(访问控制列表)细化权限
如果不想让apache加入所有公司的组,可以用ACL给apache单独分配权限:
# 给company1目录添加apache的读写执行权限 setfacl -R -m u:apache:rwx /var/www/company1 # 确保新创建的文件也继承这个ACL权限 setfacl -R -d -m u:apache:rwx /var/www/company1 # 对company2执行同样操作 setfacl -R -m u:apache:rwx /var/www/company2 setfacl -R -d -m u:apache:rwx /var/www/company2
这种方式更灵活,apache不需要加入用户组,直接通过ACL获得权限,同时用户隔离依然有效。
3. 验证权限是否生效
完成配置后,你可以切换到company1用户测试:
su - company1 cd /var/www/company2
如果配置正确,这里会提示Permission denied,说明隔离生效;同时尝试在/var/www/company1下创建文件,再切换到apache用户(或者用sudo -u apache)尝试读写,确认Apache的权限正常。
最后提醒下:WordPress的核心文件和主题插件目录,建议保持755权限,文件设为644,上传目录(wp-content/uploads)需要设为775或者通过ACL让apache有写入权限,避免后续更新或上传出现问题。
备注:内容来源于stack exchange,提问作者Lord Pou

