目录
·CIA三原则
·黄金法则(3A原则)
·密码学基础
·身份认证
·访问控制
一.CIA三原则
CIA三原则,分别代表C(机密性,Confidentiality),I(完整性,Integrity),A(可用性,Avaliability)
1.机密性
特性:确保用户的某些敏感树蕨,只能被自己看到,即数据的“不可见”
2.完整性
特性:确保用户的数据不能被随意的修改,即数据的”不可改“
3.可用性
特性:确保用户随时可以完成对数据的读取,即数据的”在需要时的可获取性“
以上三点,均是围绕着用户的数据提出的,可见安全最本质的一方面,就是要保证数据的安全
二.黄金法则(3A原则)
3A原则,分别代表A(认证,Authentication),A(授权,Authorization),A(审计,Audit)
认证:你是谁?—确定身份—所处的位置为访问数据前
授权:你可以做什么?—确保行为的可行性—所处的位置为访问数据中
审计:你做了什么?—确保对操作进行记录和回溯—所处的位置为访问数据后
身份认证:实现了对用户的身份的识别
授权和审计:对用户的操作和访问行为的把控
三.密码学基础
四.身份认证
身份认证大致上可以分为两大部分,一部分是对外的身份认证,另一部分是对内的身份认证。
对外的身份认证:比如,我们要登录某个APP,那么我们需要注册对应的账号,然后再使用我们的账号密码,进行登录,这就是对外的身份认证
对内的身份认证:比如,某个公司中可能存在各个部门,各个部门可能都需要对上线应用的服务器或者数据库,进行登录,操作。这时就需要对内部人员进行身份认证
1.对内认证
很多情况下,安全问题都是出现在内部,下面我们来简单介绍一下对内认证存在的几个问题
主要存在的三个问题
(1)没有认证环节
(2)弱密码
(3)认证信息泄露
(1)没有认证环节
很多应用和公司存在的最普遍的问题,尤其是在对内认证的部分,我们经常会看到,很多公司的数据库,接口,管理后台在使用的时候,并不需要经过认证这个环节
(2)弱密码
密码的强度非常的低,可以通过对密码强度进行限制,规定必须多少位或者必须携带字母等。或者强制用户定期修改密码
(3)认证信息泄露
黑客通过各种手段,拿到了用户的密码信息和身份凭证这样的认证信息。常见的手段包括,钓鱼,拖库等
2.单点登录—解决身份认证问题
关于什么是单点登录,可以参照这个博客《什么是单点登录(原理及实现简介)》
单点登录,用户只需要进行此认证,便可以访问所有的网页,应用和其他产品。随着互联网产品形式的不断发展,单点登录的实现方式也经历了多次的升级更新。
下面介绍几种典型的单点登录方式,分别是CAS流程,JWT,OAuth和OpenID
(1)CAS(Central Authentication Service,集中式认证服务)流程
CAS是一个开源的单点登录框架,它不属于某一种单点登录的实现方式,而是提供了一整套的落地方案
1.用户访问应用
2.应用需要认证,但应用本身不具备认证功能。因此,应用将用户重定向至认证中心的页面。比如,你在登录一个应用的时候,它显示你可以选择微信,QQ,微博账号进行登录,你点击微信登录,就跳转至微信的登录界面
3.用户在认证中心页面进行认证操作。如果用户之前已经在其他应用进行过认证了,那么认证中心可以直接识别用户身份,免去用户再次认证的过程
4.认证完成后,认证中心将认证的凭据,有时会加上用户的一些信息,一起返回给客户端,也就是说你在微信登录完成后,回到了某APP
5.客户端将凭据和其他信息发送给应用,也就是说,应用将微信的登录凭据发送给了应用的后端
6.应用收到凭证后,可以通过签名的方式,验证凭据的有效性。或者,应用也可以直接和认证中心通信,验证凭据并获取用户信息。这也就是为什么极客时间能够拿到你的微信头像
(2)JWT (JSON Web Token)
JWT (JSON Web Token)是一种非常轻量级的单点登录流程。他会在客户端保存一个凭证信息,之后在你每一次登录的请求中都带上这个凭证,将其作为登录状态的依据。JWT的好处在于,不需要应用应用服务端去维护额外Cookie或者Session了。但是,正是因为它将登录状态落到了客户端,所以我们无法进行注销等操作了
非常常见的例子就是,我们在电脑端登录了CSDN之后,关闭网页之后,再此打开CSDN,登录状态还是显示已登录的,不需要每次都输入用户名密码进行登录
(3)OAuth(Open Authorization)
OAuth(Open Authorization)的主要特点是授权,也是我们通常用QQ,微信登录其他应用时所采用的协议,通过OAuth,用户在完成了认证中心的登录之后,应用只能够验证用户确实在第三方登录了,但是想要维持应用内的登录状态,应用还是得颁发自己的登录凭证。这也就是为什么QQ授权后,还需要绑定你的手机号码,这也就意味着,应用是基于QQ的信息创建了一个自身账号
(4)OpenID(Open Identity Document)
OpenID(Open Identity Document)和OAuth的基本功能一致,但是OpenID不提供授权的功能,最常见的,当我们需要在应用中使用微信支付的时候,应用只需要手机支付的相关信息即可,并不需要获取用户的微信头像
五.访问控制
1.简单看一个访问控制的模型
具体来说,就是一个主体请求一个客体,这个请求的授权由访问控制来完成
三个要素
主体:请求的发起者,主体可以是用户,也可以是进程,应用,设备等任何发起访问请求的来源
客体:请求的接受方,一般是某种资源,比如某个文件,数据库,也可以是进程,设备等接受指令的实体
请求:主体对客体进行的操作,常规的是读,写和执行,也可以进一步细分为删除,追加等粒度更细的操作
2.常见的访问控制机制
访问机制是否对请求进行授权,决定这个操作能否顺利执行下去
常见的访问控制机制有以下几种
DAC(Discretionary Access Control,自主访问控制)
role-BAC(role Based Access Control,基于角色的访问控制)
ruke-BAC(rule Based Access Control,基于规则的访问控制)
MAC
(1)DAC(Discretionary Access Control,自主访问控制)
特点:DAC就是让客体的所有者来定义访问控制规则
举例:
1.去图书馆借书,书是属于图书馆的,如果你想要将书借出,你需要得到图书馆的授权(借书的人是主体,图书馆是客体的所有者)
2.以CSDN为例,作者可以选择将自己的某些博客公布出来,让别人看到,或者将博客隐藏,不让别人看到
3.以Linux为例,某个用户创建的文件,该用户可以设置文件的权限,来选择让某些人有权限查看或者无权限查看
意义:DAC,访问控制的规则维护完全下放到了所有者手中,管理员在理论上不需要对访问控制规则进行维护,因此,DAC具备很高的灵活性,维护成本也很低,相对的,尽管DAC降低了管理员的工作难度,但是会增加整体访问控制监管的难度,以至于安全性完全取决于所有者的个人安全意识。可以理解为DAC的特性其实就是将安全交到了用户的手中
适用场景:当用户需要掌控自己的资源时,我们通常会采用DAC,来完成访问控制。比如Liunx种采用的就是DAC,用户可以控制自己的文件能够被谁访问
(2)role-BAC(role Based Access Control,基于角色的访问控制)
特点:role-BAC是放在权限泛滥,实现最小特权原则的经典解决方案
举例:
1.图书馆借书规则,初中生不可以借阅高中生的书籍,这里就划分了初中生和高中生两个角色,可以将每个个体划分至不同的角色,这样就省去了对每个个体都要进行权限设置的繁琐
意义:试想一下,假如没有角色的概念,那么管理员需要给每一个用户都指定不同的权限方案,当用户的岗位或职责发送改变时,理论上管理员需要对这个用户的权限进行分配。但是准确识别每一个用户需要哪些权限,不需要哪些权限,是一个很有挑战的工作,如果采用了role-BAC。那么管路员只需要简单地将用户从一个角色转移到另一个角色,就可以完成权限的变更
适用场景:因此role-BAC更适合在管理员集中管理的时候进行使用。在这种情况下,所有的权限都由管理员进行分配和更改,所有的权限都由管理员进行分配和变更,所以,使用role-BAC可以大大降低管理员的工作难度,提高他们的工作效率。同样的原理也适用于应用,应用可以对不同的角色限定不同的操作权限,比如:运维人员给开发,产品,运维划分不同的机器操作权限
(3) rule-BAC(rule Based Access Control,基于规则的访问控制)
特性:rule-BAC就是制定某种规则,将主体,请求和客体的信息结合起来进行判定
举例:
1.去图书馆借书,根据来借书人的身份可以规定可以借哪些书,根据书的种类,可以规定哪些可以外借,哪些不能外界
意义:在rule-BAC种,有一点需要我们注意,那就是,我们需要定义是 “默认通过”还是“默认拒绝”,即当某次请求没有命中任何一条规则时,我们应该让他“通过”还是“拒绝”呢?这需要根据实际情况考虑
适用场景: rule-BAC适合在复杂场景下提供访问控制保护,因此,rule-BAC相关的设备和技术在安全种最为常见
典型的例子就是防火墙 , 防火墙通过将请求的源IP和端口,目标IP和端口,协议等特征获取到后,根据定义好的规则,来判定是否允许主体访问,比如,限制22端口,以拒绝SSH的访问,同样地,应用也往往会采取风控系统,对用户异常行为进行判断
(4)MAC (Mandatory Access Control,强访问控制)
特点:MAC是一种基于安全界别标签的访问控制策略
举例:
在图书馆排队借书时,听到管理员说:“初中生不能借阅高中生的数据”,这就是一种强制控制访问, 在互联网种,主体和客体被划分为“秘密,私人,敏感,公开”这四个级别。MAC要求对所有的主体和客体都打上对应的标签,然后根据标签来指定访问控制规则
意义: MAC是安全性最高的访问控制策略。但对它实施的要求也很高,需要对系统种的所有数据都进行标记,在实际工作中,想要做到这一点并不容易,每一个应用和系统,每时每刻都在不停的生成新的数据,数据也在不停地在各个系统之间流转。你需要对这些行为进行全面的把控,才能将标签落地
适用场景:
MAC仅仅会出现在政府系统中,普通公司在没有过多的合规需求下,不会采取MAC
实际工作中,常常需要将他们进行组合使用 ,比如在Linux中,我们除了对文件进行DAC访问控制,也利用了role-BAC定义了用户组的概念,这样管理员就可以将用户分配到不同的组中,DAC也会按照分组去定义相应的权限。所以,使用访问控制机制的时候,我们要学会灵活应用