OpenLDAP服務器的搭建(Centos7)
1.安裝OpenLDAP的相關軟件包
# yum -y install openldap openldap-servers openldap-clients openldap-devel compat-openldap
2.安裝完后,可以看到自動創建了ldap用戶
# tail -n 1 /etc/passwd
3.OpenLDAP的相關配置文件信息
/etc/openldap/slapd.d/*:這下面是/etc/openldap/slapd.conf配置信息生成的文件,每修改一次配置信息,這里的東西就要重新生成
/etc/openldap/schema/*:OpenLDAP的schema存放的地方
/var/lib/ldap/*:OpenLDAP的數據文件
/usr/share/openldap-servers/DB_CONFIG.example 模板數據庫配置文件
OpenLDAP監聽的端口:
默認監聽端口:389(明文數據傳輸)
加密監聽端口:636(密文數據傳輸)
4.初始化OpenLDAP的配置
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG #
DB_CONIFG中主要是關於模板的相關的一些配置# chown ldap:ldap /var/lib/ldap/DB_CONFIG
5.啟動OpenLDAP服務
#systemctl start slapd #systemctl enable slapd #systemctl status slapd
6.為OpenLDAP生成管理用戶密碼
# slappasswd -s 123456
執行完該命令之后,請輸入您要設定的密碼。然后會生成
{SSHA}xxxxx這樣一行東西,請把它記下來。
7.新建一個rootpwd.ldif(名稱是自定義的)的文件
#vi rootpwd.ldifTGuSn8kPjUCZVDZ5RHI0X7vTPT/gzg9m
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}ldif即LDAP Data Interchange Format,是LDAP中數據交換的一種文件格式。文件內容采用的是key-value形式,注意value后面不能有空格。
其實這是在修改數據庫的信息,數據庫的配置在/etc/openldap/slapd.d/cn=config文件夾下。
通過命令將配置在線覆蓋進數據庫里。
ldapadd -Y EXTERNAL -H ldapi:/// -f rootpwd.ldif
- 上面內容中dn即distingush name
- olc即Online Configuration,表示寫入LDAP后不需要重啟即可生效
- changetype: modify表示修改一個entry,changetype的值可以是add,delete, modify等。
- add: olcRootPW表示對這個entry新增了一個olcRootPW的屬性
- olcRootPW: {SSHA}lQLBaMp1TfneyzfhAytmhKeJ6gpEBTcd指定了屬性值
8.使用ldapadd命令將上面的rootpwd.ldif文件寫入LDAP
# ldapadd -Y EXTERNAL -H ldapi:/// -f rootpwd.ldif
============================================================= 溫馨提示: 如果上面的命令出現下面報錯:
[root@openldap-master opt]# ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
ldap_modify: Inappropriate matching (18)
additional info: modify/add: olcRootPW: no equality matching rule
解決辦法: 修改modify.ldif中對應選項的"add"為"replace"即可
即:
root@openldap-master opt]# cat chrootpw.ldif
# specify the password generated above for "olcRootPW" section
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}ago8nKNyfjhYa/btKgHDIpyEPxSBZrMm
然后再次執行:
[root@openldap-master opt]# ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
=============================================================
9.導入schema
向 LDAP 中導入一些基本的 Schema預設模式。這些 Schema 文件位於 /etc/openldap/schema/ 目錄中,定義了我們以后創建的條目可以使用哪些屬性,這里先全部導入。
# 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
======================================================== 溫馨提示: 如果上面的命令出現下面報錯:
-
......
-
ldap_add: Other (e.g., implementation specific) error (80)
-
additional info: olcAttributeTypes: Duplicate attributeType: "2.16.840.1.113730.3.1.1"
原因是: LDIF已經加載,所以嘗試再次加載它們就報錯這些信息,忽略這個步驟即可。
=======================================================
10.設定默認域,新建一個根節點
我們需要配置 LDAP 的頂級域及其管理域
(1)先使用slappasswd生成一個密碼
根節點管理員密碼與 OpenLDAP 管理員密碼不是同一回事!一個 LDAP 數據庫可以包含多個目錄樹。
# slappasswd -s 123456
(2)新建一個domain.ldif的文件
首先請想好一個域名。比如我使用的是sj.com
# vi domain.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=Manager,dc=sj,dc=com" read by * nonedn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=sj,dc=comdn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=sj,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}SyMIWAc/bUF0f30GsaNKKHRjvJd4l/3M
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=Manager,dc=sj,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=sj,dc=com" write by * read-----------------------------
olcAccess即access,該key用於指定目錄的ACL即誰有什么權限可以存取什么olcRootDN設定管理員root用戶的distingush name- 注意替換上面文件內容中cn為具體的域信息
- olcRootPW用上面新生成的密碼替換
------------------------------
(3)執行LDIF文件,寫入LDAP
# ldapmodify -Y EXTERNAL -H ldapi:/// -f domain.ldif
============================================================= 溫馨提示: 如果上面的命令出現下面報錯: .......
-
.......
-
ldap_modify: Inappropriate matching (18)
-
additional info: modify/add: olcRootPW: no equality matching rule
解決辦法:將chdomain.ldif文件中的"add"全部替換成"replace",然后重新執行上面命令即可!
============================================================
11.添加基本目錄
參看上圖。我們在上述基礎上,我們來創建一個叫做 sj com 的組織,也就是創建是上圖的第一層。接下來需要創建第二層,一個 Manager 的組織角色(該角色內的用戶具有管理整個 LDAP 的權限)和 People 和 Group 兩個組織單元:
# vi basedomain.ldif
dn: dc=sj,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: com
dc: sjdn: cn=Manager,dc=sj,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Managerdn: ou=People,dc=sj,dc=com
objectClass: organizationalUnit
ou: Peopledn: ou=Group,dc=sj,dc=com
objectClass: organizationalUnit
ou: Group---------------------------------------
- 注意替換上面文件內容中dn為具體的域信息
- 理解dn,cn,dc
- DC即Domain Component,LDAP目錄類似文件系統目錄
dc=sj,dc=com相當於/com/sj- CN即Common Name,CN有可能代表一個用戶名,例如
cn=Manager,dc=sj,dc=com表示在/com/sj域下的管理員用戶Manager- OU即Organizational Unit,例如
ou=People,dc=sj,dc=com表示在/com/sj域下的一個組織單元People
---------------------------------執行LDIF文件,寫入LDAP
# ldapadd -x -D cn=Manager,dc=sj,dc=com -W -f basedomain.ldif
然后需要輸入步驟10 設定的根節點管理員密碼123456
通過以上的所有步驟,我們就設置好了一個 LDAP 目錄樹:其中基准 dn dc=sj,dc=com 是該樹的根節點,其下有一個管理域 cn=Manager,dc=sj,dc=com和兩個組織單元 ou=People,dc=sj,dc=org 及 ou=Group,dc=sj,dc=org。
OpenLDAP客戶端的測試(Centos7)
服務端添加用戶
(1) 使用ldapadmin添加賬號,如下可參考
(2) 服務器查看賬號
#ldapsearch -x cn=test -b dc=sj,dc=com
客戶端上配置
(1)在客戶端上安裝必要的LDAP包#yum install -y openldap-clients nss-pam-ldapd(2)執行下面的命令,將客戶端添加到LDAP服務器以進行單點登錄。服務器地址使用LDAP服務器的IP地址或主機名。# authconfig --enableldap --enableldapauth --ldapserver=127.0.0.1 --ldapbasedn="dc=sj,dc=com" --enablemkhomedir --update (3)重啟nslcd服務# systemctl restart nslcd
(4)在客戶端上驗證登錄 客戶端使用LDAP域賬號“test”可以正常登錄











