如何在Ubuntu 14.04的一次性使用SSH密码安装和使用OTPW

介绍

SSH提供了很多安全功能,以确保您的连接是安全的,并且您可以向远程主机进行身份验证,而无需担心。 特别是,SSH密钥创建一个安全的连接方式,而不通过互联网传输您的密码或密码。

但是,有些情况下使用SSH密钥不合理或可能实际上不安全。 假设您正试图从公共计算机或计算机上使用SSH,以尝试为朋友排查故障。 公钥系统假定你是连接电脑至少在某种程度上值得信赖。 这并不总是这样。

如果在此方案中使用密钥对,即使您的密钥受密码保护,该密钥也将被解密并放入本地计算机的内存中以进行处理,至少为了进行身份验证。 这意味着如果您不信任本地计算机,它是脆弱的。

系统调用一次密码验证 OTPW创建这些种情况中的作用。 一次性密码是已并入其他授权机制(如双因素身份验证和单点登录解决方案)的系统。

在本指南中,我们将在Ubuntu 14.04 VPS实例上设置OTPW。 这将允许我们使用只能使用一次的双组件密码登录。

基本概念

OTPW的工作方式是挂接到PAM认证系统中。

将系统配置为允许使用OTPW登录后,可以通过提供前缀密码来生成一组密码“chunks”。 然后,您可以打印这些出来,让他们你将有机会在设备上,并且您信任(如您的手机上加密),或者,你可以使用,你不信任的计算机访问某些其他格式。

现在,当系统提示您输入密码时,将会给出一个参考号。 您将输入您创建的前缀密码,后跟与给定参考号相关联的密码部分。

此密码只能工作一次。 如果有人在您的计算机上进行密钥日志记录或能够看到您键入密码,则无所谓,因为在您登录后它将无效。

安装组件

要配置此系统,我们需要先安装必要的组件。

由于身份验证完全在服务器端处理,客户端与常规密码提示没有区别,因此我们只会在服务器上安装几个软件包。

我们将更新包缓存并从存储库安装这些:

sudo apt-get update
sudo apt-get install otpw-bin libpam-otpw

正如你所看到的,机制分为两部分。 第一个组件用于生成和管理一次性密码。 第二个是与PAM一起使用的插件,用于对这些密码文件进行身份验证。

编辑PAM以利用OTPW

在我们对实际密码进行任何操作之前,我们需要添加OTPW作为PAM的选项。

我们希望在限制常规密码登录的方式来做到这一点,因为我们假定你已经您信任的计算机上的身份验证。 我们的配置将使用SSH密钥,如果它们可用,否则,它将落在OTPW机制上。

为此,我们将仅更改与SSH登录相关的文件。 这不会干扰我们的本地登录或通过DigitalOcean Web控制台登录。

打开SSH PAM配置文件:

sudo nano /etc/pam.d/sshd

朝向文件的顶部,有为了导入一个指令common-auth文件。 此文件允许常规密码身份验证,而不使用OTPW系统,我们不希望我们的SSH会话。 让我们来评论:

#@include common-auth

在下面,我们添加一些行,将允许我们使用OTPW系统来处理密码请求:

auth    required    pam_otpw.so
session optional    pam_otpw.so

完成后,保存并关闭文件。

配置SSHD

现在我们已将SSH守护程序的PAM模块配置为使用OTPW,我们可以使用适当的值配置守护程序本身。

使用root权限打开文件以签出文件:

sudo nano /etc/ssh/sshd_config

我们正在寻找几个单独的值。 我们需要检查每个参数是否设置为以下值。 如果您找不到任何参数,请添加和设置它们。 但确保不要多次添加参数,因为它们可能导致守护程序失败。

UsePrivilegeSeparation yes
PubkeyAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes

设置这些参数后,要重新启动我们的SSH守护进程,以便我们的更改可以生效:

sudo service ssh restart

创建OTPW密码文件

现在我们的系统配置为对没有公钥的SSH用户使用OTPW,我们可以创建这个系统工作所需的两个密码文件。

一个文件,该文件将被存储在~/.otpw ,将包含密码段,每行一个散列值。 我们将要创建的第二个文件是人类可读的一次性密码段,我们应该将其复制到安全设备,将其打印出来,或者将其放入安全可靠的位置。

所有我们需要做的生成这个列表是拨打otpw-gen命令。 这通常会将人类可读的文本输出到标准输出,但我们可以将其转换为一个文件以进行安全保存:

cd ~
otpw-gen > nothingtosee.txt

这将生成一个随机种子并要求一个密码前缀。 您应该使用与常规密码相同的常识规则。 确保您会记住密码。

之后,你将有一个~/.otpw包含密码的Stapling,每行一个散列值文件:

OTPW1
280 3 12 8
253tFMngG2PNYhn
132Kua%SZ+esb6t
237yH7D2FMbQsyW
125rrXfBRwnF+A%
106gJxhJE4jkknj
04135:5:knWIB4:
232/d4kI:n57IcD
244RASe8ka63b8Z
057GmqfFe=pXQqu
. . .

你也有你的管道未散列Stapling与他们的参考号成一个文件~/nothingtosee.txt

OTPW list generated 2014-04-03 18:06 on sshd

