<< Back to shouce.jb51.net

4.3. 口令安全

口令是红帽企业 Linux 用来校验用户身份的首要方法。因此保护口令的安全性对于用户、工作站以及整个网络来说都是极端重要的。

为了安全目的,安装程序配置系统使用邮件文摘算式(Message-Digest AlgorithmMD5)和屏蔽口令。强烈建议你不要改变这些设置。

如果安装时没有选择使用 MD5 口令,较老的数据加密标准(Data Encryption StandardDES)格式就会被使用。该格式把口令限定为八个字母数字字符(不允许标点和其它特殊字符),并且提供了普通的56位级别的加密。

如果屏蔽口令在安装中被取消选择,所有的口令就会作为单向散列被保存在全局可读的 /etc/passwd 文件中,这使系统非常容易受到离线口令破译攻击。如果入侵者可以作为普通用户进入机器,他就能够把 /etc/passwd 文件复制到他自己的机器上,然后运行多种口令破译程序。如果文件中有不安全的口令,那么口令怪客找到它就只是个时间问题。

屏蔽口令通过把口令散列保存在 /etc/shadow 文件中而使系统免遭此类攻击,因为该文件只能被根用户读取。

这会强制潜在的攻击者通过登录到机器上的服务如 SSH 或 FTP 来试图进行远程口令破译。这类强力破译非常缓慢,并且会留下很明显的踪迹,因为系统文件中会记录上百次失败了的登录企图。当然,如果怪客在夜半三更时试图破译系统上的薄弱口令,他们可能会在凌晨前进入系统,从而编辑日志文件来掩盖其踪迹。

除了格式和贮存方式,口令内容是另一个值得考虑的因素。用户保护其帐号免受口令破译攻击的最重要措施是创建一个强健的口令。

4.3.1. 创建强健的口令

在创建安全口令的时候,最好能遵循以下准则:

不要做以下的事:

  • 不要只使用单词或数字 — 决不要在口令中只使用单词或数字。

    某些不安全口令包括:

    • 8675309

    • juan

    • hackme

  • 不要使用现成词汇 — 像名称、词典中的词汇、甚至电视剧或小说中的用语,即使在两端使用数字,都应该避免使用。

    某些不安全口令包括:

    • john1

    • DS-9

    • mentat123

  • 不要使用外语中的词汇 — 口令破译程序经常使用多种语言的词典来检查其词汇列表。依赖外语来达到保护口令的目的通常不起作用。

    某些不安全口令包括:

    • cheguevara

    • bienvenido1

    • 1dumbKopf

  • 不要使用黑客术语 — 如果你以为在口令中使用黑客术语 — 又称 l337 (LEET) — 就会与众不同,请再三思。许多词汇列表都包含了 LEET 式术语。

    某些不安全口令包括:

    • H4X0R

    • 1337

  • 不要使用个人信息 — 千万不要使用个人信息。如果攻击者知道你的身份,推导出你所用口令的任务就会变得非常容易。以下是你在创建口令时应该避免使用的信息类型。

    某些不安全口令包括:

    • 你的名字

    • 宠物的名字

    • 家庭成员的名字

    • 生日

    • 你的电话号码或邮政编码

  • 不要倒转现存词汇 — 优秀的口令破译者总是倒转常用词汇,因此倒转薄弱口令并不会使它更安全。

    某些不安全口令包括:

    • R0X4H

    • nauj

    • 9-DS

  • 不要笔录你的口令 — 决不要把口令写在纸上。把它牢记在心才更为安全。

  • 不要在所有机器上都使用同样的口令 — 在每个机器上使用不同的口令是及其重要的。这样,如果一个系统泄密了,所有其它系统都不会立即受到威胁。

做以下的事:

  • 口令长度至少为八个字符 — 口令越长越好。若使用 MD5 口令,它应该至少有15个字符。若使用 DES 口令,使用最长长度(8个字符)。

  • 混和大小写字母 — 红帽企业 Linux 区分大小写,因此混和大小写会增加口令的强健程度。

  • 混和字母和数字 — 在口令中添加数字,特别是在中间添加(不只在开头和结尾处)能够加强口令的强健性。

  • 包括字母和数字以外的字符 — &、$、和 > 之类的特殊字符可以极大地增强口令的强健性(若使用 DES 口令则不能使用此类字符)。

  • 挑选一个你可以记住的口令 — 如果你记不住你的口令,那么它再好也没有用;使用简写或其它记忆方法来帮助你记忆口令。

描述了这么多规则后,你可能会想创建一个满足所有条件的好口令的任务实在艰巨。幸运的是,我们随后还描述了一些你可以用来生成可记忆的安全口令的步骤:

4.3.1.1. 安全口令创建方法

