在您的serverfarm中轻松管理privacyIDEA来管理双因素身份验证
在本文中我将介绍如何使用privacyIDEA安装为您的服务器群中的许多服务器添加双因素身份验证。
privacyIDEA是用于双因素身份验证的模块化解决方案, 特别是使用OTP令牌。 由于模块化结构,它可以快速,轻松地适应和增强。 添加新的令牌类型就像编写一个新的精简python模块一样简单。 您不需要修改您的网络为privacyIDEA,它不会写入现有的数据库或用户存储。 它只需要对用户存储(如LDAP,Active Directory,SQL,SCIM服务或平面文件)进行读取访问。 privacyIDEA支持所有常用的按钮标记,OTP卡和智能手机应用程序。
情景
由nicolettec,pixabay.com
假设您是ISP或ASP,或者做一些SaaS或其他任何这些髋关节的TLA或ETLAs 。 无论如何 - 你正在运行一堆服务器,当对这几十台服务器进行身份验证时,您需要照顾员工或分裂人格。
您可以设置LDAP或Kerberos,并使用一个中央密码在所有这些机器上进行身份验证。 但是你知道密码很弱。 所以你愿意为强身份验证添加第二个因素。
有几个关于如何使用PAM设置Google身份验证器以验证您的Linux框的方法。 这是一个伟大的方式,但它只有一个! 框!
你不想把种子放在你所有的100多台机器上。
除了在几台机器上使用相同的令牌/种子的HOTP或TOTP之外,还会引起安全问题。 在machine1上用于验证的TOTP值不能再在machine1上使用。 好! 但是在(通常)30秒的指定时间窗口内可以在machine2上使用相同的TOTP值。
底线:可管理性和安全性可以而且应该改进!
先决条件
我假设你已经安装了privacyIDEA,也许根据这个howto 。 本文介绍了CentOS 6.5系统上的安装,但是对于任何其他分发,它都可以工作。 当你这样做的时候,你有一个运行的privacyIDEA安装与FreeRADIUS服务器在上面。
用户和令牌
我在开始时保持简单,只会为用户根创建一个令牌。
登录您的privacyIDEA服务器并创建一个useridresolver,它指向本地的/ etc / passwd和相应的领域。
创建与本地密码的连接
打开privacyIDEA Config - > useridresolvers并创建一个新的Flatfile解析器。
单击新建按钮创建一个新的解析器。
那么你可以选择解析器的类型。 单击Flatfile按钮创建连接到本地/ etc / passwd或类似文件的解析器。
保留文件名,并为解析器输入一个唯一的名称,如“localuser”。
当您保存解析器时,您将在可用解析器列表中看到新创建的解析器。
在每个对话窗口中,您都会看到一个绿色的问号。 单击问号将带您进入在线文档 。
创建一个领域
到目前为止,您将无法看到任何用户。 您需要将解析器添加到一个领域。 关闭解析器对话框时,会出现以下通知:
单击确定将带您进入领域对话框。
点击新建按钮创建一个新的领域。
给新的领域一个独特的名称,如“realm1”,并选择刚刚创建的解析器。 当蓝色突出显示时,选择解析器。 单击保存 。
现在你将看到新的领域出现在领域列表中。 领域“realm1”是默认领域,“realm1”包含解析器“localuser”。
您可以关闭此对话框。
注册Google Authenticator
请注意:如果您不想使用Google身份验证器,您可以使用FreeOTP应用程序,这是RedHat的替代方案。
在选项卡用户视图中,您可以从/ etc / passwd中查看用户。
这些是您的privacyIDEA服务器上的/ etc / passwd中的用户。 100多台机器上的用户可能是其他机器。 但是,在本示例中,我们将仅使用用户“root”,其他机器上也存在该用户名。
您可以过滤用户名“root”...
选择用户“root”,单击它,然后单击左侧的按钮注册一个令牌给该选定的用户。
注册对话框将打开:
选择令牌类型HMAC事件 ,并选中生成HMAC密钥 。 这将使服务器创建秘密的OTP密钥。
单击注册 。
将显示一个新对话框,其中包含新登记的令牌的序列号 OATH00010F91 。 令牌立即被分配给用户“root”。
现在,您需要使用Google Authenticator应用扫描QR码。
如果在不扫描QR码的情况下关闭对话框,则无法再次检索QR码或otp键。 您将不得不删除令牌并注册新的令牌!
当您关闭此对话框时,系统会要求您提供OTP PIN码。 您将需要这个OTP引脚与生成的OTP值进行认证。
测试认证
privacyIDEA服务器附带了一个集成的身份验证测试页面。 去
https://your-server/auth/index
输入用户名“root”,并在密码字段中输入您设置的OTP PIN码以及您使用Google Authenticator生成的OTP值。
弹出窗口应该说你生成成功。
审计
您可以在审核选项卡上查看许多审核信息。 您应该看到一个操作“/ validate / check”,表示“success = 1”,并列出用户名“root”和令牌的序列号。
如果某些用户无法验证,则可以使用此审核日志。 action_detail和info将提供其他提示。
连接100多台机器
配置FreeRADIUS
我们已经在以前的howto中配置了FreeRADIUS。 但显然,我们需要为您的许多服务器做一些事情。
在privacyIDEA服务器上,我们需要调整文件/etc/raddb/clients.conf 。 您可以为所有服务器的子网或每个客户端添加客户端定义或之间的某个内容:
client my-dumb-subnet {
ipaddr = 172.20.3.0
netmask = 24
secret = you_guess_this
}
client my-special-client {
ipaddr = 172.20.4.123
netmask = 32
secret = Zilaika5hoosae1ujio9Oze4
}
更改clients.conf后,您需要重新启动FreeRADIUS服务器。
100多台服务器上的RADIUS客户端配置
您的服务器(以RADIUS方式为RADIUS客户端)需要安装PAM RADIUS模块。 根据您的分发,这可以是pam_radius或libpam-radius-auth 。
yum install pam_radius要么
apt-get install libpam-radius-auth
该配置位于文件/etc/pam_radius.conf或/etc/pam_radius_auth.conf中 。 文件中还有一些文档,但基本上您将需要设置如下:
your-privacyidea-server you_guess_this 2
第一列是您的privacyIDEA服务器,第二列是RADIUS共享密钥,第三列是超时。
如果您遇到RADIUS认证问题,您应该停止FreeRADIUS服务器并运行
radiusd -X要么
freeradiusd -X
这将在stdout给你很多调试输出。
PAM配置
现在您需要告诉PAM应该使用RADIUS PAM模块。
使用PAM的每个服务都有自己的配置文件位于目录/etc/pam.d中 。 所以我们正在寻找/etc/pam.d/sshd 。
PAM配置知道四个设施:auth,account,password,session。 我们只需要auth设施,它负责进行身份验证。
在文件/etc/pam.d/sshd中,您会发现一行
auth include password-auth
这通常由RedHat和CentOS系统使用
@include common-auth
这通常由Debian和Ubuntu系统使用。
在这两种情况下,都会包含一个在验证工具中定义行为的附加文件。 我们将创建自己的包含文件并进行调整。
警告:伪装与PAM可能导致无法登录到您的系统了。 所以请小心,一定要有另一种方式来访问你的系统!
RedHat和CentOS
更改/etc/pam.d/sshd中的行,如下所示:
auth include otp-auth
现在复制你的文件:
cp /etc/pam.d/password-auth /etc/pam.d/otp-auth
现在你可以这样适应:
auth required pam_env.so auth sufficient pam_radius_auth.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 500 quiet auth required pam_deny.so
现在您可以输入OTP PIN + OTP值,并且模块pam_radius.so将尝试针对privacyIDEA服务器进行身份验证。 如果失败,PAM将转到下一个条目,并使用密码在本地进行身份验证。
如果您使用OTP成功验证,您可以删除包含pam_unix.so的第三行。
Debian和Ubuntu
更改/etc/pam.d/sshd中的行,如下所示:
@include otp-auth
现在复制文件:
cp /etc/pam.d/common-auth /etc/pam.d/otp-auth
现在您需要调整文件/etc/pam.d/otp-auth :
auth [success=3 default=ignore] pam_radius_auth.so auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass # here's the fallback if no module succeeds auth requisite pam_deny.so # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around auth required pam_permit.so # and here are more per-package modules (the "Additional" block) auth optional pam_ecryptfs.so unwrap auth optional pam_cap.so
格式有所不同。 如果pam_radius_auth成功,则成功= 3意味着跳过接下来的三个语句(pam_permit的权限)。
在此配置中,您可以使用OTP或旧的本地密码进行身份验证。 如果一切正常,您可以删除pam_unix行。 但是请注意 ,你也必须适应成功= 2 !
客户审核
privcayIDEA可以将请求的客户端写入审计跟踪。 但对于privacyIDEA来说,认证请求总是来自RADIUS服务器 - 在这种情况下为127.0.0.1。
如果我们知道您的100多台服务器中的哪个“root”尝试进行身份验证,那不是很好吗?
RADIUS模块可以将RADIUS客户端IP传递给privacyIDEA,从而记录正确的IP。
转到privacyIDEA配置 - >系统配置 ,并将“127.0.0.1”添加到覆盖认证客户端 。 这意味着localhost被允许告诉privacyIDEA另一个客户端本身发出请求。
现在,您将在审核日志中的列客户端中看到正确的IP地址。
结论
我们创建了一个设置,您有一个中央实例(privacycIDEA系统)来控制所有连接的服务器的身份验证。 因此,您可以轻松地锁定用户的身份验证设备或注册其他身份验证设备。
例如,如果要给予几个人类root访问权限,则可以为用户root注册几个令牌。 privacyIDEA中的审核日志将告诉您使用哪个令牌作为root用户登录。 因此,您可以跟踪这些许多root用户中的哪些破坏了您的数据库;-)
在现实世界中,您可能希望从LDAP目录中使用您的用户。
注意:您仍然可以使用SSH与ssh密钥。
问题? 答案!
如果您遇到任何问题,请给我留言或您也可以向Google群组询问。
我打算写另一个howto这将告诉你如何限制登录到某些机器使用硬件令牌。 因此,您可以使用具有敏感数据或更高安全级别的特殊机器,无法使用Google Authenticator访问,而是使用像Yubikey这样的硬件令牌。
敬请关注!