Linux PAM(插入式认证模块,Pluggable Authentication Modules)可以强制实行一些实用的限制,在 /etc/security/limits.conf 文件中对此进行配置。谨记,这些限制适用于单个对话。您可以使用 maxlogins 来控制总额限制。limits.conf 中的条目有如下结构: username|@groupname type resource limit

为了与 username 区别,groupname 之前必须加 @。类型必须是 soft 或者 hard。软限制(soft-limit)可以被超出,通常只是警戒线,而硬限制(hard-limit)不能被超出。resource 可以是下面的关键字之一:

  • core - 限制内核文件的大小(KB)。
  • data - 最大数据大小(KB)。
  • fsize - 最大文件大小(KB)。
  • memlock - 最大锁定内存地址空间(KB)。
  • nofile - 打开文件的最大数目。
  • rss - 最大持久设置大小(KB)。
  • stack - 最大栈大小(KB)。
  • cpu - 以分钟为单位的最多 CPU 时间。
  • nproc - 进程的最大数目。
  • as - 地址空间限制。
  • maxlogins - 此用户允许登录的最大数目。

在下面的代码示例中,所有用户每个会话都限制在 10 MB,并允许同时有四个登录。第三行禁用了每个人的内核转储。第四行除去了用户 bin 的所有限制。ftp 允许有 10 个并发会话(对匿名 ftp 帐号尤其实用);managers 组的成员的进程数目限制为 40 个。developers 有 64 MB 的 memlock 限制,wwwusers 的成员不能创建大于 50 MB 的文件。


清单 3. 设置配额和限制

				
*           hard  rss        10000
*           hard  maxlogins      4
*           hard  core           0
bin         -
ftp         hard  maxlogins     10
@managers   hard  nproc         40
@developers hard  memlock    64000
@wwwusers   hard  fsize      50000

要激活这些限制,您需要在 /etc/pam.d/login 底部添加下面一行: session required /lib/security/pam_limits.so

配额让您能够限制用户和组的 inode 数目和可用空间。注意,配额是在每个加载点上定义的,所以,如果用户在若干个分区上有写权限,那么要确保为它们每个都定义配额。

配额是管理员最小化 DoS 攻击的一种方式,这类攻击以填满硬盘驱动器上所有可用空间为手段(这会使其他进程不能创建临时文件而使它们失败)。根据您正在使用的发行版本,您可以安装自带的配额工具,也可以自己下载、编译并安装它们。

必须在内核中启用配额。当前大部分发行版本都支持配额。如果您的发行版本没有启用配额,那么参考 参考资料 中的 mini-howto 来获得启用它们的说明。

要为文件系统启用配额,您必须在 /etc/fstab 中为相应的那行添加一个选项。使用 usrquotagrpquota 来启用用户配额和组配额,如清单 4 所示:


清单 4. 启用用户配额和组配额

				
/dev/hda1    /           ext3    defaults                     1 1
/dev/hda2    /home       ext3    defaults,usrquota            1 1
/dev/hda3    /tmp        ext3    defaults,usrquota,grpquota   1 1
/dev/hda4    /shared     ext3    defaults,grpquota            1 1
/dev/hdc1    /mnt/cdrom  iso9660 nosuid,user                  1 2
然后,使用 mount -a -o remount 重新挂载相应的文件系统,来激活刚才添加的选项;然后使用 quotacheck -cugvm 创建一个二进制配额文件,其中包含了机器可读格式的配额配置。这是配额子系统要操作的文件。

使用工具 edquota 完成配额的指派。要为用户 alice 定义限制,则使用 edquota -u alice 来调用它。环境变量 EDITOR 中定义的编辑器(默认是 vi)会打开,其中有类似如下的内容:

Quotas for user alice:
/dev/hda2: blocks in use: 3567, limits (soft = 5500, hard = 6500)
         inodes in use: 412, limits (soft = 1000, hard = 1500)
“in use”值只是为您提供信息,不能被修改 —— 您能修改的只是软限制和硬限制。保存并退出编辑器后, edquota 会读取您刚才编辑的临时文件,并将那些值传递到二进制配额文件,以使您的修改生效。对组配额的编辑与此相同,只是必须使用 -g 选项而不是 -u

软限制是警告级别,可以被超出,而硬限制是严格强制的。软限制有一个 宽限期(grace period) (有时也称为 软性时间限制(soft time limits));这是允许用户超出软限制直到被系统强制执行之前的时间间隔。

您可以使用 edquota -t 来设置宽限期。可以使用的单位是秒、分、小时、天、周和月。其他管理配额的实用工具包括 repquota(总结某个文件系统的配额)、 quotaonquotaoff(打开和关闭配额)。