防火墙
为了防范与不应该运行的服务或者不应该被 Internet 等特定网络所访问的服务的通信,建议安装一个防火墙。防火墙提供网络间基于信任级别的受控通信,并权衡使用基于角色的安全策略和最小权限原则允许或者拒绝对特定服务的访问。
防火墙的安装与配置是一个非常复杂的话题,不在本系列文章的讨论范围之内。
保护本地文件系统
保护本地文件系统涉及的是文件和目录的所有者及访问它们的权限。要保护文件系统,文件和目录的保护位必须设置为只授予最小限度的权限。
要特别注意关于所有人可写的文件和系统目录的不适当权限,以及所谓的 setuid 或者 setgid 命令。这些命令运行时的用户权限比运行此命令的用户实际拥有的权限更高。对访问只有 root 才可以访问的文件来说这可能是必需的(比如 /bin/passwd 需要访问 /etc/passwd)。对于这些命令,要确保它们每一个都确实需要设置 setuid/setgid 位。如果不是这样,那么禁用它。
当某个分区上的所有文件确实都不需要 setuid/setgid 位时, /etc/fstab 中的 nosuid 选项可以为相应文件系统中的每个文件都禁用它(下面的示例中的 /dev/hdc1):
|
此外,对于所有敏感的数据,都有必要对其进行加密并使用密码保护它。为此,GnuPG 提供了一个合适的软件包。
强制实行配额和限制
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. 设置配额和限制
|
|
要激活这些限制,您需要在 /etc/pam.d/login 底部添加下面一行: session required /lib/security/pam_limits.so。
配额让您能够限制用户和组的 inode 数目和可用空间。注意,配额是在每个加载点上定义的,所以,如果用户在若干个分区上有写权限,那么要确保为它们每个都定义配额。
配额是管理员最小化 DoS 攻击的一种方式,这类攻击以填满硬盘驱动器上所有可用空间为手段(这会使其他进程不能创建临时文件而使它们失败)。根据您正在使用的发行版本,您可以安装自带的配额工具,也可以自己下载、编译并安装它们(参见 参考资料)。