设为首页 收藏本站
查看: 1329|回复: 0

[经验分享] 详解Linux运维工程师高级篇(大数据安全方向)

[复制链接]

尚未签到

发表于 2019-1-29 12:30:17 | 显示全部楼层 |阅读模式
详解linux运维工程师高级篇(大数据安全方向)

  hadoop安全目录:

  •   kerberos(已发布)
  •   elasticsearch(已发布)http://blog.运维网.com/chenhao6/2113873
  •   knox
  •   oozie
  •   ranger
  •   apache sentry

  

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

  初级篇:详解Linux运维工程师入门必备技能(青铜)
  
  中级篇:详解Linux运维工程师打怪升级篇(白银)
  

  现在给大家介绍大数据安全的正式面目:
  1.大数据基本组件



  2. Hadoop安全背景
   共享集群
   按照业务或应用的规则划分资源队列,并分配给
  特定用户
   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.确认你的配置。你可以通过页面下载自动创建的包含principalsKeytabsCSV文件。
   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.(EncryptionKey.java:286)
at javax.security.auth.kerberos.KeyImpl.(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.运维网.com/art/200907/140533.htm

  实战到此结束。后续再更新elasticsearcn安全实战。
  
  总结:
  1. Hadoop集群节点数多,配置和维护一个使用kerberos系统高性能,稳定的hadoop集群难度非常高。
  2. Hadoop中的hdfs是一个文件系统,用户的认证和授权比较复杂,难度不低于linux系统的用户和组管理。
  加上kerberos后,用户和用户组的管理更加复杂,通常一个合适的用户不能访问hdfs上的文件。
  3. Hadoop加上kerberos后,通常原来的用户和文件,可能都失效导致数据流失。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-669173-1-1.html 上篇帖子: 升级Kibana到3.0 下篇帖子: 在CentOS7下实现Elastic Stack 数据分析系统的部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表