设置多项目 Web 开发服务器

设置多项目 Web 开发服务器

我正在尝试设置一个开发服务器,供不同的团队(由不同的人组成,其中一些人可能参与多个项目)用于多个(Web)项目。我确实信任我的所有用户,但是出于法律原因(敏感数据可能存储在某些项目中),我需要能够限制他们对服务器某些部分的访问。

我需要有以下堆栈:

  • nginx
  • php-fpm(通过 fastcgi)
  • mariadb作为 mysql 服务器
  • varnish

大多数(如果不是全部)用户都需要访问 ssh,因此限制与 sftp 的连接并监禁他们是不可能的。我已经弄清楚了以下内容:

  1. nginx不会执行任何任意代码,因此它可以以所有项目的权限运行
  2. php-fpm 执行任意代码,因此需要加以限制。我决定运行单独的池,每个池都有访问权限仅有的到一个项目
  3. mysql不构成任何安全问题
  4. varnish这是我以后要处理的单独问题

我最初的想法是将 ssh 连接上的用户关进监狱,但这似乎只是一种“快速修复”,而不是解决方案 - 此外,它还具有局限性,维护起来很繁琐。我的第二个想法是使用 SELinux(我没有使用过)来限制对项目相关文件的访问。我认为以下方法可行(这margo是一个示例项目名称):

  • 创建自定义 SELinux 策略(margo_proj),其将:
    • 创建上下文margo_proj_tmargo_proj_log_tmargo_proj_tmp_t
    • 允许访问httpd_t以及分配了与项目相关的用户的所有上下文
  • 具有权限/srv/www/margo和上下文 margo:margo775margo_t
    • /srv/www/margo里面的所有文件不是由 PHP 解释的775权限
    • 770在权限范围内由 PHP 解释的所有文件
  • nginx以 身份运行www-data:www-dataphp-fpm以 身份池化margo:margo,均带有httpd_t上下文。
  • 将所有需要访问该项目的用户添加到margo组。

这能行吗?我对 SELinux 的了解非常基础(即根本不了解),在开始执行可能导致服务器停机的操作之前,我想检查这是否是处理问题的正确方法。关于 SELinux 有很多信息,但我找不到任何与我的具体问题稍微相关的内容,而且大多数文章对于没有经验的 SELinux 用户来说都很难理解。

相关内容