learn-tech/专栏/全解网络协议/28你怎么证明你就是你-身份验证和访问控制.md
2024-10-16 06:37:41 +08:00

12 KiB
Raw Blame History

                        因收到Google相关通知网站将会择期关闭。相关通知内容
                        
                        
                        28 你怎么证明你就是你 - 身份验证和访问控制
                        AAA

我们先从AAA开始你一定很迷惑什么是AAA英文就是authentication, authorization, and accounting- 身份验证,授权和审计。我们先来看一下身份验证部分。

身份验证就是你的用户名和密码。你输入用户名和密码以后,以此来获得进入的权限。没有此处的第二个组件,用户名和密码显得有一点毫无意义那就是 - 授权 授权就是你的特权和访问权限。换句话说,也就是在你登入的系统中,你可以访问哪些软件,你可以访问哪些文件共享,你可以访问哪些计算机和服务器?因此,你的用户名和密码与授权信息是相关联的,从而告诉你可以访问的内容。 从审计的角度来看,这里的最后一个组件很重要,你试想一下,如果出现问题,我们需要对问题进行故障排除,比如员工有没有按照预期的方式行事,我们会去将审查谁在何时何地做了什么;这就是这里的审计部分。

所以我们有了身份验证那就是我们的用户名和密码授权该用户有权访问什么最后是审计该用户做了什么他们什么时候做的因此AAA身份验证就是这样。它是用户名访问权限以及它们所做的记录。有两个组织支持在现代网络中使用的AAA服务器。思科是其中之一。它称为Terminal Access Controller Accesses-Control System Plus- “终端访问控制器访问控制系统Plus”或简称为TACACS。

身份验证

我们在这里来对身份验证进行一下深度研究。有本地身份验证可以在其中对工作站本身进行身份验证。在家用设备中如果你在家中有一台计算机或笔记本电脑你最有可能通过无线网络将其连接到Internet但是你可能没有要连接到服务器。此处的本地身份验证只是用户名和密码使你可以直接在本地计算机上访问资源。一般会被分为两类-管理员和普通用户。与管理员相比,通常普通用户只是具有查看的权限,而管理员具有在工作站上配置的权限,尤其是对配置文件(这个很好理解,不需要解释呀)。

本地的身份验证只适用于用于本地工作站本身比如你电脑的登录输入的用户名和密码只是针对你的笔记本。域名Domain身份验证意味着我们将登录一台要加入某种Domain的计算机。通常是使用Active Directory这意味着我们将用户名和密码发送到domain控制器。然后域控制器会将我们的设备添加到该domain中。当我们将设备连接到域控制器时我们将使用称为Kerberos的协议来做该Kerberos协议是开源的由MIT及其包括IETF的联盟开发。 Kerberos所做的是对通信进行某种加密以便当我们向服务器发送用户名和密码时对通信进行加密这就是这里的组成部分之一。另一个组件是确保发送用户名和密码的计算机是他自己而不是在该网上其他试图假冒该设备的其他设备。因为这里可以进行某些类型的中间人攻击即侦听设备和服务器的通信然后稍后将通信重播回服务器以欺骗服务器。Kerberos是服务器和客户端验证其身份的一种方式。除此之外它还会加密该通信以允许该用户名和密码成功到达服务器对其进行验证以查看是否允许该设备加入domain。

当你需要使用域身份验证时或者是你早上准备开始工作了打开你的电脑输入用户名和密码来登录。这将与域控制器进行核对以验证你是谁并允许你登录并访问设备上的应用程序。现在假设你在会计部门工作并且需要使用一些会计软件比如QuickBook并且这个软件的依赖位于我们数据中心中的服务器。这里的问题是在大型公司你每天都会使用很多不同的程序。你可能有一个内部网站和电邮。你可能会使用特定的专业软件例如刚才提到的Quickbook你可能还会使用某些绘图软件等等。可能需要使用许多很多软件大公司就是有钱全是买license。这些软件中的大多数都将具有某种身份验证系统要确保只有你才能使用该软件该软件会阻止那些很熟练的程序员或其他工种但是不是会计的人。这就是术业有专攻你不是会计不要动我的软件。因此我们一般会使用一种叫做LDAP的东西。现在LDAP已内置到Microsoft Server系统特别是Active Directory它允许我们执行的操作是允许我们将用户名和密码发送到我们的比如会计软件。然后这个软件服务器会说“嘿Active Directory”该用户是否有权使用这个软件如果是的话说明此用户已被授权然后该用户就可以登录到这个会计软件。

以上的例子其实很接近于所谓的单点登录现在单点登录很火呀。单点登录是一个很重要的概念因为这意味着我只需要知道一个用户名和密码。这就和你的个人生活有一点不同比如在我的个人生活中我需要我的Gmail帐户密码我的netflix的帐户密码我的Facebook帐户密码我的HBO账户我的银行账户等等。对于所有不同的系统我都需要所有不同的用户名和密码你可以一个密码走天下但是会不安全并且没有一种很好的方法将它们统一在一起。 Facebook和Google对其单点登录产品进行了一些尝试但是效果不是那么好。可是当我们在企业中使用时效果就不一样了。用户只需要知道一个用户名和密码就会感到非常满意。此外它还提供了无与伦比的安全性因为你不再被迫去创建许多密码并且还需要记住许多不同的用户名和密码的组合。

