如何使用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 设置只能从安全终端完成。 如果您要使用不安全的协议,例如 rsh
或 telnet
,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 是 迭代次数 ,si5509 是 seed .
现在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
命令以生成您的一次性密码。 请记住,就像 opiepasswd
、opiekey
也应该只能从受信任的计算机上运行。
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 服务器。 您已经学会了如何生成一次性密码,并在每次需要登录时使用它们。 此功能对于经常移动并被迫使用公共计算机和网络的人最有用。