快速搭建 LDAP 服務(wù)器與Hive集成

快速搭建 LDAP 服務(wù)器與Hive集成

1 前言

LDAP (Lightweight Directory Access Protocol) 是輕型目錄訪問協(xié)議,以目錄形式存儲信息(基于目錄的數(shù)據(jù)庫),具有良好的讀性能。

本文的目的是幫助你快速搭建 LDAP 服務(wù)器。

本文所使用的服務(wù)器是 centos7

2 關(guān)閉防火墻

首先使用systemctl status firewalld確認(rèn)防火墻是否打開,如過打開,則關(guān)閉:

systemctl stop firewalld
systemctl disable firewalld

3 安裝 OpenLDAP 組件

yum install -y openldap openldap-servers openldap-clients openldap-devel compat-openldap migrationtools

4 修改LDAP配置

這里就是重點中的重點了,從openldap2.4.23版本開始,所有配置都保存在/etc/openldap/slapd.d目錄下的cn=config文件夾內(nèi),不再使用slapd.conf作為配置文件。配置文件的后綴為 ldif,且每個配置文件都是通過命令自動生成的,任意打開一個配置文件,在開頭都會有一行注釋,說明此為自動生成的文件,請勿編輯,使用ldapmodify命令進行修改

安裝openldap后,會有三個命令用于修改配置文件,分別為ldapadd, ldapmodify, ldapdelete,顧名思義就是添加,修改和刪除。而需要修改或增加配置時,則需要先寫一個ldif后綴的配置文件,然后通過命令將寫的配置更新到slapd.d目錄下的配置文件中去。

總而言之:/etc/openldap/slapd.d 下的文件不能手動添加、修改和刪除。

4.1 生成管理員密碼

$ slappasswd -s 123456
{SSHA}ifcLacR1RubRTM5P7Ox+UlMMV+7GQFAy

4.2 復(fù)制配置模板

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

4.3 生成數(shù)據(jù)庫文件

使用如下命令生成數(shù)據(jù)庫文件,不必?fù)?dān)心報錯信息。

$ slaptest
5fcef848 hdb_db_open: database "dc=my-domain,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
5fcef848 backend_startup_one (type=hdb, suffix="dc=my-domain,dc=com"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)

4.4 修改 LDAP 數(shù)據(jù)庫所屬用戶與組

OpenLDAP有一個主要用戶,它被稱為“rootdn(Root Distinguished Name)”,這個用戶已經(jīng)在應(yīng)用中被寫死,不可更改。