你想一下这里是不是有一个小问题那就是假设用户名和密码遭到泄露是不是意味着拥有该用户名和密码的任何人都可以将设备加入网络中的domain这样会不会危险。因此我们可以采取的预防措施之一是向网络上的设备颁发证书。在设备联机时可以通过将证书的一部分发送到域控制器来验证它是否属于这个domain我喜欢用英文单词在这里中文的翻译总感觉有一点点变扭。域控制器可能说是的此设备在我们的网络上有效是自己人放进来把。这比仅使用用户名和密码来使设备加入Active Directory域要好一些因为现在Active Directory域控制器必须专门为我们要加入domain的设备颁发证书。因此我们使用证书和一些凭据在此处登录。这将防止有人携带自己的设备并将其加入domain。这就好比什么呢比如说天地会的密码是”天王盖地虎宝塔镇河妖“是不是每一个知道这个口号的人都是自己人呢不一定吧。你只要偷听到了就会知道但是你有一个证书上面陪着你的照片这样是不是就不好蒙混过关了可能有同学会说这样还是有漏洞不要抬扛呀任何软件和方案都有安全问题只要你钻研都能攻克只是简单和难得区别。我们通常会为无线设备使用基于证书的身份验证。这也确实非常有效。

日志和审核

在AAA中最后一个就是审核日志是属于审核的一部分。我们需要记录所有的traffic这使我们可以在将来审核这部分。美国有一个法律那就是关于美国健康法的一部分是医疗记录系统的用户不得查看不在其直接护理下的任何患者的健康信息。比如你在医院工作发现蔡x坤是你的病人你有接触病历软件的权限你可能想了解阿坤怎么了。可能是出于好奇。可能希望将该信息出售给某家机构来引起轰动。所以如果让你来设计这个审核来防止这种情况发生你怎么做呢设计目的是使我们能够准确的记录谁在何时何地做了什么然后出现问题的时候可以审核然后说那个人这样做是对的吗

多因素身份验证

我前面应该有提到过这个我们现在来细谈一下多因素身份验证。现在是我们有史以来第一次能够真正实现多因素身份验证的年代。尽管仍然存在很多挑战但比以前要好很多很多。多因素身份验证这个想法是收集有关你的东西与你有关的东西。因此我们在这里需要做的一件事情是你知道的事情你拥有的一些东西你是谁你在哪你在做什么。让我们看一下其中的例子。所以你知道的事情在这里可以是你的用户名。自定义ID一般会是你的电邮地址因为用户名通常是你的用户名而电邮地址一般都是公开的。所以公司不希望你的用户名成为唯一的标准这就是为什么我们还需要添加密码。因此你拥有或者说知道用户名和密码这就是我们对用户名和密码的单因素身份验证。这是我们知道的东西。我们可以通过添加我们拥有的东西来增强它。我们使用了一些我们知道的东西例如用户名密码我们还可以添加一些我们有的东西比如钥匙卡钥匙扣某种类型的数字生成器甚至可以是我们的智能手机。因此我们在这里所要做的就是输入用户名和密码然后可能还要刷智能卡。在银行工作的同学可能会知道员工会得到一些小的安全身份证这是一个随机生成数字的小设备。因此每隔30秒左右会弹出一个新号码然后你将使用该号码以及用户名和密码来在系统中进行身份验证。因为生成的数字有些随机很难预测。我们也可以使用智能手机来做同样的事情。还记得我前面提到的一个AppAuthenticator。当我们要登录到系统时我们可以请求我们的代码登录。然后我们登录到系统中可以输入我们的用户名密码然后还有就是这个App里的一个数字。这里的想法是你的用户名和密码就是你所知道的。如果有人出于某种原因得到了这些密码也许你写下了你的用户名和密码然后又有人从你那里偷了密码则可以使用第三种身份验证方式。

因此窃取你信息的人将无法登录除非他们有此第三因素。我们可以在这里使用的另一种东西就是你自己。这可能很简单例如指纹脸部扫描视网膜扫描手掌扫描。通常这将是某种生物特征识别而你很难复制给其他人。因此也许你会再次输入用户名密码和指纹。智能手机使用指纹读取器。有时指纹读取器仅用作身份验证的一种形式。这有点危险因为如果有人可以访问我的指纹并能够复制它那么他们实际上可以在我的手机上进行身份验证。但是手机上还有其他应用程序需要更多并且还需要用户名密码和指纹才能进入。这里的另一个因素是你所在的地方。我马上想到的一个例子就是这项技术我知道苹果称之为HomeKit。你可以做的就是在你要为自己做某事的地方使用它比如你在自己的家中你可以使用智能手机打开锁。这里是不需要用户名和密码的。从字面上看它将只是在你所处的某个地方你所拥有的某个事物以及你是谁。可以你你在家附近拥有你的智能手机并将指纹放在智能手机上。然后这三件事加在一起就可以解锁你的房门。因此在某个地方您可以将自己拥有的东西和自己所有的东西结合起来使用例如做一些事情例如打开房屋的门或者在回家后打开室内的灯。