如何使用OPIE获取FreeBSD10.1的一次性密码

来自菜鸟教程
跳转至:导航、​搜索

介绍

SSH 是最流行的远程登录服务器的方式。 它是一种加密协议,可保护您的密码免受中间人攻击和重放攻击。

但是,您必须记住,SSH 仅在传输过程中保护您的数据。 攻击者可以通过其他方式发现您的 SSH 密码,例如使用键盘记录器或战略性放置的摄像头。

只要您使用受信任的计算机(例如,属于您或您公司的计算机),并且在安全的位置进行操作,您就不必担心此类攻击。 但是,有时您可能需要使用公共计算机。 为了在这种情况下保护您的密码,FreeBSD 提供了一种称为 One-time Passwords In Everything 或 OPIE 的安全功能。

在本教程中,您将学习如何生成和使用一次性密码来登录您的远程 FreeBSD 服务器。 当您在安全位置时,您可以预先生成一个或多个一次性密码,并在以后从不太安全的位置访问服务器时保存它们。 这样,即使您的一次性密码被记录下来,它对攻击者也不会有用。

先决条件

为了遵循本教程,您将需要:

  • 可通过 SSH 访问的 FreeBSD 10.1 服务器
  • 允许切换到root的用户; DigitalOcean 上的默认 freebsd 用户很好

第 1 步 — 创建一个新的 OPIE 用户

为确保您不会被锁定在远程服务器之外,最好创建一个单独的用户以与 OPIE 一起使用。

通过输入以下命令切换到 root

sudo su

要创建一个您想使用一次性密码的新用户,请输入:

adduser

系统将提示您输入有关用户的各种详细信息。 让用户名是 sammy。 当提示输入密码时,请确保输入强密码。 对于所有其他提示,您只需按 ENTER 即可选择默认值。

InteractiveUsername: sammy
Full name: Sammy the Shark
Uid (Leave empty for default):
Login group [sammy]:
Login group is sammy. Invite sammy into other groups? []: 
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: 
Home directory [/home/sammy]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password: password
Enter password again: password
Lock out the account after creation? [no]:
Username   : sammy
Password   : ****
Full Name  : My Test User
Uid        : 1001
Class      :
Groups     : sammy
Home       : /home/sammy
Shell      : /usr/local/bin/zsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (sammy) to the user database.
Add another user? (yes/no): no
Goodbye!

输入yes确认详细信息,当询问是否要添加其他用户时,输入no退出adduser

您现在可以切换回您的原始用户,默认的 freebsd 用户或您通常的 sudo 用户:

exit

此时,您应该使用非 OPIE sudo 用户登录到您的服务器。

第 2 步 — 以新 OPIE 用户身份登录

在您当前的终端会话中,使用 ssh 以 OPIE 用户 sammy 身份登录。

ssh sammy@localhost

这很重要,因为 OPIE 设置只能从安全终端完成。 如果您要使用不安全的协议,例如 rshtelnet,OPIE 会报错。

第 3 步 — 为新用户启用 OPIE

警告

为用户启用 OPIE 后,该用户将无法使用普通密码登录! 因此,请确保在没有 OPIE 的情况下至少让一位用户可以访问; 在本教程中,我们让 freebsd 用户使用标准 SSH 密钥登录。


要将用户添加到 OPIE 身份验证系统,请使用命令 opiepasswd-c 选项告诉命令您正在使用受信任的计算机并且位于安全位置。

opiepasswd -c

当系统提示您输入密码短语时,请输入至少十个字符长的密码短语。 此密码不能与用户的 SSH 密码相同。 稍后您将需要此密码来生成一次性密码。

该命令的完整输出将如下所示:

InteractiveAdding sammy:
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase: Sammy's secret pass phrase
Again new secret pass phrase: Sammy's secret pass phrase

您将收到一个新的 OPIE 种子和一个随机密码:

OutputID sammy OTP key is 499 si5509
RITE NERO BASS SOFA BEND TO

在此输出中,sammy 是用户,499迭代次数si5509seed .

现在sammy已经加入了OPIE认证系统,你不能再使用实际的SSH密码登录了。 在本地机器上打开一个新终端并输入:

ssh sammy@your_server_ip

您将看到如下所示的提示:

Promptotp-md5 498 zi5509 ext
Password:

您现在需要输入一次性密码。 由于我们尚未生成任何一次性密码,因此您暂时无法登录。 关闭终端,返回之前的终端,以 sammy 身份登录。

第 4 步 — 创建一次性密码

