如果您有一些用户, 并想要对他们所使用的系统资源加以限制, FreeBSD 提供了一些系统管理员限制用户访问系统资源的方法。 这些限制通常被分为两种: 磁盘配额, 以及其它资源限制。
磁盘配额限制用户对磁盘的使用, 而且它还提供一种快速检查用户使用磁盘数量而不需要时刻计算的方法。 配额将在
文件系统配额
讨论.
其它资源限制包括CPU、 内存以及用户可能会使用的其它资源。 这些是通过对登录进行分类完成的, 下面将做讨论。
登录的类由
/etc/login.conf
文件定义。 比较精确的描述超出了本章的范围, 但
login.conf(5)
联机手册会有比较详细的描述。 可以说每个用户都分配到一个登录类 (默认是
defalut
), 每个登录类都有一套和它相对应的功能。 登录功能是
名字=值
这样的一对值, 其中
名字
是一个众所周知的标识符,
值
是一个根据名字经过处理得到的任意字符串。 设置登录类和功能相当简单, 在
login.conf(5)
联机手册会有比较详细的描述。
|
|
系统并不直接读取
/etc/login.conf
中的配置, 而是采用数据库文件
/etc/login.conf.db
以提供更快的查找能力。 要从
/etc/login.conf
文件生成
/etc/login.conf.db
, 应使用下面的命令:
# cap_mkdb /etc/login.conf
|
资源限制与普通登录限制是有区别的。 首先, 对于每种限制, 有软限制 (比较常见) 和硬限制之分。 一个软限制可能被用户调整过, 但不会超过硬限制。 越往后可能越低, 但不会升高。 其次, 绝大多数资源限制会分配特定用户的每个进程, 而不是该用户的全部进程。 注意, 这些区别是资源限制的特殊操作所规定的, 不是登录功能框架的完成 (也就是说, 他们
实际上
不是一个登录功能的特例)。
-
coredumpsize
-
很明显, 由程序产生的核心文件大小的限制在磁盘使用上是属于其它限制的 (例如,
文件大小
, 磁盘配额)。 不过, 由于用户自己无法产生核心文件, 而且通常并不删除它们, 设置这个可以尽量避免由于一个大型应用程序的崩溃所造成的大量磁盘空间的浪费。 (例如, emacs) 崩溃。
-
cputime
-
这是一个用户进程所能消耗的最长 CPU 时间。 违反限制的进程, 将被内核杀掉。
|
|
这是一个有关CPU消耗的
时钟
限制, 不是
top(1)
和
ps(1)
命令时屏幕上显示的CPU消耗的百分比。 在写此说明时, 后者的限制是不太可能和没有价值的: 编译器 - 编译一个可能是合法的工作 - 可以在某一时刻轻易的用掉 100% 的 CPU。
|
-
filesize
-
这是用户可以处理一个文件的最大值。 不象
磁盘配额
, 这个限制是对单个文件强制执行的, 不是用户自己的所有文件。
-
maxproc
-
这是一个用户可以运行的最大进程数。 这包括前台和后台进程。 很明显, 这不可能比系统指定
kern.maxproc
sysctl(8)
的限制要大。 同时也要注意, 设置的过小会妨碍用户的处理能力: 可能需要多次登录或执行多个管道。 一些任务, 例如编译一些大的程序, 也可能会产生很多进程 (例如,
make(1)
,
cc(1)
以及其它一些预处理程序)。
-
memorylocked
-
这是一个进程允许锁到主存中的最大内存容量 (参见
mlock(2)
)。 大型程序, 例如像
amd(8)
在遇到问题时, 它们得到的巨大交换量无法传递给系统进行处理。
-
memoryuse
-
这是在给定时间内一个进程可能消耗的最大内存数量。 它包括核心内存和交换内存。 在限制内存消耗方面, 这不是一个完全的限制,但它是一个好的开始。
-
openfiles
-
这是一个进程可以打开的最大文件数。 在FreeBSD中, 文件可以被表现为套接字和IPC通道; 注意不要把这个数设置的太小。 系统级的限制是由
kern.maxfiles
定义的, 详情参见
sysctl(8)
。
-
sbsize
-
这是网络内存数量的限制, 这主要是针对通过创建许多套接字的老式 DoS 攻击的, 但也可以用来限制网络通信。
-
stacksize
-
这是一个进程堆栈可能达到的最大值。 它不能单独的限制一个程序可能使用的内存数量; 所以, 需要与其它的限制手段配合使用。
在设置资源限制时, 有一些其他的事需要注意。 下面是一些通常的技巧、 建议和注意事项。
-
系统启动的进程
/etc/rc
会被指派给
守护程序
的登录类.
-
虽然
/etc/login.conf
文件是一个对绝大多数限制做合理配置的资源文件, 但只有您也就是系统管理员,才知道什么最适合您的系统。 设置的太高可能会因为过于开放而导致系统被滥用, 而设置过低, 则可能降低效率。
-
使用 X Window 的用户可能要比其他用户使用更多的资源。 因为X11本身就使用很多资源, 而且它鼓励用户同时运行更多的程序。
-
务必注意, 许多限制措施是针对单个进程来实施的, 它们并不限制某一用户所能用到的总量。 例如, 将
openfiles
设置为 50 表示以该用户身份运行的进程最多只能打开 50 个文件。 因而, 用户实际可以打开的文件总数就应该是
maxproc
和
openfiles
值的乘积。 对内存用量的限额与此类似。