默认情况下, FreeBSD 提供了 OPIE (One-time Passwords In Everything) 支持, 它默认使用 MD5 散列。
下面将介绍三种不同的口令。 第一种是您常用的 UNIX® 风格或 Kerberos
口令; 我们在后面的章节中将称其为 “UNIX® 口令”。
第二种是使用 OPIE 的 opiekey(1) 程序生成,
并为 opiepasswd(1) 以及登录提示所接受的一次性口令,我们称其为
“一次性口令”。 最后一类口令是您输入给
opiekey
程序 (有些时候是
opiepasswd
程序)
用以产生一次性口令的秘密口令,我们称其为 “秘密口令”
或通俗地简称为 “口令”。
秘密口令和您的 UNIX® 口令毫无关系, 尽管可以设置为相同的, 但不推荐这么做。 OPIE 秘密口令并不像旧式的 UNIX® 口令那样只能限于8位以内[8]。 您想要用多长的口令都可以。 有六、七个词的短句是很常见的选择。 在绝大多数时候, OPIE 系统和 UNIX® 口令系统完全相互独立地工作。
除了口令之外, 对于 OPIE 还有两组至关重要的数据。 其一被称作 “种子” 或 “key”, 它包括两个字符和五个数字。 另一个被称作 “迭代轮数”, 这是一个 1 到 100 之间的数字。 OPIE 通过将种子加到秘密口令后面, 并执行迭代轮数那么多次的 MD4/MD5 散列运算来得到结果, 并将结果表示为 6 个短的英文单词。 这 6 个英文单词就是您的一次性口令。 验证系统 (主要是 PAM) 会记录上次使用的一次性口令, 如果用户提供的口令的散列值与上次一致, 则可以通过身份验证。 由于使用了单向的散列函数, 因此即使截获了上次使用的口令, 也没有办法恢复出下次将要使用的口令; 每次成功登录都将导致迭代轮数递减, 这样用户和登录程序将保持同步。 每当迭代轮数减少到 1 时, 都必须重新初始化 OPIE。
接下来将讨论和每个系统有关的三个程序。
opiekey
程序能够接收带迭代计数, 种子和秘密口令,
并生成一个一次性口令, 或一张包含连续的一组一次性口令的表格。
opiepasswd
程序用于初始化 OPIE, 并修改口令、
迭代次数、种子和一次性口令。
和 opieinfo
程序可以用于检查相应的验证数据文件
(/etc/opiekeys
) 并显示执行命令的用户当前的迭代轮数和种子。
我们将介绍四种不同的操作。 在安全的连接上通过
opiepasswd
来第一次设置一次性口令,
或修改口令及种子。 第二类操作是在不安全的连接上使用
opiepasswd
辅以在安全连接上执行的
opiekey
来完成同样的工作。
第三类操作是在不安全的连接上使用 opiekey
来登录。
最后一类操作是采用 opiekey
来生成大批的密码,
以便抄下来或打印出来,在没有安全连接的地方使用。
第一次初始化 OPIE 时, 可以使用 opiepasswd
命令:
在 Enter new secret pass phrase:
或
Enter secret password:
提示之后,
应输入一个密码或口令字。 请留意, 这并不是您用于登录的口令,
它用于生成一次性的登录密钥。
“ID” 这一行给出了所需的参数:
您的登录名,
迭代轮数, 以及种子。 登录系统时,
它能够记住这些参数并呈现给您, 因此无需记忆它们。
最后一行给出了与您的秘密口令对应的、用于登录的一个一次性口令;
如果您立即重新登录, 则它将是您需要使用的那个口令。
如果您需要通过一个不安全的连接来初始化,
则应首先在安全连接上执行过一次 opiekey
;
您可能希望在可信的机器的 shell 提示符下完成。
此外还需要指定一个迭代轮数 (100 也许是一个较好的选择)
也可以选择一个自己的种子, 或让计算机随机生成一个。
在不安全的连接上 (当然是连到您希望初始化的机器上),使用
opiepasswd
命令:
为了接受默认的种子, 按下 Return (回车)。 在输入访问口令之前, 到一个有安全连接的机器上, 并给它同样的参数:
现在回到不安全的连接, 并将生成的一次性口令粘贴到相应的应用程序中。
一旦初始化过 OPIE, 当您登录时将看到类似这样的提示:
另外, OPIE 提示有一个很有用的特性 (这里没有表现出来): 如果您在口令提示处按下 Return (回车) 系统将回显刚键入的口令, 您可以藉此看到自己所键入的内容。 如果试图手工键入一个一次性密码, 这会非常有用。
此时您需要生成一个一次性密码来回答这一提示。
这项工作必须在一个可信的系统上执行
opiekey
来完成。 (也可以找到 DOS、
Windows® 以及 Mac OS® 等操作系统上运行的版本)。
这个程序需要将迭代轮数和种子提供给它。
您可以从登录提示那里复制和粘贴它们。
在可信的系统上:
现在就可以用刚刚获得的一次性口令登录了。
有时,会需要到不能访问可信的机器或安全连接的地方。
这种情形下, 可以使用
opiekey
命令来一次生成许多一次性口令。 例如:
-n 5
按顺序请求 5 个口令,
30
则指定了最后一个迭代轮数应该是多少。
注意这些口令将按与使用顺序相反的顺序来显示。
如果您比较偏执, 可以手工写下这些结果;
一般来说把它粘贴到 lpr
就可以了。
注意,每一行都显示迭代轮数及其对应的一次性的密码;
一些人建议用完一个就划掉一个。
OPIE 可以对 UNIX® 口令的使用进行基于 IP 的登录限制。
对应的文件是 /etc/opieaccess
,
这个文件默认情况下就是存在的。
请参阅 opieaccess(5) 以了解关于这个文件进一步的情况,
以及安全方面需要进行的一些考虑。
下面是一个示范的 opieaccess
文件:
这行允许指定 IP 地址的用户 (再次强调这种地址容易被伪造) 在任何时候使用 UNIX® 口令登录。
如果 opieaccess
中没有匹配的规则,
则将默认拒绝任何非 OPIE 登录。
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<questions@FreeBSD.org>.
关于本文档的问题请发信联系
<doc@FreeBSD.org>.