配置SSH使用自由半径和WiKID进行双因素身份验证

配置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进行测试,但是,安装程序应适用于ApacheWebDAVOpenVPN以及支持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结合使用,强大的身份验证创建了强大,灵活和安全的解决方案。

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

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

支付宝扫一扫打赏

微信扫一扫打赏