diff --git a/cdh/CDH部署Kerberos.md b/cdh/CDH部署Kerberos.md new file mode 100644 index 0000000..3f989ba --- /dev/null +++ b/cdh/CDH部署Kerberos.md @@ -0,0 +1,300 @@ +# CDH部署 + +## Kerberos部署 + +### 系统环境 + +- Centos7.7 + +### CDH版本 + +- 6.3.2 + +### 部署用户权限 + +- root权限 + +### KDC服务安装及配置 + +#### 在Cloudera Manager服务器上安装KDC服务 + +```bash +yum install krb5-server krb5-libs krb5-auth-dialog krb5-workstation openldap-clients -y +``` + +- 会生成/etc/krb5.conf、/var/kerberos/krb5kdc/kadm5.acl、/var/kerberos/krb5kdc/kdc.conf三个文件。 + +#### 修改/etc/krb5.conf配置 + +```bash\ +vi /etc/krb5.conf +``` + +- 配置文件内容 + +```bash +# Configuration snippets may be placed in this directory as well +includedir /etc/krb5.conf.d/ + +[logging] +default = FILE:/var/log/krb5libs.log +kdc = FILE:/var/log/krb5kdc.log +admin_server = FILE:/var/log/kadmind.log + +[libdefaults] +dns_lookup_realm = false +ticket_lifetime = 24h +renew_lifetime = 7d +forwardable = true +rdns = false +pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt +default_realm = A.COM +#default_ccache_name = KEYRING:persistent:%{uid} + +[realms] +A.COM = { +kdc = node-1 +admin_server = noe-1 +} + +[domain_realm] +.a.com = A.COM +a.com = A.COM +``` + +##### 配置参数 + +- default_realm: 默认realm,例如当我们使用kinit而不指定principal时使用的就是这里配置的默认realm + +- dns_lookup_realm:是否可以通过DNS查找使用什么样的realm + +- ticket_lifetime: 设定ticket的有效期 + +- forwardable: 用于指定ticket是否可以被转发,转发的含义是:如果一个用户已经有了一个TGT,当他登入到另一个远程系统,KDC会为他自动重新创建一个TGT,而不需要让用户重新进行身份认证。 + +- 然后是[realms]部分,这一部分会列出所有的realm,kdc和admin_server两个配置是在告诉客户端哪台服务器在运行KDC以及kadmin进程。这两项配置可以在服务器上追加端口,如果不指定,则使用默认端口,KDC是88,admin server是749. + +- 最后一部分[domain_realm]是配置DNS名称和Kerberos Realm映射的。 .http://a.com = A.COM是在说:所有在a.com域下的主机都会被映射到A.COM这个realm下,而a.com = A.COM是说a.com它自己也会映射到A.COM这个realm。 + + + +#### 修改/var/kerberos/krb5kdc/kadm5.acl配置 + +```bash +vi /var/kerberos/krb5kdc/kadm5.acl +``` + +```bash +*/admin@A.COM * +``` + +#### 修改/var/kerberos/krb5kdc/kdc.conf配置 + +```bash +vi /var/kerberos/krb5kdc/kdc.conf +``` + +```bash +[kdcdefaults] +kdc_ports = 88 +kdc_tcp_ports = 88 + +[realms] +A.COM = { +#master_key_type = aes256-cts +max_renewable_life= 7d 0h 0m 0s +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 +} + +``` + +#### 创建Kerberos数据库 + +```bash +kdb5_util create –r http://A.COM -s +``` + +- 密码 hadoop + +#### 创建Kerberos的管理账号 + +admin/admin@A.COM + +```bash +kadmin.local +addprinc admin/admin@A.COM +``` + +- 密码/账号 admin/admin@A.COM + +#### 将Kerberos服务添加到自启动服务,并启动krb5kdc和kadmin服务 + +```bash +systemctl enable krb5kdc +systemctl enable kadmin +systemctl start krb5kdc +systemctl start kadmin +``` + +#### 测试Kerberos的管理员账号 + +```bash +kinit admin/admin@A.COM +``` + +### 为集群安装所有Kerberos客户端,包括Cloudera Manager + +```bash +yum -y install krb5-libs krb5-workstation + +``` + +### 将KDC Server上的krb5.conf文件拷贝到所有Kerberos客户端 + +```bash +scp /etc/krb5.conf root@node-2:/etc/ +scp /etc/krb5.conf root@node-3:/etc/ +``` + +## CDH集群启用Kerberos + +### 在KDC中给Cloudera Manager添加管理员账号 + +cloudera-scm/admin@A.COM + +执行命令 + +```bash +kadmin.local +# 添加cloudera-scm 密码admin +addprinc cloudera-scm/admin +# 查询已有的用户 +list_principals +``` + +### 进入Cloudera Manager的“管理”->“安全”界面 + +- + + +# Kerberos 相关命令 + +## 生成kerberos密钥 + +- hdfs 账号生成秘钥 + +```bash +kadmin.local -q "xst -k /tmp/hdfs.keytab hdfs@A.COM -norandkey" +kadmin.local -q "xst -k /tmp/hdfs.keytab hdfs@A.COM" +#生成密钥文件之后,密码失效,不想密码失效,加 '-norandkey’参数 +ktadd -k /tmp/hdfs.keytab -norandkey hdfs@A.COM +# 或者执行上面的上面命令 +``` + +## 更新Kerberos票据credentials信息 + +```bash +# 票据过期,无法正常登录,执行命令 +kinit -R +``` + +## 测试Keytable是否可用 + +```bash +kinit -k -t /root/admin.keytab admin/admin@A.COM +kinit -k -t /tmp/admin.keytab admin/admin@A.COM +``` + +## 修改用户的密码 + +```bash +# 修改用户hdfs的密码为‘admin’ +kadmin.local -q "cpw -pw admin hdfs " +``` + +## 查询证书状态 + +```bash +# 获取hdfs@A.COM账号的信息 +getprinc hdfs@A.COM + + modprinc -maxlife 720days -maxrenewlife 1000days +allow_renewable krbtgt/A.COM +``` + +## 修改过期参数 + +### ticket lifetime + +```bash +ticket lifetime取决于以下5项设置中的最小值: +Kerberos server上/var/kerberos/krb5kdc/kdc.conf中max_life +内置principal krbtgt的maximum ticket life,可在kadmin命令行下用getprinc命令查看 +principal的maximum ticket life,可在kadmin命令行下用getprinc命令查看 +Kerberos client上/etc/krb5.conf的ticket_lifetime +kinit -l 参数后面指定的时间 +``` + + + +### ticket renew lifetime + +```bash +ticket renew lifetime取决于以下5项设置中的最小值: +Kerberos server上/var/kerberos/krb5kdc/kdc.conf中max_renewable_life +内置principal krbtgt的maximum renewable life,可在kadmin命令行下用getprinc命令查看 +你的principal的maximum renewable life,可在kadmin命令行下用getprinc命令查看 +Kerberos client上/etc/krb5.conf的renew_lifetime +kinit -r 参数后面指定的时间 +``` + + + +# hive的Ldap配置 + +## 无LDAP配置 + +```bash + + hive.server2.authentication + NONE + 客户端身份认证方式 + +``` + +## LDAP配置 + +``` xml + + hive.server2.authentication + LDAP + 客户端身份认证方式 + + + hive.server2.authentication.ldap.url + ldaps://ldap.yldev.net:636 + LDAP Url + + + hive.server2.authentication.ldap.baseDN + ou=project,dc=yldev,dc=net + LDAP搜索的baseDN + + +``` + +- hive的权限认证的方式 hive.server2.authentication + - **NONE**:不做认证; + - **LDAP**: 使用基于 LDAP/AD 的用户身份校验; + - **KERBEROS**: 使用 Kerberos/GSSAPI 做身份校验; +- LDAP认证的服务器URL:hive.server2.authentication.ldap.url + - 协议 + - 未做ssl的ldap协议 + - **ldap**://ldap.yldev.net + - ssl的ldaps协议 + - **ldaps**://ldap.yldev.net:636 +- baseDN 登录用户组 + - project用户组可以登录hive + - **ou=project**,dc=yldev,dc=net