更好地控制我的本地服务器

Med*_*ida 1 security linux clearos

我在我的本地网络(由 10 个开发人员组成的小公司)上运行 clearOS 服务器,我们将其用作开发服务器来测试我们的工作,并在测试过程中将其展示给客户,每个开发人员都有一个唯一的用户名和密码来访问 ftp/http/某某 问题是当其中一个开发人员运行一个不安全的代码(假设它是一个 php 代码)时,就像运行一个无限循环一样!服务器完全崩溃了,我无法确定谁是有问题的开发人员!!怎么解决?提前致谢

我的服务器信息

  1. clearOS 服务器
  2. 内存 16GB
  3. SSD 1TB(2个分区)

安装的应用程序:

  1. 专业版,
  2. GitLab,
  3. 阿帕奇,
  4. 玛丽亚数据库

用户:

  1. 物理根用户和
  2. 10个虚拟用户(使用ldap) 每个用户都有一个唯一的密码

use*_*391 5

您的问题

你已经把你的主要问题描述为

当其中一位开发人员运行非安全代码(假设它是 php 代码)时,就像运行无限循环一样!服务器完全崩溃了,我无法确定谁是有问题的开发人员!

因为开发代码总是会崩溃或挂起,所以您正在有效地处理两个不同的问题:

  1. 不同用户的进程不应相互干扰,不应占用所有资源,使其他人挨饿甚至使服务器崩溃。
  2. 识别“做了”的用户。

如果你解决了第二个问题,你仍然需要解决第一个问题;但是如果你解决了第一个,你就不需要再解决第二个了,所以我在这里专注于解决第一个(而且,解决问题而不用面对坏事的人总是更容易,并且更少对抗)。


可能的解决方案

将用户操作彼此隔离时,您可以选择三种主要路径:

  1. 进程和文件系统:最简单和最古老的分离方式是将资源分配给多用户 UNIX 系统上的每个不同用户。
    • uptime365 已经为 提供了建议ulimit,我只想补充一点,您必须确保您的应用程序也使用这些用户(而不是每个服务的通用守护程序用户),并且他们不想使用其他用户帐户启动进程。由于这个缺点,这种方法今天很少使用,除了简单的事情,比如没有持续交付基础设施的构建脚本。
    • 文件系统配额在今天更有用,因为存储仍然是主要资源并且几乎适用于所有应用程序。
  2. 应用程序:您访问的大多数软件已经内置了用户和配额管理,但您需要单独管理/配置。例如,数据库可以为每个用户设置配额和权限,并限制他可以做什么。除了不同的配置(可以通过脚本或应用程序统一)之外,缺点是并非所有软件都配备齐全。例如,GitLab 似乎仍然不支持磁盘配额。您必须评估您的错误原因,并查看给定的功能是否适合您的情况。
  3. 容器和虚拟机:利用虚拟化(KVM 或 ESXi 之类的完全虚拟化;或 Solaris Zones、FreeBSD Jails、Linux LXC 之类的容器化,或 Docker 等基于应用程序的虚拟化)允许您向每个用户展示一个完整的虚拟系统,他可以在其中可以做任何你允许他做的事情,但限制他的资源,这样他就不会打扰其他用户。它是最高级的隔离形式,因为基本上每个用户都有自己的机器并且根本不会干扰(如果配置正确),因此您还有不同的配置和运行时选项、不同的网络、不同的硬盘驱动器等等。该解决方案的缺点是它在配置和资源使用方面的开销是这三者中最高的。

当然,组合总是可能的,因为这些方法适用于不同的层。例如,您可以使用容器,让每个人都有自己的网络服务器,但让所有用户使用相同的数据库以节省资源(数据库访问比使用多个不同的数据库更快),受数据库配额的限制。


在你的情况下怎么办?

如您所见,可能性有很多,并且每个可能性都需要相当大的努力来实现,因此您需要缩小范围:

  • 首先分析一下你到底遇到了什么问题。查看您的流程(或者如果您没有流程,请询问您的同事他们是如何工作的)并确定出现的问题(运行测试用例时磁盘空间耗尽,无限循环保留过多内存,Web 服务器由于未捕获的异常或糟糕的架构等而崩溃)。
  • 在你知道你要面对什么之后,想想如何在保持简单的同时减轻问题。10 台 PC 的配置时间与 100 台 PC 的配置时间大致相同,因此您应该首先尝试简单的东西(大多数情况下,这已经足够了)。磁盘空间可能受用户配额限制,而无限循环和内存过度消耗可能会被单元测试过早捕获(以本地用户身份而不是在 Web 服务器上执行)。
  • 如果这还不够,您可以考虑实施更大更好的解决方案,例如容器。最初,您会浪费时间,但从长远来看,它可能会有回报——当然,这取决于您的具体情况。

  • @MedAbida 也是,如果每个开发人员唯一不同的部分,那么容器肯定是路线。对于管理员来说比虚拟化更复杂,它也需要更少的硬件来升级到容器化系统。(虽然仍然比你拥有的要多。) (2认同)