摘 要 目前云计算当中的安全问题日益凸显,文章主要介绍了在Hadoop平台上使用Kerberos认证机制进行访问控制以避免恶意用户入侵,同时介绍对Hadoop进行灾难备份确保数据的安全性。 关键词 云计算安全;Kerberos;灾难备份;Hadoop 中图分类号:TP309 文献标识码:A 文章编号:1671-7597(2014)17-0052-02 云计算在互联网极速发展,它是在分布式计算、网格计算、并行计算等先前技术发展的基础上提出的新型计算架构,是超大的分布式环境,其核心功能是提供数据大规模存储和围绕数据的服务。 IaaS,PaaS、SaaS是云计算的三个服务层次。IaaS是云计算平台的底层服务,为上层提供最基本的数据存储、计算等资源性服务。PaaS是云计算平台的中间层,它利用IaaS所提供的服务,为上层的SaaS提供服务,其核心技术是分布式处理。SaaS层面需要处理的安全问题主要有:数据隔离、客户化定制。 本文针对云计算平台的访问控制权限和数据的灾难备份两个方面做了相关研究。 1 Kerberos访问控制 Hadoop是目前主流的大数据分布式处理平台。在Hadoop早期的版本当中默认集群内所有节点都是可靠的,用户使用Hadoop与文件系统交互式不需要进行验证,这就给恶意用户侵入集群当中留下了机会。一旦入侵成功,攻击者就能修改权限,伪装成NameNode或TaskTracker接受任务等,其危害十分之大。 Kerberos是有MIT开发维护的可信的第三方认证机制。Kerberos认证机制的工作原理是管理员预先把集群中确定的机器添加到数据库中,在KDC(Key Distribution Center)上分别产生主机与各个节点的keytab(包含主机和对应节点的名字和他们之间的密钥),并将这些keytab分发到对应的节点上。通过这些keytab文件,节点可以从KDC上获得与目标节点通信的密钥,进而被目标节点所认证,提供相应的服务,防止被冒充的可能性。[1] 下面是在Hadoop上安装与配置Kerberos的过程。 1)安装Kerberos之前,先在机器上安装KDC环境,在Ubuntu环境中已经安装了apt-get管理工具,所以直接运行如下命令即可: sudo apt-get install krb5-kdc krb5-admin-server 在安装结束之后,KDC会要求为Kerberos和Admin服务器提供一个名字,任意命名即可。 2)之后运行kdb5_newrealm命令来创建一个新的realm:sudo krb5_newrealm 3)KDC的配置。 在配置过程中,对所有问题的设置,都会被保存在/etc/krb5.conf,如果在安装之后要进行调整,直接修改该文件并重新启动krb5-kdc即可。下面即为配置的详细过程。 ①为KDC指定一个管理员: sudo kadmin.local Authenticating as principal root/admin@EXAMPLE.COM with password. kadmin.local: addprinc steve/admin WARNING: no policy specified for steve/admin@EXAMPLE.COM; defaulting to no policy Enter password for principal "steve/admin@EXAMPLE.COM": Re-enter password for principal "steve/admin@EXAMPLE.COM": Principal steve/admin@EXAMPLE.COM created. kadmin.local: quit 在上面的设置中,steve是KDC的主原则,而admin是该域下的一个实例,example.com是域。在实际操作中,应该将其变成自己要设置的值。 ②接下来,要为新的管理员设置足够的权限(ACL, Access Control List),其ACL由 /etc/krb5kdc/kadm5.acl 文件控制,修改如下:steve/admin@EXAMPLE.COM 上述设置意为 steve/admin 具有最大权限。 ③重启krb5-admin-server 以使ACL生效。 ④sudo /etc/init.d/krb5-admin-server restart 新设置的管理员可以用kinit utility进行测试: kinit steve/admin steve/admin@EXAMPLE.COM’s Password: 输入密码后,可以用 klist 命令查看TGT信息:klist Credentials cache: FILE:/tmp/krb5cc_1000 Principal: steve/admin@EXAMPLE.COM Issued Expires Principal Jul 13 17:53:34 Jul 14 03:53:34 krbtgt/EXAMPLE.COM@EXAMPLE.COM 4)安装Kerberos Linux客户端。 为了能够正确的获得认证,需要安装如下包: sudo apt-get install krb5-user libpam-krb5 libpam-ccreds auth-client-config auth-client-config 包允许简单的PAM多源配置,libpam-ccreds 包则可以将证书进行缓存。 5)配置。 ①在命令行终端中进行设置: sudo dpkg-reconfigure krb5-config ②dpkg-reconfigure工具会在 /etc/ krb5.conf 添加对应到你的域的入口。设置之后,你的配置文件该会像如下这样: [libdefaults] default_realm = EXAMPLE.COM … [realms] EXAMPLE.COM ={ kdc = 192.168.0.1 admin_server = 192.168.0.1 } ③配置完成后,你可以发一个ticket来测试:kinit steve@EXAMPLE.COM Password for steve@EXAMPLE.COM: 2 Hadoop灾难备份 灾难备份是在重大灾难如服务器崩溃时保证数据完整性的重要方法[2]。本部分介绍了Hadoop对文件系统进行灾难备份的方法,并模拟了服务器节点奔溃以后的数据恢复。 1)编辑core-site,增加checkpoint相关配置: fs.checkpoint.dir 是恢复文件存放目录; fs.checkpoint.period 同步检查时间,缺省是3600秒,测试时设为20秒; fs.checkpoint.size 当edit 日志文件大于这个字节数时,即使检查时间没到,也会触发同步。 2)将second namenode设置到另一台机器。 设置masters文件,这是指定seconde namenode启动的 机器。 编辑dfs.secondary.http.address,指定second namenode的http web UI 域名或IP到namenode Hadoop48不同的机器Hadoop47,而不是缺省的0.0.0.0。 3)测试时如果name node指定的目录没有初始化,需初始化:[zhouhh@Hadoop48 logs]$ hadoop namenode format 4)同步conf下的配置到Hadoop47/46,启动hadoop: [zhouhh@Hadoop48 conf]$ start-all.sh[zhouhh@Hadoop48 conf]$ jps 9633 Bootstrap 10746 JobTracker 10572 NameNode 10840 Jps [zhouhh@Hadoop47 ~]$ jps 23362 TaskTracker 23460 Jps 23250 SecondaryNameNode 5)编辑放置测试文件并放入HDFS: [zhouhh@Hadoop48 hadoop-1.0.3]$ fs -put README.txt /user/zhouhh/README.txt [zhouhh@Hadoop48 hadoop-1.0.3]$ fs -ls . Found 1 items -rw-rr 2 zhouhh supergroup 1381 2012-09-26 14:03 /user/zhouhh/README.txt [zhouhh@Hadoop48 hadoop-1.0.3]$ cat test中文.txt 这是测试文件 test001 by zhouhh http://baidu.com 6)杀死Namenode,模拟崩溃。 [zhouhh@Hadoop48 ~]$ jps 9633 Bootstrap 23006 Jps 19691 NameNode 19867 JobTracker [zhouhh@Hadoop48 ~]$ kill -9 19691 [zhouhh@Hadoop48 ~]$ jps 9633 Bootstrap 23019 Jps 19867 JobTracker [zhouhh@Hadoop47 hadoop-1.0.3]$ jps 1716 DataNode 3825 Jps 1935 TaskTracker 1824 SecondaryNameNode 7)将dfs.name.dir下的内容清空,模拟硬盘损坏,通过mv命令,采用改名的方式进行测试。 [zhouhh@Hadoop48 ~]$ cd /data/zhouhh/myhadoop/dfs/name/ [zhouhh@Hadoop48 name]$ ls current image in_use.lock previous.checkpoint [zhouhh@Hadoop48 name]$ cd .. [zhouhh@Hadoop48 dfs]$ mv name name1 8)数据恢复,从second namenode 复制数据。 查看second namenode文件,并打包复制到namenode的fs.checkpoint.dir: [zhouhh@Hadoop47 hadoop-1.0.3]$ cd /data/zhouhh/myhadoop/dfs/ [zhouhh@Hadoop47 dfs]$ ls data namesecondary [zhouhh@Hadoop47 dfs]$ cd namesecondary/ [zhouhh@Hadoop47 namesecondary]$ ls current image in_use.lock [zhouhh@Hadoop47 namesecondary]$ cd .. [zhouhh@Hadoop47 dfs]$ scp sec.tar.gz Hadoop48:/data/zhouhh/myhadoop/dfs/ sec.tar.gz [zhouhh@Hadoop48 dfs]$ ls name1 sec.tar.gz [zhouhh@Hadoop48 dfs]$ tar zxvf sec.tar.gz namesecondary/ namesecondary/current/ namesecondary/current/VERSION namesecondary/current/fsimage namesecondary/current/edits namesecondary/current/fstime namesecondary/image/ namesecondary/image/fsimage namesecondary/in_use.lock [zhouhh@Hadoop48 dfs]$ ls name1 namesecondary sec.tar.gz 若dfs.name.dir配置的name不存在,需创建name目录,此时name下面已经有数据,按Ctrl+C 结束 9)恢复成功,检查数据正确性。 [zhouhh@Hadoop48 dfs]$ start-all.sh [zhouhh@Hadoop48 dfs]$ jps 23940 Jps 9633 Bootstrap 19867 JobTracker 23791 NameNode [zhouhh@Hadoop48 dfs]$ hadoop fs -ls . Found 2 items -rw-rr 2 zhouhh supergroup 1381 2012-09-26 14:03 /user/zhouhh/README.txt -rw-rr 2 zhouhh supergroup 65 2012-09-26 14:10 /user/zhouhh/test中文.txt [zhouhh@Hadoop48 dfs]$ hadoop fs -cat test中文.txt 这是测试文件 test001 by zhouhh http://baidu.com [zhouhh@Hadoop48 dfs]$ hadoop fsck /user/zhouhh FSCK started by zhouhh from /192.168.10.48 for path /user/zhouhh at Wed Sep 26 14:42:31 CST 2012 ..Status: HEALTHY 恢复成功。 3 总结 云计算安全是目前云计算发展中遇到的瓶颈,本文介绍在大数据计算系统Hadoop平台下实现使用Kerberos进行访问控制确保安全性。另一方面,本文给出了对Hadoop进行灾难备份的步骤并模拟灾后恢复,证明灾难备份的有效性。 参考文献 [1]刘莎,谭良.Hadoop云平台中基于信任的访问控制模型[J].计算机科学,2014,41(5):155-163. [2]张乐.基于单元集群的MapReduce中节点失效的改进[J].微型机与应用,2013,32(16):81-84. |