人们用来创建安全口令的方法多种多样。其中最流行的一种涉及了字母简写。例如:

  • 想出一个可记忆的短语,如:

    "over the river and through the woods, to grandmother's house we go."

  • 然后只引用第一个字母而把它变成简写(包括标点)。

    otrattw,tghwg.

  • 把简写中的字母替换成数字和符号来增加其复杂性。例如,用 7 来替换 t,用 @ 来替换 a

    o7r@77w,7ghwg.

  • 至少把一个字母变成大写来增加其复杂性,如 H

    o7r@77w,7gHwg.

  • 最后,永远不要在任何系统上使用以上的口令范例

创建安全口令的重要性不言而喻,正确地管理它们也极为重要,特别是对于大机构的系统管理员来说。下节讨论了如何在机构中有效地创建和管理用户口令。

4.3.2. 在机构内创建用户口令

若机构内的用户数量很大,系统管理员可以使用两种基本方法来强制使用好口令。他们可以为用户创建口令,或者让用户自行创建口令,但是校验该口令是否可被接受。

为用户创建口令会保证这些口令是强健的,但是随着机构的扩大,这项任务也会变得越来越繁琐。它还会导致用户把口令写下来。

由于这些原因,系统管理员更喜欢让用户自行创建口令,然后再积极地校验这些口令是否可被接受,在某些情况下,通过口令老化来强制用户定期改变口令。

4.3.2.1. 强制使用强健口令

要保护网络免受入侵攻击,系统管理员应该校验机构内使用的口令是否强健。当用户被要求创建或改变口令时,他们可以使用命令行程序 passwd 来进行。该程序能够识别可插入验证管理器(Pluggable Authentication ManagerPAM),因此它会根据 pam_cracklib.so 这个 PAM 模块来检查口令是否容易被破译或是否太短。由于 PAM 是可被定制的,你可以进一步添加口令完好性检查器,如 pam_passwdqc(可在http://www.openwall.com/passwdqc/ 获得),或编写一个新模块。要获取可用 PAM 模块的列表,请查看 http://www.kernel.org/pub/linux/libs/pam/modules.html。关于 PAM 的详细信息,请参阅《红帽企业 Linux 参考指南》中的“可插入验证模块(PAM)”这一章。

不过,你应该注意,在创建口令时进行的检查并不能像运行口令破译程序那样有效地发现不良口令。

尽管我们没有在产品中附带,红帽企业 Linux 中可以运行的口令破译程序有很多。以下是一些较流行的口令破译程序的简单列表:

注记注记
 

这些工具都没有在红帽企业 Linux 中提供,因此它们在任何形式上都不被 Red Hat, Inc. 支持。

  • John The Ripper — 一个快速而灵活的破译程序。它允许使用多个词汇列表,并且具有强力破译的能力。它在 http://www.openwall.com/john/ 中可以获得。

  • Crack — 它也许是最著名的口令破译软件。Crack 虽然没有 John The Ripper 那么容易使用,但它的运行速度很快。你可以在 http://www.crypticide.org/users/alecm/ 上找到它。

  • SlurpieSlurpieJohn The RipperCrack 相似,但是它被设计成可在多个计算机上同时运行,创建了一种分布型口令破译攻击。你可以在 http://www.ussrback.com/distributed.htm 上找到它以及其它分布型攻击的安全评估工具。

警告警告
 

在试图破译机构内部的口令前,总要先获取一份书面授权书。

4.3.2.2. 口令老化

口令老化是系统管理员用来防止机构内不良口令的另一种技术。口令老化意味着过了一段预先设定的时间后(通常是90天),用户会被提示创建一个新口令。它所根据的理论是,如果用户被强制定期改变口令,某个破译的口令对入侵者来说就只有有限的利用机会。不过,口令老化的不利性是,用户很可能会把他们的口令写下来。

红帽企业 Linux 中用来指定口令老化的两个主要程序是:chage 命令和图形化的用户管理器system-config-users)程序。

chage 命令的 -M 选项指定口令的最长有效期。例如,要把用户的口令设置为90天后过期,键入以下命令:

chage -M 90 <username>

在上面的命令中,把 <username> 替换成用户名。如果不想让口令过期,传统方法是在 -M 选项后使用 99999(这相当于273年)。

图形化的用户管理器程序也可以被用来创建口令老化策略。要使用该程序,点击面板上的「主菜单」 => 「系统设置」 => 「用户和组群」,或在 shell 提示下(如 XTerm 或 GNOME 终端)键入 system-config-users 命令。点击「用户」活页标签,从用户列表中选择用户,然后点击按钮菜单上的「属性」(或从拉下菜单中选择「文件」 => 「属性」

然后点击「口令信息」活页标签,输入口令过期的天数,如图 4-1所示。

图 4-1. 「口令信息」面板

关于用户和组群配置的详情(包括强制首次口令的说明),请参阅《红帽企业 Linux 系统管理指南》中的“用户和组群配置”这一章。关于用户和资源管理的概述,请参阅《红帽企业 Linux 系统管理介绍》中的“管理用户帐号和资源使用”这一章。