如何为多个用户、多个网站设置安全权限?

如何为多个用户、多个网站设置安全权限?

在带有 的 Gentoo 3.2.12 服务器上apache2+php,有几个网站正在运行:

/www
    /website1
    /website2
    ...etc

用户apache应对所有网站拥有只读访问权限。每个网站内还有一些文件夹apache应具有读写访问权限(上传文件夹等)。

有几个人在这些网站上工作。每个人都应该拥有对其工作网站的读写访问权限,但其他人则没有权限。此外,他们应该能够设置权限(在其网站内),以便apache可以写入某些文件夹(好吧,如果他们创建新的上传文件夹或其他文件夹)。

/www其他用户根本不应该访问。

这可以做到吗?如何做到?

(PS。另外...由于这些人可以上传 PHP 脚本,然后在 Apache 的上下文中执行,我猜他们也可以间接访问其他网站...是否也可以保证这一点?我不能想办法,但谁知道呢......)

答案1

一种方法是这样的:

  • 每个站点都有一个组,让该组中的人员使用,umask 0002以便他们创建的文件默认可供该组读/写,并且默认情况下可供其他人读取。
  • chmod a-rwx每个站点的根目录,以防止允许组之外的人员访问。
  • 除了其他权限之外,还为您的文件系统和setfacl -m user:apache:rx该目录启用 ACL,以向用户授予读取访问权限。apache

至于apache进程创建的文件:

  • 相关组应该可以读取 apache 用户创建的文件,只要它们被创建为世界可读的。
  • 只要文件驻留在组可写目录中,就可以删除它们。
  • 如果这还不够,您可以允许您的用户使用sudoapache 用户。也许只是为了执行特定命令,例如使用 ACL 添加组写入权限。

但正如您所说,如果用户可以以 apache 用户身份运行任意脚本,则可以绕过所有读取限制。为了解决这个问题,您可以尝试以相应组中的特定用户身份执行一个站点的脚本。我相信有一种方法可以使用 进行设置mod_fcgid。否则apache[suexec]可能php[cgi]适合你。

为了获得更好的隔离,您必须有多个 apache 进程,以不同的用户身份运行,甚至可能 chroot 到不同的目录。或者在不同的 OpenVZ 单元中,或者不同的 Xen domU 中,或者在不同的硬件上。正如您所看到的,有许多不同的隔离级别,每个级别都提供比之前更好的隔离,但代价是需要更多的资源。

答案2

通常的解决方案是超PHP

相关内容