当用户被添加到 OPIE 认证系统时,从 499 开始的迭代计数和随机种子与用户相关联。 您需要知道这些值才能生成一次性密码。

警告

请记住,始终从安全位置生成一次性密码。


如果您已经以 sammy 身份登录,此时您应该是,您可以使用命令 opieinfo 确定这些值。

opieinfo

它的输出将包含两个值。 第一个是序列号,第二个是种子。

Output498 zi5509

注释标签

如果您当前使用非 OPIE 用户登录,您将收到如下错误:

Outputfreebsd not found in database.

在这种情况下,您可以通过打开一个新的终端窗口并尝试使用 OPIE 用户登录来获取信息。 密码提示将包括当前迭代计数和种子。 复制此信息并在经过身份验证的会话中使用它。


将这些值传递给 opiekey 命令以生成您的一次性密码。 请记住,就像 opiepasswdopiekey 也应该只能从受信任的计算机上运行。

opiekey 498 zi5509

或者,您可以输入:

opiekey `opieinfo`

系统将提示您输入 OPIE 用户的密码。 输入您在上一步中选择的密码短语。 该命令的输出如下:

InteractiveUsing the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: Sammy's secret pass phrase
PER POE TURF LITE ZONE BART

包含六个简短单词的最后一行是您的一次性密码。

打开一个新终端尝试再次登录:

ssh sammy@your_server_ip

您的提示仍然是相同的:

Promptotp-md5 498 zi5509 ext
Password:

请注意,您在此提示中看到的数字与 opieinfo 的输出以及您传递给 opiekey 的参数相匹配。

现在,您可以粘贴密码短语,也可以手动输入。 在开始输入长密码之前,为避免错误,请按 ENTER。 您的提示将更改,您将可以看到您输入的密码:

Promptotp-md5 498 zi5509 ext
Password [echo on]: 

现在输入您的一次性密码,您将能够以 sammy 身份登录到您的服务器。

通过键入 exit 或关闭终端来结束 SSH 会话。

打开另一个终端,并尝试建立一个新的连接:

ssh sammy@your_server_ip

这一次,提示会略有不同。

Promptotp-md5 497 zi5509 ext
Password:

如您所见,序列号已更改; 它已减一。 在使用具有这些新值的 opiekey 生成新的一次性密码之前,您将无法再次登录。 换句话说,您将不得不重新完成本教程的 Step 4 中描述的过程。

第 5 步 — 创建多个一次性密码

如果您知道在几天内无法访问受信任的计算机,则可能需要多个一次性密码,以便多次访问您的服务器。 您可以通过使用 -n 选项运行 opiekey 来指定所需的一次性密码的数量。 例如,要生成三个一次性密码,请输入:

opiekey -n 3 `opieinfo`

笔记

您可以像以前一样提供迭代计数和种子,而不是使用 opieinfo


输出将包含三个密码及其序列号:

InteractiveUsing the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: Sammy's secret pass phrase
495: BEAM BOW TOO CAVE BOWL AUK
496: HIVE KITE HUGE SANG VAT FOAM
497: THIN ALL BUT NIL SUP BALE

一次性密码也可以通过使用 -x 选项以十六进制数字的形式生成:

opiekey -x -n 3 `opieinfo`

当然,密码现在看起来不那么容易理解了:

InteractiveUsing the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: Sammy's secret pass phrase
495: 5484 C106 B214 B801
496: 98F1 E6CF 7F54 3108
497: 6010 2C11 192A EDAC

你现在应该把这些写在纸上,并在旅行时随身携带。 下次需要登录时,用纸找到与SSH提示符中显示的序列号相关联的密码,然后输入。 使用密码后,您可能希望将其删除。 不用说,你必须确保这篇论文不会落入坏人之手。

当您用完纸上的所有密码后,只需再次重复此步骤即可生成更多密码。 但是,如果您用完所有 498 个密码,并且您的序列号变为零,您将不得不再次调用 opiepasswd -c。 这样做会重置随机种子和序列号。

结论

在现实生活中,您应该事先从安全的位置准备适当数量的密码,将它们写在纸上,并在需要从不安全的位置登录时一次使用一个。 确保纸张安全!

在本教程中,您学习了如何使用 OPIE 身份验证系统从不受信任的计算机上的终端安全地登录到远程 FreeBSD 服务器。 您已经学会了如何生成一次性密码,并在每次需要登录时使用它们。 此功能对于经常移动并被迫使用公共计算机和网络的人最有用。