chown ldap:ldap /var/lib/ldap/*

4.5 SElinux配置

$ setsebool -P httpd_can_connect_ldap on
$ getsebool httpd_can_connect_ldap
httpd_can_connect_ldap --> on

或者使用命令getenforce查看結(jié)果是否為Disabled,若不是,則關(guān)閉 Selinux:

  • 臨時的生效:執(zhí)行setenforce 0;
  • 永久生效:修改配置文件/etc/sysconfig/selinux,把SELINUX=disabled,然后重啟 。

4.6 啟動 LDAP 進程 slapd

OpenLDAP 軟件安裝完成后,要使用它,需要啟動 slapd 進程來調(diào)用程序:

$ systemctl start slapd
$ systemctl enable slapd

4.7 新增修改密碼文件

ldif為后綴,文件名隨意,不要在/etc/openldap/slapd.d/目錄下創(chuàng)建類似文件

生成的文件為需要通過命令去動態(tài)修改ldap現(xiàn)有配置,如下,在家目錄下,創(chuàng)建文件

$ mkdir ~/ldap
$ cd ldap
$ vim changepwd.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}ifcLacR1RubRTM5P7Ox+UlMMV+7GQFAy

注意:olcRootPW的值來自于章節(jié)“4.1 生成管理員密碼

文件內(nèi)容說明:

  1. 第一行執(zhí)行配置文件,這里就表示指定為 cn=config/olcDatabase={0}config 文件。你到/etc/openldap/slapd.d/目錄下就能找到此文件
  2. 第二行 changetype 指定類型為修改
  3. 第三行 add 表示添加 olcRootPW 配置項
  4. 第四行指定 olcRootPW 配置項的值

在執(zhí)行下面的命令前,你可以先查看原本的/etc/openldap/slapd.d/cn\=config/olcDatabase\=\{0\}config.ldif文件,里面是沒有olcRootPW這個項的,執(zhí)行命令后,你再看就會新增了olcRootPW項,而且內(nèi)容是我們文件中指定的值加密后的字符串

4.8 執(zhí)行命令修改ldap配置

ldapadd -Y EXTERNAL -H ldapi:/// -f ~/ldap/changepwd.ldif

查看olcDatabase={0}config內(nèi)容,新增了一個olcRootPW項。

olcRootPW:: e1NTSEF9d1JMbnEzWDhGTWVQekZkZFp6S3JQTU5mMmVHWEhTTTU=

上面就是一個完整的修改配置的過程,再次重申不要直接修改/etc/openldap/slapd.d/目錄下的配置。

4.9 LDAP中導(dǎo)入基本的 Schema

需要向 LDAP 中導(dǎo)入一些基本的 Schema。這些 Schema 文件位于 /etc/openldap/schema/ 目錄中,schema控制著條目擁有哪些對象類和屬性,可以自行選擇需要的進行導(dǎo)入, 依次執(zhí)行下面的命令,導(dǎo)入基礎(chǔ)的一些配置,這里將所有的都導(dǎo)入一下,其中core.ldif是默認(rèn)已經(jīng)加載了的,不用導(dǎo)入。

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif

4.10 修改域名

新增changedomain.ldif, 這里我自定義的域名為fengxc.com,管理員用戶賬號為admin。

如果要修改,則修改文件中相應(yīng)的dc=fengxc,dc=com為自己的域名

$ vim /etc/openldap/changedomain.ldif

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=fengxc,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=fengxc,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=fengxc,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}fLe3LLnKYQYG+DQzViYr1Hyb04+7Pt6u

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=fengxc,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=fengxc,dc=com" write by * read

執(zhí)行命令,修改配置。

$ ldapmodify -Y EXTERNAL -H ldapi:/// -f ~/ldap/changedomain.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config" 

modifying entry "olcDatabase={2}hdb,cn=config" 

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

4.11 啟用memberof功能

新增add-memberof.ldif, 開啟memberof支持并新增用戶支持memberof配置

$ vim ~/ldap/add-memberof.ldif 

dn: cn=module{0},cn=config
cn: modulle{0}
objectClass: olcModuleList
objectclass: top
olcModuleload: memberof.la
olcModulePath: /usr/lib64/openldap

dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf

新增refint1.ldif文件

$ vim ~/ldap/refint1.ldif

dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint

新增refint2.ldif文件

$ vim ~/ldap/refint2.ldif

dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof uniqueMember  manager owner

依次執(zhí)行下面命令,加載配置,順序不能錯

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f ~/ldap/add-memberof.ldif
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f ~/ldap/refint1.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f ~/ldap/refint2.ldif

4.12 創(chuàng)建組織角色

到此,配置修改完了,在上述基礎(chǔ)上,創(chuàng)建一個叫做 “fengxc company” 的組織,并在其下創(chuàng)建一個 “admin” 的組織角色(該組織角色內(nèi)的用戶具有管理整個 LDAP 的權(quán)限)和 “People” 和 “Group” 兩個組織單元:

vim ~/ldap/base.ldif

dn: dc=fengxc,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: fengxc Company
dc: fengxc

dn: cn=admin,dc=fengxc,dc=com
objectClass: organizationalRole
cn: admin

dn: ou=People,dc=fengxc,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=fengxc,dc=com
objectClass: organizationalRole
cn: Group

說明:

執(zhí)行命令,添加配置, 這里要注意修改域名為自己配置的域名,然后需要輸入上面我們生成的密碼

ldapadd -x -D cn=admin,dc=fengxc,dc=com -W -f ~/ldap/base.ldif

通過以上的所有步驟,我們就設(shè)置好了一個 LDAP 目錄樹:其中基準(zhǔn) “dc=fengxc,dc=com” 是該樹的根節(jié)點,其下有一個管理域 “cn=admin,dc=fengxc,dc=com” 和兩個組織單元 “ou=People,dc=fengxc,dc=com” 及 “ou=Group,dc=fengxc,dc=com”。

5 安裝啟動phpldapadmin

yum remove php*
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum localinstall http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install php70w
yum install php70w-fpm
yum install php70w-ldap
yum install phpldapadmin
yum install nginx

5.1 修改配置用DN登錄ldap

vim /etc/phpldapadmin/config.php

# 398行,默認(rèn)是使用uid進行登錄,我這里改為cn,也就是用戶名
$servers->setValue('login','attr','cn');

# 460行,關(guān)閉匿名登錄,否則任何人都可以直接匿名登錄查看所有人的信息
$servers->setValue('login','anon_bind',false);

5.2 Nginx配置添加對phpldapadmin的反向代理

location /htdocs {
    alias /usr/share/phpldapadmin/htdocs;
    index index.php;
    location ~ \.php$ {
        alias /usr/share/phpldapadmin;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

5.3 啟動 php-fpm

systemctl start php-fpm
systemctl enable php-fpm

5.4 啟動nginx

systemctl start nginx
systemctl enable nginx

5.5 登錄 phpLDAPadmin

646fe2ab15507450090a952bfa35b471
124685a33df4fab5294a28ded8374b57.png

6 使用migrationtools 創(chuàng)建用戶

詳見章節(jié)2.3

很好,到這一步你已經(jīng)成功一半了,再接再厲!

回歸正文,本章重點是如何創(chuàng)建LDAP用戶。

migrationtools 這個工具我們之前已經(jīng)安裝好了。如果沒有安裝可以通過yum安裝。

6.1 修改migrate_common.ph文件

# vim /usr/share/migrationtools/migrate_common.ph
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "fengxc.com";

# Default base 
$DEFAULT_BASE = "dc=fengxc,dc=com";

6.2 利用pl腳本將/etc/passwd 和/etc/group生成LDAP能讀懂的文件格式

使用一個linux普通用戶來測試。

$ useradd test
$ cat /etc/passwd | grep test > /tmp/passwd
$ cat /etcgroup | grep test > /tmp/group
$ /usr/share/migrationtools/migrate_base.pl > /tmp/base.ldif  
$ /usr/share/migrationtools/migrate_passwd.pl  /tmp/passwd > /tmp/passwd.ldif  
$ /usr/share/migrationtools/migrate_group.pl  /tmp/group > /tmp/group.ldif

6.3 將文件導(dǎo)入LDAP

$ ldapadd -x -D "cn=admin,dc=fengxc,dc=com" -W -f /tmp/base.ldif 
$ ldapadd -x -D "cn=admin,dc=fengxc,dc=com" -W -f /tmp/passwd.ldif 
$ ldapadd -x -D "cn=admin,dc=fengxc,dc=com" -W -f /tmp/group.ldif

6.4 設(shè)置密碼

登錄phpLDAPadmin,定位到test賬號,如下圖中的 uid=test。

設(shè)置密碼1

點擊“賦值”

設(shè)置密碼2

輸入密碼,點擊“Check password”可以驗證輸入密碼。

設(shè)置密碼3

7 Hive配置LDAP

在 hive-site.xml 中配置添加以下配置

  <!-- hive server2 LDAP認(rèn)證模式 配置 -->
  <property>
    <name>hive.server2.authentication</name>
    <value>LDAP</value>
    <description>客戶端身份認(rèn)證方式</description>
  </property>
  <property>
    <name>hive.server2.authentication.ldap.url</name>
    <value>ldap://centos3</value>
    <description>LDAP Url</description>
  </property>
  <property>
    <name>hive.server2.authentication.ldap.baseDN</name>
    <value>ou=People,dc=fengxc,dc=com</value>
    <description>LDAP搜索的baseDN</description>
  </property>

8 驗證

8.1 啟動HiveServer2

$ $HIVE_HOME/bin/hiveserver2

8.2 啟動 LDAP

$ systemctl start slapd

8.1 使用Beeline驗證

用于驗證連接的用戶名和密碼來源于章節(jié)6

8.1.1 輸入正確的用戶名和密碼

47a0ff930730be5eaec55fe10bbb0601

輸入正確的用戶名和密碼連接成功。

8.1.1 輸入錯誤的用戶名和密碼

045f1ff1be5fce54d4d3d3330ac4d9d2

輸入錯誤的用戶名和密碼連接失敗。

8.2 使用SpringBoot驗證

8.2.1 Maven 依賴

測試Java程序能否連接上hive,下面3個依賴是關(guān)鍵。

<!-- mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>
<!-- druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.23</version>
</dependency>
<!-- hive-jdbc -->
<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-jdbc</artifactId>
    <version>2.3.7</version>
    <exclusions>
        <exclusion>
            <groupId>org.eclipse.jetty.aggregate</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

8.2.2 application.yml中配置錯誤的密碼

在配置文件中,下面的這些配置是spring boot 應(yīng)用連上hive的關(guān)鍵配置,故意輸入錯誤的密碼。

spring:
  datasource:
    url: jdbc:hive2://localhost:10000/airline
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.apache.hive.jdbc.HiveDriver
    username: test
    password: 654321

驗證結(jié)果如下圖所示:

03acf6a21d86363ee999b436569a0a6f

程序啟動失敗,錯誤提示為“create connection SQLException, url: jdbc:hive2://localhost:10000/airline, errorCode 0, state 08S01”

8.2.3 application.yml中配置正確的密碼

在配置文件中,下面的這些配置是spring boot 應(yīng)用連上hive的關(guān)鍵配置,輸入正確的密碼。

spring:
  datasource:
    url: jdbc:hive2://localhost:10000/airline
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.apache.hive.jdbc.HiveDriver
    username: test
    password: 123456

驗證結(jié)果如下圖所示:

8297adec35229e9205ed64a790ab935d

程序正常運行。

至此,本文結(jié)束。

參考資源

LDAP 中 CN, OU, DC 的含義

LDAP數(shù)據(jù)模型定義

LDAP系列(1):快速搭建 LDAP 服務(wù)器

CentOS7采用yum方式安裝PHP7

如何在OpenLDAP服務(wù)器上更改帳戶密碼

hive、impala集成ldap

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容