在Hadoop Common模块中除了之前我所分析过的4大主模块,还有一个也同样是非常重要的内容,就是Security---安全模块。不过,我只是简单的分析他的实现机制,并不会涉及代码的分析。同时,我会通过对于Hadoop中采取的安全机制方法延伸到当下主流的一些安全认证方法,比如LDAP,SSL,Oauth Token等等。、
1)Hadoop Security
Hadoop的Security是如何运作的呢,当然首先看看他的目录结构。下面是我截的一张图:
最频繁出现的关键词是Token(令牌),那这个也就是后面一定会提及到的东西了。了解过Hadoop RPC源代码的人一定知道他在那里使用的是一种叫做SASL的认证机制,(什么叫认证机制呢,你可以类比与我们所说的JAAS,java授权服务),,中文名为简单认证和安全层,SASL是一种用来扩充C/S模式验证能力的认证机制。SASL的认证方法可以采用多种的认证方法,有以下几种:
1.Anonymous:无须认证
2.Plain,采用base64位加密明文传输,没有用到加密算法
3.Digest-Md5,采用基于MD5提供的安全服务
4.Kerberos认证方法。这个也是Hadoop中最最主要的认证方法。
Hadoop中采用的就是4或者3+4的方法进行安全的认证服务的。所以重点分析什么叫做Kerberos,Kerberos是一种网络认证协议,作为可信任的第三认证服务。如果你要去请求服务,你要获取2个票据,1个叫许可票据,1个叫服务票据,去服务器请求服务之前,你必须拥有服务票据,但是你要去请求服务票据的时候,你又必须拥有许可票据,就是许可你去请求服务票据,拿到了这2个票据,你才能够有资格去真实服务器上去请求服务。下面是一张模拟图;
跟待会会说到的Oauth认证挺像的。但是在Hadoop中,你单单通过Kerberos认证还不够,你还有获取一些Token令牌。至少在在访问某些节点时,你要有一下3类Token:
下面我们做一个延生,另一个与此非常相似的机制。
OAuth认证
OAuth ,全称,Open Authorization,开放授权,用于第三方授权服务的,系统可以无须知道用户的账号,密码,就能获取用户的授权信息,比如网上的各种第三登录啦,都是这种机制。我举一个QQ授权登录的例子;
第三步就是你自己输自己的QQ密码账号的时候,登录成功了就会把信息返给第三机构,我以Csdn的QQ登录我例子:
类似淘宝登录,新浪微博登录都是一个道理。我们上述2种方法的异同点,相同的是都有一个第三机构,1个是通过第三机构给予服务票据,用户拿着服务票据请求真实资源,1个是等待用户授权,授权成功后,授权机构返回请求方授权信息,细细品味,二者在这上面的原理确实不太一样。
2)LDAP
下面从SASL转移到一种常见的安全认证机制JAAS,在JAAS中同样可以集成很多的认证方法,比如说我这里将会说的LDAP(轻量级目录访问协议),LDAP是一种提供目录服务的信息服务。目录服务是一种特殊的数据库系统,采用了树形的存储结构,针对读取操作,做了特定的优化,但是不支持更新等这样的写操作。因为LDAP目录服务采用的不是一般的关系数据库的,建表,分字段的类型存储,他通过一个个条目,(相当于数据库中的Record记录),保存早树中的数据结构中。先看一个简化的存储模型:
跟结点是顶级域名,然后通过此往下找,最后一层就是所找的内容,这很类似于B树索引的方式,所以LDAP采用的是文件数据库,通过文件索引的形式提高检索效率。目前流行LDAP服务的实现由OpenLDAP,有兴趣的可以自己安装试试此服务。
3)SSL,Https
在这里最后介绍的一种安全认证方法是SSL,Secure Socket Layer(安全套接字层),SSL+Http=Https了所以说Https就是加了密的Http协议。SSL的实现比较复杂,我就简单的说说第一步,第一步客户端和服务端之间协商加密算法:
这个过程一结束,大家把自己的信息进行了交互了之后,就基本确定了加密的算法,后续的各种之间的认证就开始了,在上面的第4步,服务端会把自己的服务器证书作为额外信息发给客户端,然后客户端会想认证机构核实此服务器证书的真实性,这叫做单向认证,有的时候,对于安全性要求更高的,还会要求提供客户端的证书,这样就是安全性更高的双向认证,可能而知,里面经过的流程那么多,网站的响应速度肯定比普通的浏览网站的时间更长一点了。
4)总结
主要讲了安全的4种机制,在安全的领域,就是4个字攻击和防守,魔高一尺,道高一丈,没有绝对的安全。