Linux 当然可以被认为与来自其他供应商的操作系统一样安全,甚至更安全。诚然,随着 Linux 变得越来越流行,它正成为黑客集中精力进行入侵的一个非常有吸引力的目标。虽然不时会发现漏洞,但 Linux 的开放性通常意味着这些漏洞会被快速修补,并且安全公告会被广泛传播,其中包含临时解决方法或指向更新软件的链接。
我不会假装自己是安全问题专家,但我至少意识到这些问题,我认为这是使系统尽可能安全的关键所在。尽管意识到并勤奋地跟进安全更新绝不能保证系统的安全措施不会被规避,但入侵的可能性会大大降低。
虽然在外部服务中发现过可能被黑客利用来入侵系统的安全漏洞(例如,IMAP 守护程序漏洞),但我认为,一个决心坚定的黑客更有可能从 内部 渗透系统。与少数几个与外部世界通信的服务相比,shell 中有 数千个 命令和实用程序可用,其中一个或多个可能包含可被利用来渗透安全的错误(话虽如此,我必须承认最近发现我维护的其中一台服务器通过外部服务被攻破)。
因此,我建议避免向用户提供 shell 帐户,除非绝对必要。即使您认为您的用户完全值得信赖,并且毫不犹豫地向他们提供 shell 访问权限,但只需要其中一个用户拥有一个弱密码就足够了。外部黑客通过利用这个弱密码进入您的系统后,就可以从容地在内部工作,寻找进一步的弱点。
幸运的是,您可以做一些事情来大大提高 Linux 系统的安全性。虽然详细讨论安全问题超出了本文档的范围,但以下清单提供了一些您应该做的最重要的事情来增强安全性
升级系统工具、应用程序和内核迄今为止,系统入侵最常见的原因是未能勤奋地保持服务器的最新状态。定期升级系统内核、工具和实用程序将确保您的系统不会充斥着已知存在漏洞的旧项目。有关保持服务器最新的详细信息,请参阅 第 4.9 节 以及 第 10.3 节。
影子密码您绝对应该使用影子密码;切换到这种密码格式 非常容易!有关详细信息,请参阅 第 6.6 节。
智能密码管理确保密码,特别是 您为之提供 shell 访问权限的用户,是强密码并经常更改。此外,如果您使用多台服务器,请抵制为所有服务器使用相同密码的诱惑(否则,如果黑客使用发现的密码侵入一台服务器,他或她就可以侵入所有服务器)。
使用安全 shell (ssh)切换到使用 ``ssh'' 而不是 ``telnet''。Telnet 不安全有两个原因:一是会话未加密,这意味着所有内容,包括用户名和密码,都以明文形式传输。其次,开放的 telnet 端口是黑客会尝试连接的首要位置之一。
Ssh 提供加密和压缩连接,并且比 telnet 连接提供更高的安全性。您可以在 Linux 下运行 ssh 服务器(允许传入的安全连接)以及客户端(用于传出的安全连接)。您可以在 ftp://ftp.replay.com/pub/replay/redhat/i386/ 找到二进制 RPM 包。您将需要以下文件(当您阅读本文时,可能会有更新的版本)
ssh-1.2.27-5i.i386.rpm 基础软件包。
ssh-clients-1.2.27-5i.i386.rpm 用于传出连接的客户端。
ssh-extras-1.2.27-5i.i386.rpm 一些方便的基于 perl 的脚本。
ssh-server-1.2.27-5i.i386.rpm 用于传入连接的服务器。
注意:注意:上面列出的 SSH RPM 文件是国际版本。如果您居住在美国或加拿大,您可以选择下载美国软件包(可能具有更强的加密算法);这些软件包的版本号后缀是 ``us'' 而不是 ``i''。根据美国法律,向美国或加拿大境外出口强大的加密产品是 *非法的*。希望有一天美国司法部的白痴们最终会明白过来,并取消这项愚蠢的限制(Red Hat 没有在其发行版中包含 SSH 正是因为这个原因,我们 *都* 遭受了损失)。
如果您的 Windows 用户对无法再连接到您的系统感到愤怒,他们会很高兴知道有几个免费的 Windows ssh 客户端可用
注意:注意:如果您决定切换到使用 ssh,请确保在 *所有* 服务器上安装并使用它。拥有五台安全服务器和一台不安全服务器是浪费时间,尤其 是如果您愚蠢到在多台服务器上使用相同的密码。
限制对外部服务的访问接下来,您应该编辑 ``/etc/hosts.allow'' 以及 ``/etc/hosts.deny'' 文件以限制对外部主机的服务访问。以下是如何限制 telnet 和 ftp 访问的示例。首先是 ``/etc/hosts.allow'' 文件
# hosts.allow in.telnetd: 123.12.41., 126.27.18., .mydomain.name, .another.name in.ftpd: 123.12.41., 126.27.18., .mydomain.name, .another.name |
以上设置将允许 IP C 类 123.12.41.* 和 126.27.18.* 中的任何主机,以及 mydomain.name 和 another.name 域内的任何主机建立 telnet 和 ftp 连接。
接下来是 ``/etc/hosts.deny'' 文件
# hosts.deny in.telnetd: ALL in.ftpd: ALL |
关闭并卸载不需要的服务编辑您的 ``/etc/inetd.conf'' 文件,并禁用(即使用 ``#'' 字符注释掉)任何不需要的服务(如果您正在使用上面推荐的 ssh,您可能希望禁用 ``telnet'' 服务)。完成此操作后,以 root 用户身份键入 ``/etc/rc.d/init.d/inet restart'' 以使用更改重启 inetd 守护程序。
安装安全检测系统考虑安装安全程序,例如可以检测入侵的 ``Tripwire''(参见 http://www.tripwiresecurity.com/)和可以帮助预防入侵的 ``Abacus Sentry''(参见 http://www.psionic.com/abacus/)。
尽职调查密切关注您的系统,执行随机安全审计(可以像检查密码文件中的可疑条目、检查您的进程列表以及检查您的日志文件中的可疑条目一样简单)对于保持系统安全大有帮助。此外,向有关部门报告任何入侵尝试 —— 这样做可能很麻烦,特别是如果您的系统在一周内遭受多次此类攻击,但此类报告确保潜在的黑客因受到惩罚的威胁而被震慑,并确保其他系统(本身可能已被入侵)保持安全。
假设您使用 ``RPM'' 实用程序安装和升级系统工具和应用程序,您可能希望通过使用以下命令审计已安装的软件包来验证其完整性
rpm --verify -a > /tmp/rpm-audit.txt |
上面的命令将使用所有相关文件检查您系统的 RPM 数据库,并通过显示 '5' 来指示任何已修改的文件。以下是此类审计的一些示例输出
S.5....T /bin/ls S.5....T /usr/bin/du ......G. /dev/tty5 .....U.. /dev/vcs5 .....U.. /dev/vcsa5 S.5....T c /etc/lynx.cfg S.5....T c /etc/sendmail.cf |
在上面的示例输出中,您可以看到七个文件的列表,其中四个已被修改。现在,显然,如果您对系统进行了任何自定义,则会有几个,甚至很多文件已被修改。简要检查一下/etc/lynx.cfg和/etc/sendmail.cf文件,或许通过目视或从备份中查看,可能会揭示您对系统所做的合法配置更改。
但是,请注意在上面的示例中,两个修改后的文件是 *二进制可执行* 文件? 很可能这两个二进制文件,``ls'' 命令以及 ``du'' 命令,实际上是系统黑客安装的木马二进制文件,用于执行一些邪恶的目的(``diff'' 命令对任何修改后的二进制文件与从备份或 RPM 恢复的二进制文件执行,可能会揭示显着的大小或其他差异;这是木马的进一步证据。)
(有关 ``RPM'', 请参阅 第 10.1 节。)
有关安全相关问题的更多信息,一个名为 "Securing RedHat 5.x" 的优秀资源文档可在 http://redhat-security.ens.utulsa.edu/ 获取。有关 Linux 加密和相关软件的优秀资源可在 http://replay.com/redhat/ 获取。