学习能够使您的 Linux™ 系统更能抵御攻击的技术,包括保护引导过程和本地文件、为服务和后台进程加锁、强制实行配额和限制、启用强制访问控制(mandatory access control),以及识别那些在使用新软件更新安全设施时可能会引入的安全漏洞。本系列的 第 1 部分 介绍了安全性的概念以及潜在的威胁。第 2 部分 列出了计划安全安装时需要谨记的事情。
在此系列文章中,您将看到怎么样以一种安全的方法来计划、设计、安装、配置和维护运行 Linux 的系统。除了安全概念的理论概述、安装问题、潜在的危险及其作用以外,您还将得到关于怎么样保护和加固基于 Linux 的系统的实用建议。我们将讨论最小化安装、加固 Linux 安装、授权/认证、本地和网络安全、攻击和怎么样防御攻击,以及数据安全、病毒和恶意程序。
本系列的 第 1 部分 通过给出关于安全概念和潜在危险的一般理解让您开始上手。 第 2 部分 引导您进行到下一个阶段,列出当计划一个安全安装时需要紧记的事情,其中包括制定一个详细的安全行动计划。
在本部分,我们将讨论加固(hardening)Linux 的步骤。
关于加固
要让加固行动更为成功,您应该:
- 在系统连接到网络之前进行加固,以避免攻击。
- 基于 最小权限原则(least-privilege model) 进行配置:系统应该为特定的功能只赋予其所需要的权限。类似地,用户应该只拥有他们所需要的最小限度的权限。
在完成初步计划并准备和执行了最小化安装后(见第 2 部分),您需要进行一些配置步骤。这些步骤通常被称作是加固 Linux。
- 保护引导过程
- 保护服务和后台进程
- 保护本地文件
- 强制实行配额和限制
- 启用强制访问控制
- 更新和添加安全补丁
保护引导过程
配置引导加载器(LILO 或者 Grub),以令其在引导时不被任何用户干涉;这样就防止了用户在引导提示时向内核传递参数。除非您需要远程引导(比如在远程的数据中心),不然就配置它让它要求输入密码。这是对有可能物理上接触机器的人的进一步防范;它可以防止某些事件的偶然攻击,比如使用参数 single 或者 init=/bin/sh 来获得 root shell,等等。不过,要注意,稍加努力就可以避开此防范机制(比如拆下硬盘驱动器并将其挂载到另一个系统上),除非您对文件系统也进行了加密。
对 LILO 而言,在 lilo.conf 配置文件(通常在 /etc 下)中使用参数 password 替换 prompt。对于 Grub,相应的参数是 Grub 配置文件(通常在 /boot/grub/grub/conf 下)中的 hiddenmenu、default 0 和 password。
在 /etc/inittab 中添加 sp:S:respawn:/sbin/sulogin,以确保当切换到单用户模式时运行级的配置要求输入 root 密码。
防止用户使用 Ctrl-Alt-Del 进行重新引导:在 /etc/inittab 中注释掉 ctrlaltdel 行,禁用 ctrlaltdel。通过向类似这样一行( #ca::ctrlaltdel:/sbin/shutdown -t5 -rf now)添加一个井号(#),您就可以防止那个组合键触发重新引导。
保护服务和后台进程
服务的安全配置的第一个步骤是,禁用所有不需要的服务。不提供的服务不会为潜在的入侵者所利用,有效地降低了风险。
为了找出所有启用的服务,需要检查若干个位置。另外,要禁用不安全的服务,并使用更为安全的选择来取代它们。例如,telnet 不是加密的,所以,使用加密的 ssh 服务来取代 telnet(见第 2 部分)。
当保护服务时,考虑这些方面:
- /etc/inittab
- /etc/init.d 中的引导脚本
inetd/xinetd 后台进程
- TCP 封装器(wrappers)
- 防火墙
/etc/inittab
在引导过程中,init 进程会去读取 /etc/inittab 文件中的条目。每一个条目 —— 每一行 —— 都定义了在特定的条件下运行哪个程序。这些程序或者本身是服务,或者是用于启动和停止服务。
init 进程能识别若干个称为 运行级(run levels) (由一个字母标识)的状态。当输入了运行级或者发生特定的事件(比如电源故障)时,就会考察那些条目,并执行适当的命令。
/etc/inittab 中条目的格式是,前面是条目的标签,随后是在哪些运行级下此条目要执行,然后是动作关键字以及包括命令行参数的需要执行的命令。所有这些域都由冒号隔开,典型的条目应该类似这样:
my_service:35:once:/usr/local/bin/my_service someparameter
(在 inittab 手册中可以找到动作关键字的完全列表。)
在这个示例中,条目的标签是 my_service。当输入的运行级为 3 或 5 时,它将使用参数 someparameter 来运行程序 /usr/local/bin/my_service。一旦这个程序被终止,它将不会再重新启动(动作关键字“once”)。
为了保护 Linux 系统,您应该理解 /etc/inittab 中所有条目的功能,并禁用潜在不必要的服务,方法是删除那个条目,或者在那一行的开头使用井号注释掉它。
在所有 Linux 系统中,都会有以下两类条目。第一类用来启动名为 /sbin/getty (或者类似的)的程序,这些通常是用来允许通过 Linux 虚拟控制台或者串行线登录。第二类会运行 /etc/rc.d 目录中通常名为 rc 的脚本,并将当前运行级作为参数给出。这个脚本控制服务的启动和停止(接下来会介绍)。
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一页12 3 4 5 6 下一页
上一篇: Linux 更安全(二) 下一篇:基于LINUX蜜网的防御系统
|