6.6. 限制使用者

如果你運作了一個多重使用者的系統,有可能你並不信任所有使用者都不會 破壞系統。FreeBSD 提供了一些方法讓系統管理可以限制每個個別使用者可使用 的系統資源。這些限制一般分為兩個部分:磁碟配額,和其他資源限制。

磁碟配額是一個由系統管理員告訴檔案系統每個使用可以使用的空間量的方法 ,此外,它也提供了一個快速計算某使用者磁碟使用量的方法,而不用每次加總。 磁碟配額在 Section 10.7 討論。

其他資源限制包括了限制 CPU,記憶體,和其他使用者可使用的資源。 這些用登入分類 (login classes) 來定義的將在此討論。

登入分類定義在 /etc/login.conf。精確的語法不在 這一節詳述,而在 login.conf(5) 說明頁有詳細解釋。可以說每個使用者 被分配進一個登入分類中 (預設是 default),而每一個登入 分類有一組相關的登入容量。登入容量是一對 name=valuename 是眾所周知的鑑別字而 value 是一個依據 name 來處理的任意字串。 設定登入分類和容量並不簡單,在 login.conf(5) 有詳細說明。

資源限制在兩方面和一般的登入容量不同。第一,每一項限制,有軟性限制 及硬性限制。軟性限制可由使用者或應用程式調整,但不能高於硬性限制。後者 可被使用者降低,但不能提高。第二,大部分資源限制針對在單一使用者的個別 行程,而不是這使用者全部行程。注意,這些不同處是託管藉著特定的限制處理 ,而不是藉著登入容量架構的實作 (例如,他們不是 真正 登入容量的特例)。

另外,底下順便列出一些常用的資源限制 (剩下的,以及其他的登入容量, 在 login.conf(5) 有說明)。

coredumpsize

這限制了由程式所產生的 core 檔的大小,顯然是為了磁碟使用空間 的理由 (例如, filesize,或者硬碟配額)。 儘管如此,它常用來當成建議的硬碟空間消耗的控制方法:因為使用者自己 不會產生 core 檔,而且也不會刪除這些 core 檔,控制這個選項可以避免 在大型程式 (例如 Emacs) 掛掉的時候塞爆磁碟空間。

cputime

這是一個使用者行程最大可使用的 CPU 時間總量。超出的行程會被 kernel 殺掉。

Note: 這是限制消耗的 CPU 時間,而不是 顯示在 top(1)ps(1) 的 CPU 使用百分比。在寫 此說明時,後者的限制是不太可能的,而且也沒什麼用的:一個 編譯器 -- 可能是一個合法的工作 -- 可以在某一時刻 輕易的用掉 100% 的 CPU。

filesize

這是限制使用者可擁有的檔案大小。不同於 磁碟配額,限制針對個別的檔案, 而不是某使用者所擁有的所有檔案。

maxproc

這限制了使用者最大可執行的行程數。包括了前景以及背景的行程。 因為明顯的理由,此限制不可超過 kern.maxproc 的系統限制。另外注意這如果限制太小,可能妨礙使用者的產能:有可能 常常會同時登入多次或者執行管線。某些工作,像是編譯大型的檔案, 也會衍生出多個行程 (例如 make(1)cc(1),和其他中介 前置處理器)。

memorylocked

這是某行程在主記憶體中最大可要求鎖定的空間量。 (請看 mlock(2))。一些系統關鍵程式會這樣,像是 amd(8), 在它們 swap 時不會產生系統的麻煩。

memoryuse

這限制了某行程在任一時刻最大可使用的記憶體空間。 這包含了記憶體以及 swap 空間。這不是限制記憶體使用的總量限制, 但是是一個好的開始。

openfiles

這是某行程最大可開啟的檔案數目。在 FreeBSD,檔案也用來代表 socket 或者 IPC channels;因此,小心別設定得太低。全系統的設定 定義在 kern.maxfiles

sbsize

這限制了某使用者可使用的網路記憶體,例如 mbuf。 一開始是用來回應產生一堆 socket 的古老 DoS 攻擊,但是也可用在 限制網路溝通。

stacksize

這限制了一個行程的堆疊最大可成長的大小。此單獨的限制不能限制 某程式可以使用的空間;因此,它常常用來搭配其他限制。

其他還有另外幾個要記得設定的資源限制。接下來是一些一般的提示, 建議,和其他的意見。

其他有關資源限制和登入分類的資訊,請參考相關的說明頁: cap_mkdb(1)getrlimit(2)login.conf(5)