高手指路:Linux运维工程师的大数据安全修炼手册

作者介绍

陈浩,北信源研发工程师,五年Linux运维工作经验,热衷运维技术研究、实践和团队分享。

从运维青铜到运维白银再到运维黄金,这里面牵扯到的方向问题也就是装备,根据自己的爱好,每个人都应该选择一个适合自己和喜欢自己的一个职业技术方向,如:大数据安全、开发运维、云计算运维等。掌握越多前沿技术也就是掌握了更多的装备,才能更好地在IT行业混下去,毕竟IT技术更新太快。

初级和中级篇详见《从苦逼到牛逼,详解Linux运维工程师的打怪升级之路》,今天给大家介绍大数据安全的正式面目。

Hadoop安全目录:

Kerberos(已发布)

Elasticsearch

Knox

Oozie

Ranger

Apache Sentry

一、大数据基本组件

二、Hadoop安全背景

共享集群

按照业务或应用的规则划分资源队列,并分配给特定用户

HDFS上存放各种数据,包括公共的、机密的

安全认证:确保某个用户是自己声称的那个用户

安全授权:确保某个用户只能做他允许的那些操作

三、设备说明

四、Kerberos基本概念

Principal(安全个体):被认证的个体,有一个名字和口令

KDC(key distribution center ) : 是一个网络服务,提供ticket 和临时会话密钥

Ticket:一个票据,客户用它来向服务器证明自己的身份,包括客户标识、会话密钥、时间戳。

AS (Authentication Server): 认证服务器

TGS(Ticket Granting Server): 许可证服务器

TGT:Ticket-granting Ticket

五、Kerberos认证过程

六、集群启用Kerberos认证

装KDC Server

1、安装一个新的KDC Server(任意一个集群主机,这里hdp141为例)

# yum install krb5-server krb5-libs krb5-workstation

2、打开KDC Server的配置文件

# vi /etc/krb5.conf

3、(可选)自定义realms配置(EXAMPLE.COM修改为CESHI.COM,下面例子都为CESHI.COM)

# vi /etc/krb5.conf

[logging]

default = FILE:/var/log/krb5libs.log

kdc = FILE:/var/log/krb5kdc.log

admin_server = FILE:/var/log/kadmind.log

[libdefaults]

default_realm = CESHI.COM

dns_lookup_realm = false

dns_lookup_kdc = false

ticket_lifetime = 24h

renew_lifetime = 7d

forwardable = true

[realms]

CESHI.COM = {

kdc = hdp141

admin_server = hdp141

}

[domain_realm]

.vrv.com = CESHI.COM

vrv.com = CESHI.COM

# vi /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]

kdc_ports = 88

kdc_tcp_ports = 88

[realms]

CESHI.COM = {

#master_key_type = aes256-cts

acl_file = /var/kerberos/krb5kdc/kadm5.acl

dict_file = /usr/share/dict/words

admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab

supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal

}

4、创建Kerberos数据库

创建过程中需要输入master key。

5、启动KDC

# service krb5kdc start

# chkconfig krb5kdc on

# service kadmin start

# chkconfig kadmin on

6、创建kerberos Admin

通过创建一个admin principal创建KDC admin,需要输入principal的密码。

打开KDC ACL文件,确认admin principal在KDC ACL中拥有权限,若没有对应的域则需要添加。

如果修改了文件kadm5.acl,那么你就必须重启kadmin进程

# service kadmin restart

7、启用Kerberos保护

安装JCE:必须用官网下载的JCE覆盖本地已有的JCE,否则将缺少供Kerberos使用的加密方式。

在Ambari server所在的主机和集群中的所有主机上,根据使用的JDK版本选择合适的JCE策略文件。

Oracle JDK 1.7:

http://www.oracle.com/technetwork/java/javase/downloads/jce-7-

download-432124.html

Oracle JDK 1.8:

http://www.oracle.com/technetwork/java/javase/downloads/jce8-

download-2133166.html

在Ambari Server所在主机和集群中的所有主机上,添加unlimited security policy JCE jars到目录$AMBARI_SERVER_JAVA_HOME/jre/lib/security/下。

