配置SSH以使用Freeradius和WiKID进行双因素身份验证
半径是一个很好的标准。 它具有足够的强大功能,能够很好地完成并简单易用。 Freeradius是一款优秀的开源半径服务器,随附许多Linux版本。 它有很好的记录和良好的支持。 WiKID强认证服务器是商业/开源双因素身份验证系统,使用公共密钥加密将密码和一次性密码安全地传送到在黑莓,手机,棕榈,PocketPC上运行的软件令牌,或使用J2SE客户端, Linux,Mac和Windows PC。 您可以将WiKID作为证书,但没有白名单/黑名单和更安全的麻烦,因为PIN在服务器上验证,防止脱机暴力攻击。
需要满足要求的公司(如PCI-DSS或HIPAA)可能需要通过双因素身份验证和严格控制的访问来保护其网络。 结合Freeradius和WiKID是一种高性价比的方式来实现。
在这个例子中,我正在Fedora Core 7上安装Freeradius,并在Centos5上运行3.0K的WiKID rpms(但是,相同的说明将适用于2.0版本的WiKID)。我们将使用SSH进行测试,但是,安装程序应适用于Apache , WebDAV , OpenVPN以及支持PAM的任何其他应用程序。
安装和配置Freeradius
无论您正在运行什么Linux变种,Freeradius可能都有一个包。 对于Fedora,通过Yum进行安装很简单:
yum install freeradius
配置Freeradius是相当简单的。 但是有很多选择。 关键是只改变你理解的最小的项目。 默认设置工作,因此进行小的更改并进行测试。 我们将修改三个文件。 /etc/raddb/clients.conf文件告诉Freeradius哪些客户端接受。 proxy.conf文件告诉Freeradius将认证数据包发送到WiKID服务器,radiusd.conf文件配置主Freeradius服务器。
首先,编辑/etc/raddb/clients.conf文件:
vi /etc/raddb/clients.conf
client 127.0.0.1 { secret = shared_secret shortname = localhost nastype = other }
所有你现在需要改变的是共享的秘密,因为我们将通过SSH登录到Freeradius服务器作为我们的测试。
接下来,验证可以在radiusd.conf文件中代理请求。 Fedora就是这样:
vi /etc/raddb/radiusd.conf
proxy_requests = yes $INCLUDE ${confdir}/proxy.conf
最后,在proxy.conf中添加WiKID Strong Authentication服务器作为有效的代理:
vi /etc/raddb/proxy.conf
# This realm is for requests which don't have an explicit realm # prefix or suffix. User names like "bob" will match this one. # realm NULL { type = radius authhost = WIKIDSERVER_IP:1812 # accthost = WIKIDSERVER_IP:1813 secret = shared_secret }
不用说,将WIKIDSERVER_IP和shared_secret更改为您的WiKID服务器IP和共享密钥。 它可能应该与客户端使用的共享密钥不同。
为了额外的安全性,您应该锁定这些苍蝇的所有权:
chmod a-rwx,u+r /etc/raddb/proxy.conf
chmod a-rwx,u+r /etc/raddb/clients.conf
现在开始Freeradius:
service radiusd start
配置PAM SSH
首先,您需要安装PAM Radius。 在PAM Radius主页上有很好的文档。 根据您的分布情况,您也可以找到合适的二进制文件。 在Fedora 7上编译这个没有麻烦:
# ./configure
# make
# make install
编辑/etc/pam.d/sshd
以允许Radius身份验证:
vi /etc/pam.d/sshd
转到文件的第二行,点击Insert键或i键并插入以下行:
auth sufficient /lib/security/pam_radius_auth.so
就在这一行之上:
auth required pam_stack.so service=system-auth
“足够”标签表示如果Radius认证成功,则不需要额外的身份验证。 但是,如果Radius身份验证失败,系统中的用户名和密码将起作用。 使用“必需”要求强身份验证。 因为我们只是编辑sshd文件,它不会影响终端登录。 PAM可以在不同的linux变体上有很大的不同。 请参阅操作系统的具体文档。
编辑或创建您的/ etc / raddb / server
文件:
vi /etc/raddb/server
下方:
127.0.0.1 secret 1
添加这一行:
localhost shared_secret 1
最后,我确保在/ etc / sshd / sshd_config中关闭了PublicKey身份验证:
PubkeyAuthentication no
配置WiKID服务器
现在,我们将配置WiKID服务器来处理Freeradius的一次性密码。 我们假设您还需要设置一个新的WiKID域。 如果你已经有了,你可以跳过这个部分。 此处提供了其他WiKID安装文档。
登录WiKID服务器,然后单击“域”选项卡。
单击创建新域。
输入要求的信息。 域服务器代码是WiKID服务器的零填充IP地址。 因此,如果外部IP地址为216.239.51.99,则WiKID服务器代码将为216239051099.单击“创建”。 (显然,如果您已经有域设置,可以跳过此步骤。)
单击网络客户端选项卡和“创建新的网络客户端”。
输入要求的信息。 对于IP地址,请使用Freeradius服务器的IP地址。 选择Radius和刚创建的域。 完成后点击“添加”。
在下一页,输入您在Freeradius服务器的/etc/raddb/proxy.conf文件中输入的共享密钥。 不必在“返回属性”下输入任何信息。
重要:从WiKID终端或通过SSH,您将需要运行“wikidctl stop”,然后“wikidcl start”将新配置加载到WiKID Radius服务器中。 (WiKID 2.0用户只是运行“停止”和“开始”。)
用一次性密码测试Freeradius
下载并安装WiKID令牌客户端 。 您可以从WiKIDAdmin Web界面手动验证您的用户身份。 一旦验证,选择与Freeradius资源关联的域:
输入PIN码
你会收到一次性密码。 OTP有时间限制,但可以在WiKID服务器上设置任何时间:
现在,ssh到你的Freeradius框:
ssh user@freeradius_server
出现提示时,输入WiKID一次性密码 - 它应该已经自动粘贴到剪贴板,因此ctrl-c或shift-ins应该工作。 您应该被授予访问权。 如果没有,请咨询一些日志。 首先,在Freeradius服务器上检查/ var / log / secure,看看用户被拒绝的原因。 如果您看到“所有RADIUS服务器响应失败”。 请确保radiusd在端口1812上运行。检查Freeradius的日志在/var/log/radius/radius.log和WiKID服务器上的/opt/WiKID/log/radius.log上的WiKID半径日志。
备用配置:Freeradius作为备份
使用PAM Radius的好处之一是可以将服务器链接到/ etc / raddb / server文件中。 如果顶级服务器无法响应,则下一个服务器将尝试对用户进行身份验证。 要澄清:如果第一台服务器以身份验证失败作出响应,则该用户被拒绝。 只有当没有响应时才会检查第二个半径服务器。 如果您的WiKID服务器位于远程数据中心,则此备份功能非常方便。 通过配置PAM直接与WiKID通话并返回到Freeradius,您可以在硬件故障的情况下创建故障转移解决方案。
首先,将/ etc / raddb / server文件改为指向WiKID服务器,然后在本地主机上运行的Freeradius服务器第二个:
# server[:port] shared_secret timeout (s) 127.0.0.1:1812 shared_secret 1 WIKIDSERVER_IP:1812 shared_secret 3 localhost:1812 shared_secret 2
我不得不做一些微小的改动,让Freeradius与/ etc / passwd一起工作。 首先,我不得不将radiusd的组/etc/raddb/radiusd.conf更改为shadow:
user = radiusd group = shadow
然后我不得不给/ etc / passwd的镜像权限:
chgrp shadow /etc/shadow
chmod g+r /etc/shadow
现在,如果由于某些原因WiKID服务器出现故障,您将自动退回到/ etc / passwd文件。
结论
Radius是远程用户认证的极好标准。 将Freeradius与WiKID结合使用,强大的身份验证创建了强大,灵活和安全的解决方案。