核心是分离运行身份、文件归属和访问控制三层逻辑:为各虚拟主机创建专属系统用户与组,通过mpm_itk模块在VirtualHost中指定AssignUserId,结合粘滞位目录权限、上传目录隔离及Location级认证限制,实现安全多用户协作。

管理 Apache 虚拟主机的多用户权限,核心是让不同用户能安全协作维护各自站点,又互不干扰、不越权。关键不在“开更多账号”,而在于分离运行身份、文件归属和访问控制三层逻辑。
按站点划分独立用户与组
每个虚拟主机对应一个专属系统用户(如 site1、site2),避免共用 www-data 或 apache:
- 创建用户并禁用登录:
sudo useradd -r -s /sbin/nologin site1 - 创建对应组:
sudo groupadd site1,再把用户加进组:sudo usermod -aG site1 site1 - 为该站点设置专属目录:
sudo mkdir -p /var/www/site1.example.com,并设属主:sudo chown -R site1:site1 /var/www/site1.example.com
配置虚拟主机使用专属运行身份
Apache 本身不支持单个服务内为每个虚拟主机指定不同用户,但可通过 MPM 模块(如 mpm_itk)实现——它允许在每个 <VirtualHost> 内指定用户和组:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- Ubuntu/Debian 安装:
sudo apt install apache2-mpm-itk - CentOS/RHEL 安装:
sudo yum install httpd-itk(需 EPEL) - 在虚拟主机配置中添加:
<IfModule mpm_itk_module><br> AssignUserId site1 site1<br> </IfModule> - 重启 Apache 后,该站点所有请求均由
site1用户执行,PHP 脚本、文件写入等均受其权限限制
协同开发:共享组 + 粘滞位 + 上传目录隔离
若多个开发者要更新同一站点,不靠 root,而是靠组协作:
- 将开发者加入站点组:
sudo usermod -aG site1 dev1 dev2 - 给网站根目录设粘滞位和组可写:
sudo chmod 2775 /var/www/site1.example.com - 上传目录(如
/uploads)单独处理:
– 设为site1:www-data,方便 Apache 读取但不赋予 PHP 写权限
– 禁用脚本解析:<FilesMatch "\.(php|sh|pl)$">Require all denied</FilesMatch>
访问层权限:基于路径或用户认证细化控制
即使文件系统权限已分清,仍需在 Apache 配置中加固访问边界:
- 后台路径限制(如
/admin):
<Location "/admin"><br> AuthType Basic<br> AuthName "Admin Area"<br> AuthUserFile /etc/apache2/.htpasswd-site1<br> Require valid-user<br> </Location> - 敏感目录禁止浏览与执行:
Options -Indexes -ExecCGI - 内网管理接口只允许可信 IP:
Require ip 10.0.2.0/24

