000 /rGF h5Hq  056 /zi5 %yTJ  112 J7BT HdM=  168 fdBm X%Tn  224 69bi =9mE
001 GoOG jxYQ  057 E=o3 kuEF  113 zwit p27J  169 nHK9 CXRx  225 IihF =o8g
002 Xm=E PuXc  058 Ok27 ZJ++  114 On=5 pNYH  170 ZRDa mB5e  226 yYsb CAfn
003 deL+ iHs7  059 /WGS :J4M  115 ZZd/ 8zyU  171 acDd dESV  227 ddjg ipcR
004 KhDn NdfS  060 =tEz ACye  116 FkQ9 8kSu  172 iRSR nZWT  228 9hHd veZ9
005 rGFG K5=7  061 MvUW LRxc  117 2YwY axJJ  173 kEV5 T/Vz  229 wx%n Le6P
006 GWi2 fHjf  062 qOR: WN2x  118 FvD4 oNjT  174 99OT 8KPy  230 /I=Y hicP
007 XPom pEYp  063 8Xvm vZGa  119 UNjF :Kys  175 b95i SU3R  231 keLn aDcK
008 fJI% 3Qs2  064 3I7Q I2xc  120 5Tm9 REQK  176 AVg: 4ijE  232 :aIF op6V
009 P/Sn dSxA  065 A+J6 =4zo  121 LAyj 3m2+  177 TMuN 9rJZ  233 SWvB %+cL
. . .    

左边的列是参考号,后面是8个字符的Stapling。 Stapling中第一个和最后四个字符之间的空格用于可读性,并且可以选择性地在输入Stapling时删除。

默认情况下,生成器会生成足够的Stapling,以适合标准的纸张,这对于打印和输出输出来说是非常好的。

您将必须为您要配置一次性密码访问的每个用户完成此过程。

试试看

从一个不与你的SSH密钥配置一台电脑(你也可以暂时将您的关键出你的~/.ssh目录),你可以测试新的一次性密码系统。

以通常的方式登录到您使用OTPW配置的用户:

ssh demouser@server1.com
Password 253: 

正如你所看到的,我们得到了OTPW想要的Stapling。

首先,输入您的前缀密码,然后直接使用同一行上的Stapling,前缀密码和Stapling之间没有空格。 如果您愿意,可以保留Stapling文件中显示的空格。

所以,让我们说我的前缀密码是“crazyburr!to”,Stapling文件有一个列,如下所示:

249 N4HY RsbH
250 +vAz fawn
251 O4/R ZrhM
252 c6kP jgUT
253 I=aA OKSz
254 aYzA :F64
255 3ezp ZpIq
256 ggIi TD2v

在这种情况下,我们可以输入“crazyburr!toI = aA OKSz”或“crazyburr!toI = aAOKSz”。

你应该能够没有问题地登录。 如果你检查你的~/.otpw文件,你会看到已被替换破折号散列线中的一个:

. . .
091icM5kSPVOdcU
274Uf3q/=kTYcu8
229fHfmIsCj7mjQ
---------------
115EzDO6=jM/sOT
143iWCdteSk3kg7
265S+QTGcg+MAZO
174UgXchxsI2g:G
. . .

这意味着Stapling已被使用,并且不再有效。

如果两个人试图登录到帐户的同时,OTPW反而会要求你的前缀的密码,接着是三个Stapling。 三个请求的Stapling中的每一个将是不同的,因此,那些谁是键盘记录,并试图击败你击中回车键将无法成功完成。

提示符如下所示:

Password 161/208/252:

一个~/.otpw.lock文件在这种情况下创建的。 在成功登录后,它被删除,但导致此不会在某些情况下,工作中的错误。 在这种情况下,只需手动删除锁:

rm ~/.otpw.lock

下一次,将再次提示您只输入一个密码。

警告和错误

我上面提到了,在成功登录后,锁文件有时没有被自动删除。 这在用户在完成提示之前通过键入CTRL-C来中止连接时尤其常见。

另一个相对重要的错误是报告剩余的有效OTPW条目的数量。 这通常由PAM配置中的会话行处理,但目前无法正常工作。

要解决这个问题,沃尔夫冈Kroener写道,实现了这个功能很简单的bash脚本这个Debian的邮件列表的线程 我们可以以各种方式来实现这一点,但最简单的是只把它添加到我们的末端~/.bashrc为用户implmenting OTPW:

nano ~/.bashrc

朝向底部,粘贴:

if [ "$SSH_TTY" -a -f $HOME/.otpw ]; then
  PW_LINES=$(wc -l <$HOME/.otpw)
  PW_USED=$(grep -- ---- $HOME/.otpw | wc -l)
  echo "OTPW $PW_USED/`echo $PW_LINES-2 | bc` used"
fi

您还可以将其添加到更集中的位置。 这样,它会输出取决于是否~/.otpw文件存在为每个用户。

现在,当您登录时,您将获得关于您当前剩余密码的统计信息:

OTPW 6/280 used

OTPW建议您在50%的可用密码下重新生成密码列表。 您可以通过重新运行generation命令来实现:

otpw-gen > anotherfile.txt

这将覆盖以前的密码Stapling,因此在此过程后它们将无法使用。

结论

设置OTPW可以为您提供一个从不安全位置登录服务器的选项。 虽然它确实遭受了常规密码登录的一些缺点,但它提供了基于密钥的登录(不应该转移到不安全的计算机)和常规密码登录(具有许多缺陷和漏洞)之间的中间环节。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