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

我运行一个clearOS服务器在我的本地networking(小公司的10个开发人员)我们使用它作为一个开发服务器来testing我们的工作,并在testing过程中显示给客户端每个开发人员有一个唯一的用户名和密码来访问ftp / http / SMB。 问题是当一个开发人员运行一个非安全的代码(让我们假设它是一个PHP代码)就像运行一个无限循环! 服务器完全崩溃,即时通讯无法识别谁是错误的开发者! 那怎么能解决? 提前致谢

我的服务器的信息

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

已安装的应用

  1. proftpd的,
  2. gitlab,
  3. 阿帕奇,
  4. MariaDB的

用户:

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

您的问题(S)

你已经说明了你的主要问题

当一个开发人员运行一个非安全的代码(让我们假设它是一个PHP代码)就像运行一个无限循环! 服务器完全崩溃,即时通讯无法识别谁是错误的开发人员!

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

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

如果你解决第二个问题,你仍然需要解决第一个问题。 但是如果你先解决了,那么你就不用再解决第二个问题了,所以我把重点放在解决第一个问题上(也就是说,解决问题而不去面对坏事的人总是更容易,更less的对抗)。


可能的解决scheme

将用户操作彼此隔离时,您有三条主要path可供select:

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

当然,组合总是可能的,因为这些方法在不同的层面上工作。 例如,您可以使用容器,以便每个人都有自己的Web服务器,但让所有用户使用相同的数据库来节省资源(数据库访问速度快于多个不同的数据库),受限于数据库配额。


你的情况怎么办?

正如你所看到的,可能性是很多的,而且每一个都是相当大的努力来实现的,所以你需要缩小它的范围:

  • 首先分析你遇到什么问题。 看看你的过程(或者你没有,询问你的同事是如何工作的),并确定出现的问题(运行testing用例时磁盘空间耗尽,无限循环保留太多内存,Web服务器由于未捕获的exception或不良架构而崩溃等)。
  • 当你知道自己在做什么之后,想想如何在保持简单的同时缓解这些问题。 10台电脑的configuration大致与100台相同,所以你应该首先尝试简单的东西(大部分时间已经足够了)。 磁盘空间可能会受到用户配额的限制,而无止境的循环以及内存过度消耗可能会被unit testing过早地捕获(以本地用户身份执行,而不是在Web服务器上执行)。
  • 如果这还不够,你可以考虑实施更大更好的解决scheme,比如容器。 最初,你会失去时间,但从长远来看,它可能会得到回报 – 当然取决于你的具体情况。

作为一项预防措施,如果您想为用户设置特定的限制,您应该查看ulimits。 您可以设置过程/ CPU /内存限制。

请参考这个链接

另一种方法是通过一个外部监测工具(最常见的例子是nagios / nrpe)来监测系统的资源使用情况,如果超过了资源阈值,它可以提醒你。