介绍
随着组织的发展,管理大量的SSH密钥和服务器可能非常困难。 在整个组织中正确识别有效密钥和删除无效密钥可能会遇到错误,并对服务器安全造成严重后果。
此外,当有服务器更改时,有时您的用户将收到关于无法确定您的服务器的真实性的警告。 大多数用户在连接前不会重复检查服务器的密钥指纹,允许某人潜在地欺骗服务器并执行中间人攻击。
所谓monkeysphere的项目是为了解决这些问题。 它通过利用GPG密钥和信任模型网络来验证服务器的凭据,并提供简单的用户管理。
在前面的指南中,我们讨论了如何设置monkeysphere验证服务器的用户 。 我们将继续在本指南中我们停下来,在那里我们将学习如何自动地验证用户到我们的服务器,仅基于他们的GPG密钥和我们的服务器管理员对这些用户的信任。 这将允许我们创建使用纯英语而不是大多数加密信息的身份验证文件。
本指南假设您已完成上一个指南(server.example.com,admin.example.com,client.example.com,并建立了必要的信任关系)中的设置。 让我们开始吧。
在SSH服务器上创建身份验证者
允许我们的SSH服务器自动向我们的用户验证服务器的第一步是建立一个身份验证者。 身份验证者只是我们在建立用户身份时被指定为受信任的人。
在大多数情况下,简单而合乎逻辑的选择是让服务器管理员识别应该能够登录的用户。我们要走这条路线。 如果您的情况需要分配该责任,您还可以创建多个身份验证者。
让我们从获取我们的管理用户的指纹开始。 在我们管理员的计算机上,我们可以使用我们在上一个指南中使用的相同的GPG命令来获得完整的指纹:
gpg --with-colons --fingerprint admin@fakedomain.com
再次,我们正在寻找的输出行看起来像:
fpr:::::::::A61256B85307B7ED9AD8D93E9E06881E49E95F19:
红色突出显示的部分是我们在这里需要的。
在SSH服务器(server.example.com)上,我们将添加此密钥作为身份验证者。 您可以输入以下命令:
monkeysphere-authentication add-identity-certifier A61256B85307B7ED9AD8D93E9E06881E49E95F19
然后Monkeysphere将从密钥服务器中提取匹配的GPG信息,并将其存储在其自己的密钥环中。 它会将此密钥标记为可以验证其他用户的身份的密钥。
为SSH用户生成验证子密钥
现在我们已经确定我们的服务器管理员可以识别哪些用户是合法的,我们需要在客户端做一些工作。
每个客户端必须生成将用于实际身份验证的GPG子项。 虽然公共GPG密钥用于标识用户,但子密钥用于实际登录过程。
该monkeysphere
命令包含子命令,让您可以轻松地生成身份验证的子项。 在您的客户端上,键入:
monkeysphere gen-subkey
将生成子密钥并将其添加到您的主密钥下的本地GPG密钥环。
我们需要将密钥更改再次上传到密钥服务器,以便我们的SSH服务器可以使用此子密钥为相关用户生成内部身份验证文件。 我们需要发布的关键是我们的主键,其中包含子项更改。 要获取密钥信息,请键入:
gpg --list-keys client@fakedomain.com
pub 2048R/87791BD0 2014-03-14 uid client <client@fakedomain.com> sub 2048R/3294D31D 2014-03-14 sub 2048R/0FECF512 2014-03-14
突出显示的部分是我们将用于发送到服务器的密钥ID。 使用此ID将密钥发送回服务器:
gpg --keyserver pool.sks-keyservers.net --send-key 87791BD0
现在我们的子项在密钥服务器上可用(可能需要一些时间传播),我们可以配置我们的SSH服务器使用此密钥生成认证文件。
在SSH服务器上创建认证文件
现在我们需要创建实际的身份验证文件。 Monkeysphere认证文件有两个不同的类别。
用户级文件是我们应该与之交互以建立认证策略的文件。 这些都是简单的,直接的,即只要谁应该被允许登录的姓名和电子邮件(如致力于GPG)指定的人简单的英语文件,这些文件都位于在每个用户的主目录的子目录中,就像普通的SSH authorized_keys
文件。
这些文件然后由Monkeysphere用于生成认证文件,SSH可以使用与上面创建的每个有效用户相关联的子项来理解。 Monkeysphere生成认证文件中的每个用户/var/lib/monkeysphere/authorized_keys
目录。
我们将在本节中的SSH服务器上创建目录和文件。
首先转到您要配置访问的任何用户的主目录。 由于我们需要使用管理权限登录到这里,让我们为root用户设置访问权限。 在主目录下,创建一个名为一个隐藏目录.monkeysphere
:
cd /root
mkdir .monkeysphere
Monkeysphere需要对用户级文件夹和文件具有某些权限,才能将其视为有效。 具体来说,它要求没有超出文件或目录所有者的写权限。
让我们设置目录权限以匹配此方案,然后让我们移动到目录:
chmod 755 .monkeysphere
cd .monkeysphere
在该目录中,我们需要创建一个名为authorized_user_ids
。 这是用户级身份验证文件。 使用文本编辑器创建它:
nano authorized_user_ids
在此文件中,我们只需按名称和电子邮件列出用户,就像他们在GPG中一样。 为了看到我们需要使用的格式化,我们可以在我们的客户端机器上再次输入:
gpg --list-keys client@fakedomain.com
pub 2048R/87791BD0 2014-03-14 uid client <client@fakedomain.com> sub 2048R/3294D31D 2014-03-14 sub 2048R/0FECF512 2014-03-14
所以这是我们必须在此文件中键入:
client <client@fakedomain.com>
如果我们要添加其他人,我们只需要添加一行:
client <client@fakedomain.com>
admin <admin@fakedomain.com>
这是更容易阅读和比大管理authorized_keys
文件。 这些文件往往过时,很难判断一个较旧的密钥是否仍然有效。 使用这种方法,很容易问自己“应该Bob能访问这台机器吗? 如果没有,只需删除他的名字。
保存并在完成后关闭文件。
现在,我们需要记住取消所有者以外的任何人的写入权限:
chmod 644 authorized_user_ids
对您要配置远程访问的任何用户重复此过程。
生成内部验证文件
现在我们已经有了我们的用户级认证文件,我们可以轻松地生成我们的内部认证文件。
所有我们要做的是发出此命令:
monkeysphere-authentication update-users
在对用户级身份验证文件进行任何更改后,应运行此命令。
如果您只想更新特定用户,可以将其名称添加为参数:
monkeysphere-authentication update-users root
让我们看看这个过程生成了什么文件。 我们需要转到存储这些文件的目录:
cd /var/lib/monkeysphere/authorized_keys
在内部,您应该看到为您配置访问的系统上的每个用户的文件。 对此的一个小警告是,用户级认证文件中的每个用户需要具有在公共GPG密钥服务器网络上可用的相关联的子密钥。
ls
demouser root
如果我们查看文件,我们将看到一个如下的键:
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQD0CdVIlUptYdZBz/0pn+7XIa2jdzy/VnayAZDXhFdHDTZU0hB8MDGHC9yjUrn9RCMj2NWD3Ls7JjqVAzmRsUn56UwyCJt8/GVmHpeIhYzmUAUjMaaMnjBG3Nhdpm9rsnJt0XVUvOu9oxrvTWYH6ZCVNwsY1O7aX/kQWnaXQW6/B6oiQJ76feZyoLEBR8D/nbxGTtNlkEMcTMTylHN0jHLACJy483SFUkSjHneNK9gNFoxTlUyF/ZBo5+Bo8Uld4iAyhaW7Di4HzfUJzvebZYX1Z1O0yS/db8anSJoZX90MLt7eIFsixuDMS3m31dsX26RI71tJGihvzF0fUsUPDg17
MonkeySphere2014-03-22T13:14:31 client <client@fakedomain.com>
正如你所看到的,这基本上是一个正常的authorized_keys
条目。 我们已经为更方便用户管理和通过GPG动态更新其密钥的能力,为用户虽然抽象送人。
你也可以看到在这个文件中,都没有关系你在所做的任何条目的其它线路authorized_user_ids
文件。 这是因为,在默认情况下,monkeysphere追加发现现有的任何条目authorized_keys
文件到生成文件的末尾。 这是为了帮助您在两个系统之间转换,并为无论什么原因无法切换的用户。
现在,我们已经产生这些新的授权文件,我们需要更新SSH服务的配置看这些文件,而不是每个用户的目录中的文件。
与你的编辑器打开配置文件(请确保您选择sshd_config
,不ssh_config
):
nano /etc/ssh/sshd_config
在这个文件中,找到并修改AuthorizedKeysFile
参数,或者创建它,如果它不存在。 将值设置为:
AuthorizedKeysFile /var/lib/monkeysphere/authorized_keys/%u
保存并在完成后关闭文件。
现在,我们只需要重新启动SSH守护程序即可进行更改:
service ssh restart
配置客户端发送GPG密钥进行认证
现在,我们的服务器已完全配置为接受我们为身份验证创建的GPG子项。
我们需要配置我们的客户端使用此信息而不是通常的密码或RSA密钥进行连接。 Monkeysphere做到这一点通过使用的ssh-agent
工具,它用于存储SSH连接认证细节的一段时间。
我们可以尝试它,而无需启动代理本身使用一次性命令,像这样:
ssh-agent sh -c 'monkeysphere subkey-to-ssh-agent && ssh server.example.com'
这将工作,你已经进入你的GPG密钥的密码后,您应该能够连接到服务器,而无需输入服务器的帐户的任何密码。
但是,启动代理会话可能是值得的。 你可以在当前shell中通过键入:
eval $(ssh-agent)
要自动启动此我们每次登录的时候,我们可以把它添加到客户端的~/.bash_profile
的文件:
echo 'eval $(ssh-agent)' >> ~/.bash_profile
无论哪种方式,我们需要将我们的GPG子项添加到SSH代理,以便它可以使用它进行身份验证。 通过键入以下内容执行此操作:
monkeysphere subkey-to-ssh-agent
您必须输入GPG密钥密码,但每次会话只需要输入一次。
我们可以看到它已被接受:
ssh-add -l
2048 2a:1a:1d:52:32:e5:f4:45:b2:a3:ff:d0:c0:6e:69:f6 client <client@fakedomain.com> (RSA)
我们现在可以登录,而无需提示任何帐户,我们有权访问使用我们的GPG子项:
ssh server.example.com
结论
之后越来越Monkeysphere设置您的基础架构,你就会有管理服务器和人类的互动为您的组织的可持续发展。 这种方法可以处理服务器管理员加入和退出该组织,因为所有用户级的认证是用简单的英语。 此外,您不必担心攻击者试图欺骗您访问您的服务器。