注意:在所有的主机上,JCE相关的包都必须解压到配置文件/etc/ambari-server/conf/ambari.properties中属性java.home所指定的JDK目录下。

# JAVA_HOME=/usr/java/default # unzip -o -j -q UnlimitedJCEPolicyJDK8.zip -d $JAVA_HOME/jre/lib/security/

重启Ambari Server(ambari server服务器hdp140)

# service ambari-server restart

8、运行Kerberos保护向导

(1)确认KDC已经安全和正确配置,并且已经在集群的所有主机上配置好JCE。

(2)登录Ambari Web,打开管理员 > Kerberos

(3)点击启用Kerberos,启用安装向导,选择条件检查

(4)提供关于KDC和管理员账号的信息

KDC相关信息请参考配置文件/etc/krb5.conf

(5)Ambari会在集群的主机上安装Kerberos客户端,然后通过测试是否能创建Principal,生成Keytab和分配Keytab来测试是否能连接KDC。

自定义Hadoop使用的Kerberos identities

(6)确认你的配置。你可以通过页面下载自动创建的包含principals和Keytabs的CSV文件。

(7)停止服务

(8)启用Kerberos

Keytabs保存在主机的/etc/security/keytabs目录下。

(9)启动和测试服务

启动和测试服务成功后点击完成以结束Kerberos的启用。

(10)查看已启用的Kerberos配置

到这里kerberos安装完成。

高级选项:

为Ambari Server设置Kerberos(可选项)

1. 使用kadmin在你的KDC所在的主机(hdp141)为Ambari Server创建一个principal。(ambari-server为自定义名)

2. 为此principal生成一个Keytab

3. 将单前目录生成的Keytab拷贝到Ambari Server所在的集群。确定该文件有合适的权限,能够被启动Ambari Server守护进程所访问。

# scp ambari.server.keytab hdp140:/etc/security/keytabs/ # ll /etc/security/keytabs/ambari.server.keytab -r--r----- 1 root root 530 Dec 18 20:06 /etc/security/keytabs/ambari.server.keytab

4. 停止ambari server

# ambari-server stop

5. 运行setup-security命令,设置JAAS。标红部分为需要设置部分。

A. 选择3,Setup Ambari kerberos JAAS configuration

B. 输入第一步为Ambari Server设置的principal名

C. 输入Ambari principal的Keytab所在路径

# ambari-server setup-security

Using python /usr/bin/python2

Security setup options...

===========================================================================

Choose one of the following options:

[1] Enable HTTPS for Ambari server.

[2] Encrypt passwords stored in ambari.properties file.

[3] Setup Ambari kerberos JAAS configuration.

[4] Setup truststore.

[5] Import certificate to truststore.

===========================================================================

Enter choice, (1-5): 3

Setting up Ambari kerberos JAAS configuration to access secured Hadoop daemons...

Enter ambari server's kerberos principal name (ambari@VRV.COM): ambari-server@VRV.COM

Enter keytab path for ambari server's kerberos principal: /etc/security/keytabs/ambari.server.keytab

Ambari Server 'setup-security' completed successfully.

重启Ambari Server

# ambari-server restart

开始实测:

1.新建测试用户

普通用户需要安装ranger(后面介绍)管理权限。

列出所有用户

创建测试用户

登录验证

# kinit test #登陆

ceshi123456.

退出登陆状态

注销:kdestroy

集群登录与授权(hdfs用户)

未使用kerberos用户认证前执行

# hadoop dfs -ls /

使用Kerberos用户认证

此时test用户默认有查看权限,无目录授权

换到HDFS用户下,初始化HDFS

查看HDFS的Kerberos用户名

改变目录属性:hadoop fs -chown test:hdfs /test

使用test用户登录

修改密码和重新生成

生成新的多用户使用keytab文件

创建keytab文件(生成到当前文件夹下)

案例:将Hive和HDFS的Keytab集成到同一个Keytab文件中

1. 查看所有Princs

2. 添加HDFS的Princs的Keytab到hdfs-hive.keytab

3. 添加Hive的Princs的Keytab到hdfs-hive.keytab

查看生成的hdfs-hive.keytab

使用生成的Keytab文件登录

修改租期

1.修改全局租期

