网络空间安全技术
上QQ阅读APP看书,第一时间看更新

4.3 数据库技术新动态

当前数据库技术的新动态有键值对存储Redis、列存储Hbase和文档数据库存储MongoDB等。

4.3.1 键值对存储Redis

远程字典服务(Remote Dictionary Server,Redis)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

Redis是一个Key-Value存储系统。和Memcached类似,Redis支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set有序集合)和hash(哈希类型)。这些数据类型都支持push/pop,add/remove,取交集、并集、差集,以及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与Memcached一样,为了保证效率,数据都缓存在内存中。区别是Redis会周期性地把更新的数据写入磁盘或把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis是一个高性能的Key-Value数据库。Redis的出现,很大程度补偿了Memcached这类Key/Value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby和Erlang等客户端,使用很方便。

Redis安全加固主要涉及以下几个方面。

(1)网络加固

如果仅为本地通信,确保Redis监听在本地。具体设置为在/etc/redis/redis.conf中配置如下:

(2)防火墙设置

如果需要其他机器访问,或设置了Master-Slave模式,需添加防火墙设置,具体配置如下:

(3)添加认证

默认情况下,Redis未开启密码认证。若要开启认证模式,具体配置如下。

打开/etc/redis/redis.conf,找到requirepass参数,设置密码后,保存redis.conf文件,最后重启Redis服务。

(4)设置单独账户

可设置一个单独的Redis账户。创建Redis账户,通过该账户启动Redis服务,具体配置如下:

(5)限制Redis文件目录访问权限

设置Redis的主目录权限为700;如果Redis配置文件独立于Redis主目录,权限修改为600,因为Redis密码明文存储在配置文件中。具体配置如下:

4.3.2 列存储Hbase

HBase是一个分布式的、面向列的开源数据库,该技术来源于Fay Chang所撰写的论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同之处是HBase是基于列的而不是基于行的模式。

HBase-Hadoop Database,是一个高可靠性、高性能、面向列和可伸缩的分布式存储系统,利用HBase技术可在廉价PC服务器上搭建起大规模结构化存储集群。

与商用大数据产品不同,HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用Chubby作为协同服务,HBase利用Zookeeper作为协同服务。

Hbase安全加固主要涉及以下几个方面。

(1)集群的模式配置

Hbase集群的模式,对于单机模式,值为false;对于伪分布式和完全分布式模式,值为true。如果设置成false,将在同一个JVM中运行所有HBase和Zookeeper守护进程。

建议:将hbase.cluster.distributed值配置为true,其默认值为false。

(2)HBase认证

建议:将hbase.security.authentication配置为kerberos,其默认值为空。

将以下内容添加到每个客户端上的hbase-site.xml文件中:

(3)Hbase授权

建议:将hbase.security.authorization配置为true,其默认值为false。

4.3.3 文档数据库存储MongoDB

MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富、最像关系数据库的。它支持的数据结构非常松散,类似JSON的BSON格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法类似于面向对象的查询语言,可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

文档是MongoDB中数据的基本单位,类似于关系数据库中的行(但是比行复杂)。多个键及其关联的值有序地放在一起就构成了文档。

MongoDB安全加固主要涉及以下几个方面。

1)启用auth,即使在可信赖网络中部署MongoDB服务器,也应该启用auth,当网络受到攻击时它能够提供深层防御。编辑配置文件来启用auth。代码为auth=true。

2)限制对数据库的物理访问是确保安全性的重要措施。如果没有必要,就不要把开发环境的数据库暴露在Internet上。如果攻击者不能物理地连接到MongoDB服务器,那么效果就会大打折扣,数据就会更安全。例如,服务部署在亚马逊Web服务(AWS)上,那么应当把数据库部署在虚拟私有云(VPC)的私有子网中。

3)使用防火墙。防火墙的使用可以限制允许哪些实体连接MongoDB服务器。最佳的措施是仅允许自己的应用服务器访问数据库。如果服务部署在不支持防火墙功能的提供商的主机上,那么可以使用“iptables”对服务器进行简单的配置。

4)使用key文件建立复制服务器集群。指定共享的key文件,启用复制集群的MongoDB实例之间的通信。如给配置文件中增加keyfile参数,复制集群中所有机器上这个文件的内容必须相同。代码为keyFile=/srv/mongodb/keyfile。

5)禁止REST接口在产线环境下建议不要启用MongoDB的REST接口。REST接口不支持任何认证,默认情况下此接口是关闭的。如果“rest”配置选项打开了此接口,那么应该在产线系统中将其关闭。代码为rest=false。

6)要在MongoDB部署中使用TLS/SSL。将mongod和mongos中包含的配置选项net.ssl模式设置为requireSSL,该设置限制每个服务器只能使用TLS/SSL加密连接。还可以指定值allowSSL或preferSSL来设置端口上混合TLS/SSL模式的使用。