我在 Ubuntu 16.04 和 18.04 上运行 Apache,并已将其配置为接受来自多个域的连接。所有站点都存储在/var/www/html
以下位置:
example.com
sub.example.com
sample.com
...
其中一些网站正在开发中,我已为在这些网站上工作的人员创建了用户帐户。对于此类网站,我将mount --bind
网站文件夹的 复制到用户的主文件夹中,用户将 chroot 到该文件夹中。因此,如果用户john
正在处理,他们将看到与登录时sample.com
相同的文件夹。/sample.com
显然,这样做的目的是将用户限制在他们负责的项目中。但是,由于 PHP 是在www-data
拥有 的下运行的,因此任何用户都可以使用 PHP/var/www/html
修改任何文件。/var/www/html
是否有任何方法(通过.htaccess
或其他方式)锁定每个站点文件夹中的 PHP,以便只允许修改其站点文件夹内的文件夹?即,如果我在 内运行 PHP 脚本sample.com
,则该脚本不应该能够读取或写入 上面的文件夹sample.com
。
答案1
你也可以使用bindfs
。将所有代码放在 下/var/www/html/<project>
,chown www-data:www-data -R /var/www/html
然后使用bindfs
将其挂载到用户目录中。示例:
bindfs -g www-data -m chroot_user1 --create-for-user=www-data --create-for-group=www-data --create-with-perms=0644,a+X /var/www/html/example.com/ /home/chroot_user1/wwwroot_example.com/
Chroot 用户将以所有者的身份查看代码。但真正的权限是 apache 目录下的 www-data。