# vi /etc/krb5.conf

[libdefaults]

default_realm = CESHI.COM

dns_lookup_realm = false

dns_lookup_kdc = false

ticket_lifetime = 24h

#ticket 租期时间

renew_lifetime = 7d

#重新申请时间

frwardable = true

#重新启动

# service krb5kdc restart

# service kadmin restart

2.手动修改用户租期时间

#应用例子

退出后,重新启动

# service krb5kdc restart

# service kadmin restart

3.使用Spark任务测试Kerberos下的作业提交

(1)指定Spark用户和密码

# cd /etc/security/keytabs

[root@hdp140 keytabs]# ll

-r--r----- 1 root root 353 Oct 30 23:54 ambari.server.keytab

-r--r----- 1 hbase hadoop 313 Oct 30 23:54 hbase.headless.keytab

-r-------- 1 hbase hadoop 313 Oct 30 23:54 hbase.service.keytab

-r-------- 1 hdfs hadoop 308 Oct 30 23:54 hdfs.headless.keytab

-r--r----- 1 hive hadoop 308 Oct 30 23:54 hive.service.keytab

-r-------- 1 hdfs hadoop 298 Oct 30 23:54 nn.service.keytab

-r--r----- 1 ambari-qa hadoop 333 Oct 30 23:54 smokeuser.headless.keytab

-r-------- 1 spark hadoop 313 Oct 30 23:54 spark.headless.keytab

-r--r----- 1 root hadoop 308 Oct 30 23:54 spnego.service.keytab

上传Spark文件到opt

# hdfs dfs -mkdir -p /tmp/sparkwordcount/

# hdfs dfs -mkdir -p /tmp/sparkwordcount/input

# hdfs dfs -put /opt/sparkwordcountinput.txt /tmp/sparkwordcount/input

# hdfs dfs -put /opt/spark_word_count.jar /tmp/sparkwordcount/

#spark测试文件

sparkwordcountinput.txt spark_word_count.jar

Spark命令提交任务

# spark-submit \

--class com.vrv.bigdata.ml.DataExtract2 \

--master yarn \

--deploy-mode cluster \

--principal spark-test@CESHI.COM \

--keytab /etc/security/keytabs/spark.headless.keytab \

hdfs://hdp140:8020/tmp/sparkwordcount/spark_word_count.jar \

hdfs://hdp140:8020/tmp/sparkwordcount/input \

hdfs://hdp140:8020/tmp/sparkwordcount/output/spark_work_count

17/10/31 01:15:28 INFO Client:

client token: Token { kind: YARN_CLIENT_TOKEN, service: }

diagnostics: N/A

ApplicationMaster host: 192.168.2.143

ApplicationMaster RPC port: 0

queue: default

start time: 1509383715631

final status: SUCCEEDED

tracking URL: http://hdp141:8088/proxy/application_1509379053332_0014/

user: spark

17/10/31 01:15:28 INFO ShutdownHookManager: Shutdown hook called

17/10/31 01:15:28 INFO ShutdownHookManager: Deleting directory /tmp/spark-40e868df-ca58-4389-b20c-03d2717516cc

疑难问题1:

解决:

1. 在Ambari server所在的主机和集群中的所有主机上,根据使用的JDK版本选择合适的JCE策略文件。

Oracle JDK 1.7:

http://www.oracle.com/technetwork/java/javase/downloads/jce-7-

download-432124.html

Oracle JDK 1.8:

http://www.oracle.com/technetwork/java/javase/downloads/jce8-

download-2133166.html

疑难问题2:

解决:

参考:

http://book.51cto.com/art/200907/140533.htm

实战到此结束。后续再更新Elasticsearch安全实战。

总结

Hadoop集群节点数多,配置和维护一个使用Kerberos系统高性能,稳定的Hadoop集群难度非常高。

Hadoop中的HDFS是一个文件系统,用户的认证和授权比较复杂,难度不低于Linux系统的用户和组管理。加上Kerberos后,用户和用户组的管理更加复杂,通常一个合适的用户不能访问HDFS上的文件。

Hadoop加上Kerberos后,通常原来的用户和文件,可能都失效导致数据流失。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180213B0400V00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券