Linux

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

  • October 6, 2016

我在我的本地網路(10 名開發人員的小公司)上執行 clearOS 伺服器,我們將其用作開發伺服器來測試我們的工作並在測​​試過程中向客戶展示每個開發人員都有一個唯一的使用者名和密碼來訪問 ftp/http/某人 問題是當其中一位開發人員執行非安全程式碼(假設它是 php 程式碼)時,就像執行無限循環一樣!伺服器完全崩潰了,我無法確定誰是有缺陷的開發人員!那怎麼解決?提前致謝

我的伺服器資訊

  1. clearOS 伺服器
  2. 記憶體 16GB
  3. SSD 1TB(2個分區)

安裝的應用程序:

  1. 專業版,
  2. GitLab,
  3. 阿帕奇,
  4. 瑪麗亞數據庫

使用者:

  1. 物理根使用者和
  2. 10 個虛擬使用者(使用 ldap) 每個使用者都有唯一的密碼

您的問題

您已將主要問題描述為

當其中一位開發人員執行非安全程式碼(假設它是 php 程式碼)時,就像執行無限循環一樣!伺服器完全崩潰了,我無法確定誰是有問題的開發人員!

由於開發程式碼總是會崩潰或掛起,因此您正在有效地處理兩個不同的問題:

  1. 不同使用者的程序不應該互相干擾,不應該佔用所有資源,餓死其他人甚至崩潰伺服器。
  2. 辨識“做了”的使用者。

如果解決了第二個問題,還需要解決第一個問題;但是如果你解決了第一個,你就不需要再解決第二個了,所以我在這裡專注於解決第一個(同樣,解決問題而不與人們就壞事進行對抗總是更容易,對抗也更少)。


可能的解決方案

在將使用者操作彼此隔離時,您可以選擇三種主要路徑:

  1. **程序和文件系統:**最簡單和最古老的分離方式是在多使用者 UNIX 系統上將資源分配給每個不同的使用者。
  • uptime365 確實已經給出了建議ulimit,我只想補充一點,您必須確保您的應用程序也使用這些使用者(而不是每個服務的通用守護程序使用者)並且他們不想使用其他使用者帳戶啟動程序。由於這個缺點,這種方法現在很少使用,除了簡單的事情,比如在沒有持續傳遞基礎設施的情況下建構腳本。
  • 文件系統配額在今天更有用,因為儲存仍然是主要資源,它幾乎適用於所有應用程序。
  1. **應用程序:**您訪問的大多數軟體已經內置了使用者和配額管理,但您需要單獨管理/配置。例如,數據庫可以為每個使用者設置配額和權限,並限制他可以做什麼。除了不同的配置(可以通過腳本或應用程序統一)之外的缺點是並非所有軟體都同樣配備齊全。例如,GitLab 似乎仍然不支持磁碟配額。您將不得不評估您的錯誤原因,並查看給定的功能是否足以滿足您的情況。
  2. **容器和虛擬機:**利用虛擬化(完全虛擬化,如 KVM 或 ESXi;或容器化,如 Solaris Zones、FreeBSD Jails、Linux LXC,或基於應用程序的如 Docker 等)允許您為每個使用者提供一個完整的虛擬系統,他可以在其中可以做任何你允許他做的事情,但要限制他的資源,這樣他就不會打擾其他使用者。它是最高級的隔離形式,因為基本上每個使用者都有自己的機器並且完全不會干擾(如果配置正確的話),所以你也有不同的配置和執行時選項、不同的網路、不同的硬碟等等。這個解決方案的缺點是它在這三個方面的配置和資源使用成本最高。

當然,組合總是可能的,因為這些方法適用於不同的層。例如,您可以使用容器,讓每個人都有自己的網路伺服器,但讓所有使用者使用同一個數據庫來節省資源(數據庫訪問比幾個不同的數據庫更快),受數據庫配額的限制。


在你的情況下做什麼?

如您所見,可能性很多,而且每一種都需要付出相當大的努力來實現,因此您需要縮小範圍:

  • 首先分析一下你到底遇到了什麼問題。查看您的流程(或者如果您沒有,請詢問您的同事他們是如何工作的)並確定出現的問題(執行測試案例時磁碟空間耗盡,無限循環保留過多記憶體,Web 伺服器由於未擷取的異常或糟糕的架構等而崩潰)。
  • 在你知道你要面對什麼之後,想想如何在保持簡單的同時減輕問題。10 台 PC 的配置時間與 100 台 PC 的配置時間大致相同,因此您應該首先嘗試簡單的東西(大多數時候,這已經足夠了)。磁碟空間可能受到使用者配額的限制,而無限循環和記憶體過度消耗可能會被單元測試過早擷取(作為本地使用者而不是在 Web 伺服器上執行)。
  • 如果這還不夠,您可以考慮實施更大更好的解決方案,例如容器。最初,您會浪費時間,但從長遠來看,它可能會有所回報——當然,這取決於您的具體情況。

引用自:https://serverfault.com/questions/806771