1.1 安全性
HDFS的文件许可模块可以组织程序漏洞而毁坏文件系统,也能阻止运行hadoop fs –rmr删除文件指令,但是无法组织恶意的用户假冒root身份来访问或者删除数据。需要使用Kerberos实现用户认证。
1.1.1 Kerberos和Hadoop
(1)客户端请求认证的步骤
1) 认证。客户端向认证服务器获取含时间票据授权票据(Ticket-Granting Ticket,TGT)。
2) 授权。客户使用TGT向票据授权服务器请求服务器票据。
3) 服务请求。客户端使用服务器票据向服务器发送请求。
(2)hadoop配置使用Kerberos
1)hadoop配置文件如何配置
core-site.xml文件中属性hadoop.security.authentication设置为kerberos启动kerberos认证。同时要将hadoop.security.authorization属性设置为true。用户调用kinit命令来执行认证,这个过程需要输入密码,用户申请到的TGT具有时效性,默认10小时,可以是一周。采用单次登陆(single sign-on)到hadoop。如果不希望输入密码,可以用ktutil命令创建一个Kerberos的keytab文件,保存密码使用命令kinit –t keytab执行认证。hadoop-policy.xml文件中访问控制列表ACL(access control list)配置哪些用户对哪些hadoop服务具有访问权限。
2)启动一个KDC(key distribution center)验证授权服务器
3)执行初始化验证任务kinit
可以输入kinit命令,会提示输入密码。或者kinit –t keytab指定密码文件。验证之后就可以hadoop fs –put qu.txt上传文件。
4)klist命令查看票据的过期时间,kdestory指令可销毁票据。
1.1.2 委托令牌
(1)委托令牌创建
一个HDFS读操作会与namenode和datanode多次交互,如果每次交互都要认证,则KDC压力会很大,所以使用委托令牌来支持后续认证。委托令牌由hadoop服务器创建。客户端首次登陆之后,从namenode服务器取得委托令牌,用令牌作为后续验证。
(2)块访问令牌
客户端执行HDFS块操作的委托令牌,客户端向namenode获取的委托令牌可以去datanode验证以获取数据,因为namenode会通过心跳将令牌传给datanode。通过设置属性dfs.block.access.token.enable属性为true来开启块访问令牌。
(3)HDFS之间共享令牌
将属性mapreduce.job.hdfs-servers设置为逗号隔开的HDFS URI列表,才能在其他HDFS共享令牌。
1.1.3 采用认证后安全性提高
(1) 分布式缓存分共享缓存和私有缓存。
(2) 用户只能操作自己的作业,需要将mapreduce.cluster.acls.enabled属性设置为true,mapreduce.job.acl-view-job和mapreduce.job.acl.modify-job属性设置可以查看和修改的的用户,用逗号隔开。
(3) 阻止遏抑的namenode和datanode或节点管理器加入集群,需要加入的节点要进行验证配置,例如datanode,把dfs.datanode.keytab.file设置为保存密码的keytab文件,其次在dfs.datanode.keyberos.principal和hadoop-policy.xml文件中的security.datanode.protocal.acl属性设置为datanode的用户名。配置权限验证。
(4) 任务只与父application master通讯,阻止攻击者获取数据。
(5)多个服务之间数据传输采用加密方式。
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: