详解linux运维工程师高级篇(大数据安全方向)html
简介:java
从运维青铜到运维白银再到运维黄金,这里就要牵扯到方向问题也就是装备,根据本身的爱好,每一个人都应该选择一个适合本身和喜欢本身的一个职业技术方向,如:大数据安全,开发运维,云计算运维等等。而掌握的越多前言技术也就是更多的装备,才能更好的在it行业混下去,毕竟it技术更新太快,初级篇和中级篇前面已介绍。node
初级篇:详解Linux运维工程师入门必备技能(青铜)python
中级篇:详解Linux运维工程师打怪升级篇(白银)linux
如今给你们介绍大数据安全的正式面目:sql
1.大数据基本组件数据库
2. Hadoop安全背景apache
共享集群安全
按照业务或应用的规则划分资源队列,并分配给bash
特定用户
HDFS上存放各类数据,包括公共的、机密的
安全认证:确保某个用户是本身声称的那个用户
安全受权:确保某个用户只能作他容许的那些操做
3. 设备说明
服务 |
IP |
主机名 |
系统 |
Ambari Kerberos |
192.168.2.140 |
hdp140 |
CentOS 7.3 |
namenode |
192.168.2.141 |
hdp141 |
CentOS 7.3 |
datanode |
192.168.2.142 |
hdp142 |
CentOS 7.3 |
datanode |
192.168.2.143 |
hdp143 |
CentOS 7.3 |
4. kerberos基本概念:
Principal(安全个体):被认证的个体,有一个名字和口令
KDC(key distribution center ) : 是一个网络服务,提供ticket 和临时会话密钥
Ticket:一个票据,客户用它来向服务器证实本身的身份,包括客户标识、会话密钥、时间戳。
AS (Authentication Server): 认证服务器
TGS(Ticket Granting Server): 许可证服务器
TGT:Ticket-granting Ticket
5. kerberos认证过程:
6. 集群启用Kerberos认证
装KDC Server
1. 安装一个新的KDC Server(任意一个集群主机,这里hdp141为例)
# yum install krb5-server krb5-libs krb5-workstation
2. 打开KDC Server的配置文件
# vi /etc/krb5.conf
修改文件中的[realms]部分,将为属性kdc和admin_server设置的默认值“kerberos.example.com”替换成实际KDC server的主机名。在下面的例子中,“kerberos.example.com”被替换成了 “my.kdc.server”。
[realms] EXAMPLE.COM = { kdc = my.kdc.server admin_server = my.kdc.server }
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。
# kdb5_util create -s Loading random data Initializing database '/var/kerberos/krb5kdc/principal' for realm 'CESHI.COM', master key name 'K/M@CESHI.COM' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key: ceshi123456. Re-enter KDC database master key to verify: ceshi123456.
5.启动KDC
# service krb5kdc start # chkconfig krb5kdc on # service kadmin start # chkconfig kadmin on
6.建立kerberos Admin
经过建立一个admin principal建立KDC admin,须要输入principal的密码。
# kadmin.local -q "addprinc admin/admin" Authenticating as principal root/admin@CESHI.COM.COM with password. WARNING: no policy specified for admin/admin@CESHI.COM.COM; defaulting to no policy Enter password for principal "admin/admin@CESHI.COM.COM": ceshi123456. Re-enter password for principal "admin/admin@CESHI.COM.COM": ceshi123456. Principal "admin/admin@CESHI.COM" created. "admin/admin@CESHI.COM":ceshi123456.
打开KDC ACL文件,确认admin principal在KDC ACL中拥有权限,若没有对应的域则须要添加。
# vi /var/kerberos/krb5kdc/kadm5.acl */admin@VRV.COM *
若是修改了文件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为自定义名)
# kadmin.local -q "addprinc -randkey ambari-server@CESHI.COM
2. 为此principal生成一个Keytab
# kadmin.local -q "xst -k ambari.server.keytab ambari-server@CESHI.COM"
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(后面介绍)管理权限。
列出全部用户
# kadmin.local #在kdc服务器上执行 kadmin.local: listprincs #//列出全部用户 ambari-server@CESHI.COM ................. nn/hdp140@CESHI.COM zookeeper/hdp142@CESHI.COM zookeeper/hdp143@CESHI.COM
建立测试用户
kadmin.local: addprinc test Enter password for principal "test@CESHI.COM": ceshi123456. Re-enter password for principal "test@CESHI.COM": ceshi123456. Principal "test@CESHI.COM" created.
登陆验证
# kinit test #登录
ceshi123456.
退出登录状态
注销:kdestroy
集群登陆与受权(hdfs用户)
未使用kerberos用户认证前执行
# hadoop dfs -ls /
使用kerberos用户认证
# kinit test #登录 Password for test@CESHI.com #ceshi123456. # hadoop dfs -ls /
此时test用户默认有查看权限,无目录受权
换到hdfs用户下,初始化hdfs
查看hdfs的Kerberos用户名
# klist -k /etc/security/keytabs/hdfs.headless.keytab Keytab name: FILE:hdfs.headless.keytab KVNO Principal ---- -------------------------------------------------------------------------- 1 hdfs-test@CESHI.COM 1 hdfs-test@CESHI.COM 1 hdfs-test@CESHI.COM 1 hdfs-test@CESHI.COM 1 hdfs-test@CESHI.COM 初始化认证hdfs用户 # kinit -k hdfs-test@CESHI.COM -t /etc/security/keytabs/hdfs.headless.keytab 建立目录:hadoop fs -mkdir /test 查看目录属性:
改变目录属性:hadoop fs -chown test:hdfs /test
使用test用户登陆
修改密码和从新生成
#修改密码命令cpw test(KDC server上执行) # kadmin.local Authenticating as principal test/admin@CESHI.COM with password. kadmin.local: cpw test Enter password for principal "test1@CESHI.COM": ceshi123 Re-enter password for principal "test1@CESHI.COM": ceshi123 change_password: Principal does not exist while changing password for "test@CESHI.COM". kadmin.local: exit
生成新的多用户使用keytab文件
建立keytab文件(生成到当前文件夹下)
案例:将hive和hdfs的keytab集成到同一个keytab文件中
1. 查看全部princs
# kadmin.local Kadmin.local: listprincs hbase/hdp143@CESHI.COM" hdfs-vrvtest@CESHI.COM" hive/hdp140@CESHI.COM"
2. 添加hdfs的princs的keytab到hdfs-hive.keytab
# kadmin.local Kadmin.local: xst -norandkey -k hdfs-hive.keytab hdfs-vrvtest@CESHI.COM
3. 添加hive的princs的keytab到hdfs-hive.keytab
# kadmin.local Kadmin.local: xst -norandkey -k hdfs-hive.keytab hive/hdp140@CESHI.COM
查看生成的hdfs-hive.keytab
使用生成的Keytab文件登陆
# kinit -k -t hdfs-hive.keytab hive/hdp140@CESHI.COM
修改租期
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.手动修改用户租期时间
#查看租期时间 可在kadmin命令行下用getprinc命令查看默认的最大时长,不然时长被限制在24小时,而且没法renew) # kadmin.local kadmin.local:getprinc hive/hdp141 Principal: hive/hdp141@CESHI Expiration date: [never] Last password change: Mon Dec 18 05:56:57 EST 2017 Password expiration date: [none] Maximum ticket life: 1 day 00:00:00 #租期时间 Maximum renewable life: 0 days 00:00:00 #从新续租时间 Last modified: Mon Dec 18 05:56:57 EST 2017 (admin/admin@VRV.COM) Last successful authentication: [never] Last failed authentication: [never] Failed password attempts: 0 Number of keys: 8 Key: vno 1, aes256-cts-hmac-sha1-96 Key: vno 1, aes128-cts-hmac-sha1-96 Key: vno 1, des3-cbc-sha1 Key: vno 1, arcfour-hmac Key: vno 1, camellia256-cts-cmac Key: vno 1, camellia128-cts-cmac Key: vno 1, des-hmac-sha1 Key: vno 1, des-cbc-md5 #更改租期时间命令(用户使用真实用户替换) modprinc -maxrenewlife 300days 用户 modprinc -maxlife 300days 用户
#应用例子
modprinc -maxrenewlife 300days hive/hdp141@CESHI.com
modprinc -maxlife 300days hive/hdp141@CESHI.COM
退出后,从新启动
# 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
# klist -k spark.headless.keytab Keytab name: FILE:spark.headless.keytab KVNO Principal ---- -------------------------------------------------------------------------- 1 spark-test@CESHI.COM 1 spark-test@CESHI.COM 1 spark-test@CESHI.COM 1 spark-test@CESHI.COM 1 spark-test@CESHI.COM # kinit -k spark-vrvtest@VRV.COM -t spark.headless.keytab #指定spark用户 [root@hdp140 keytabs]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: spark-vrvtest@VRV.COM Valid starting Expires Service principal 10/31/2017 01:08:56 11/01/2017 01:08:56 krbtgt/VRV.COM@VRV.COM
上传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:
Received Exception while testing connectivity to the KDC: Algorithm AES256 not enabled **** Host: hdp261:88 (TCP) java.lang.IllegalArgumentException: Algorithm AES256 not enabled at sun.security.krb5.EncryptionKey.<init>(EncryptionKey.java:286) at javax.security.auth.kerberos.KeyImpl.<init>(KeyImpl.java
解决:
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:
org.apache.hadoop.security.authentication.client.AuthenticationException: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
解决:
# kinit guest Password for guest@CESHI.COM: ceshi123456. # klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: guest@CESHI.COM Valid starting Expires Service principal 11/28/2017 18:30:48 11/29/2017 18:30:48 krbtgt/CESHI.COM@CESHI.COM 11/28/2017 18:31:09 11/29/2017 18:30:48 HTTP/hdp140@ 11/28/2017 18:31:09 11/29/2017 18:30:48 HTTP/hdp140@CESHI.COM
参考:
http://blog.csdn.net/wulantian/article/details/42418231
http://book.51cto.com/art/200907/140533.htm
实战到此结束。
总结:
1. Hadoop集群节点数多,配置和维护一个使用kerberos系统高性能,稳定的hadoop集群难度很是高。
2. Hadoop中的hdfs是一个文件系统,用户的认证和受权比较复杂,难度不低于linux系统的用户和组管理。
加上kerberos后,用户和用户组的管理更加复杂,一般一个合适的用户不能访问hdfs上的文件。
3. Hadoop加上kerberos后,一般原来的用户和文件,可能都失效致使数据流失。
后续专栏主题将持续更新
大数据安全运维实战宝典
专题名称 |
大数据安全运维实战宝典 |
内容占比 |
理论/实战=1/9 |
|
做者介绍 |
陈浩,多年大数据平台安全及运维实践经验,对大数据组件调优有着很深的看法。 51cto版主及51cto推荐博主 |
|||
适应人群 |
1. 对于基础运维转大数据运维的同窗 2. 对大数据感兴趣的同窗 3. 大数据研发工程师 |
|||
专栏介绍 |
大数据的热度在持续的升温,继云计算以后大数据成为又一大众所追捧的新星。数据的确是公司最最重要的核心资产。随着业务的迅速发展,交易数据呈几何级增长,随之而来的是系统的不堪重负。业务部门、领导、甚至是集团老总成天嚷嚷的要报表、要分析、要提高竞争力。而研发部门能作的惟一事情就是执行一条一条复杂到本身都不可思议的SQL语句,紧接着系统开始罢工,内存溢出,宕机........简直就是噩梦。OMG!please release me!!! 俗话说,工欲善其事,必先利其器。 本专栏内容从大数据运维角度出发,指导安装大数据平台,组件调优及默认配置修改去解决内存溢出,服务器宕机,kudu超时等业务没法处理的问题。 专栏内容架构分为: 总共分为20篇文章,其中1篇理论介绍大数据平台,12篇CDH实践,7篇ambari实践。 1. CDH基础入门(1篇)+性能调优(4篇)+安全实战(7篇) 2. Ambari基础入门(1篇)+性能调优(1篇)+安全实战(5篇) |
|||
学习收获 |
1.理论上对知识点理解更加深刻,实战案例让咱们清楚知道这些知识点如何使用 3.大数据调优简单易懂结合生产环境场景介绍 |
|||
专栏大纲 |
||||
序号 |
章节名称 |
|||
1 |
大数据平台是什么?为何要安装大数据平台? |
|||
CDH篇 |
||||
2 |
(入门)大数据平台CDH基础组件安装和部署 |
|||
3 |
(性能压测)数据仓库之kudu性能测试及分析实战 |
|||
4 |
(调优篇)Spark job failed because of out of memory.如何救急!!! |
|||
5 |
(调优篇)时常爆出 kudu-rpc 超时和 kudu 写入延时及解决方法 |
|||
6 |
(调优篇)告别“Memorylimit exceeded”——Impala内存优化 |
|||
7 |
(安全篇)CDH构建大数据平台-使用sentry进行权限把控! |
|||
8 |
(安全篇)CDH构建大数据平台-集群用户的管理与视图化权限分配 |
|||
9 |
(安全篇)CDH构建大数据平台-高可用案例实操 (hdfs,hive,impala,sentry,hue,kudu,yarn,zookeeper) |
|||
10 |
(资源篇)使用Yarn按各bu线进行资源队列划分管理实战 |
|||
11 |
(监控篇)impala实时监控,python脚本清除session和过时任务 |
|||
12 |
(监控篇)kudu演示如何传递impala-sql查询出结果组装成本身想要的告警信息,发送到钉钉(可用于日报,钉钉告警功能) |
|||
13 |
(实战) StreamSets实现MySQL中变化数据实时写入Kudu? |
|||
Ambari篇 |
||||
14 |
(入门篇)大数据平台ambari平台一键部署?So easy! |
|||
15 |
(性能压测篇)Hadoop分布式文件系统性能测试及分析 |
|||
16 |
(安全篇)大数据平台安全利器kerberos? |
|||
17 |
(安全篇)ambari构建大数据平台-如何开启权限认证? |
|||
18 |
(安全篇)ambari构建大数据平台-kerberos使用knos网关? |
|||
19 |
(安全篇)ambari构建大数据平台-kerberos sso如何作单点登录? |
|||
20 |
(资源篇)大数据集群多用户数据资源隔离管理实战 |