前言
OpenLDAP 是 LDAP 協(xié)議的一個開源實現(xiàn)(Lightweight Directory Access Protocol戚丸,LDAP)膨桥。多用于集中式用戶身份信息管理和認(rèn)證服務(wù)竹揍。本篇講解OpenLDAP服務(wù)的安裝配置和使用恼五。
環(huán)境信息:
- CentOS 7
- OpenLDAP 2.4.44
安裝和配置OpenLDAP
安裝OpenLDAP
執(zhí)行下面命令安裝OpenLDAP:
yum install -y openldap openldap-clients openldap-servers
執(zhí)行完畢后openldap服務(wù)端和客戶端安裝完成镰矿。
配置OpenLDAP的管理員和密碼
和其他管理系統(tǒng)一樣径簿,OpenLDAP也需要設(shè)置一個管理員賬戶和密碼罢屈。
這里我們將管理員用戶配置為DN=cn=Manager,dc=paultech,dc=com
,密碼設(shè)置為admin
牍帚。
執(zhí)行:
[root@test ~]# slappasswd -s admin
{SSHA}EsELyIVzL20GOByTOsZcwg/Z92QObh4X
記下這串字符儡遮,接下來會用到。
修改/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
文件:
olcSuffix: dc=paultech,dc=com
olcRootDN: cn=Manager,dc=paultech,dc=com
olcRootPW: {SSHA}EsELyIVzL20GOByTOsZcwg/Z92QObh4X
這些配置項的含義為:
- olcSuffix: 前綴暗赶,一般為機器的域名。后面創(chuàng)建的所有對象都具有這個前綴肃叶。
- olcRootDN: 管理員DN蹂随。
- olcRootPW: 管理員密碼,使用前面
slappasswd
生成的字符串因惭。
然后修改/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif
文件:
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth" read by dn.base="cn=Manager,dc=paultech,dc=com" read by * none
第二個dn.base修改為管理員DN岳锁。
然后校驗配置文件:
[root@test cn=config]# slaptest -u
62f07254 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif"
62f07254 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif"
config file testing succeeded
這里顯示配置文件測試成功。Checksum error 可以忽略蹦魔。
啟動服務(wù)
執(zhí)行:
systemctl enable slapd
systemctl start slapd
systemctl status slapd
啟動slapd服務(wù)激率。
配置openldap數(shù)據(jù)庫
執(zhí)行:
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap -R /var/lib/ldap
chmod 700 -R /var/lib/ldap
導(dǎo)入基本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
也可以導(dǎo)入全部/etc/openldap/schema/
中的schema,命令和上面的類似勿决。
生成基礎(chǔ)目錄樹
由于沒有基礎(chǔ)目錄樹乒躺,LDAP系統(tǒng)到目前為止是無法使用的。需要使用命令將他們創(chuàng)建出來低缩。
創(chuàng)建一個base.ldif
文件嘉冒,內(nèi)容如下:
dn: dc=paultech,dc=com
dc: paultech
objectClass: top
objectClass: domain
dn: ou=people,dc=paultech,dc=com
ou: people
objectClass: top
objectClass: organizationalUnit
dn: ou=group,dc=paultech,dc=com
ou: group
objectClass: top
objectClass: organizationalUnit
然后執(zhí)行:
ldapadd -x -D "cn=Manager,dc=paultech,dc=com" -W -f base.ldif
將上面的目錄創(chuàng)建出來。
創(chuàng)建成功之后使用ldapsearch -x -LLL
查看創(chuàng)建出的目錄咆繁。
注意讳推,執(zhí)行命令可能會遇到如下輸出:
[root@paultech ~]# ldapsearch -x -LLL
No such object (32)
這種情況需要配置/etc/openldap/ldap.conf
文件,修改下面的內(nèi)容:
BASE dc=paultech,dc=com
URI ldap://paultech
- BASE修改為前面配置的
olcSuffix
玩般。 - URL修改為
ldap://{LDAP服務(wù)器的hostname或IP}
银觅。
然后重新執(zhí)行上面的命令。
使用migrationtools遷移系統(tǒng)用戶到LDAP服務(wù)
進行完上面步驟OpenLDAP安裝和部署已經(jīng)完成坏为,但是其中沒有用戶和組信息究驴∧餍鳎可以通過手工創(chuàng)建objectclass為posixAccount
或inetorgperson
條目代表用戶,創(chuàng)建objectclass為posixGroup
或者groupOfNames
代表分組纳胧。通過創(chuàng)建organizationalUnit
或organizationalRole
對條目劃分部門等镰吆。
還有一種用戶組信息的規(guī)劃方案,就是和操作系統(tǒng)的用戶體系保持同步跑慕。這就涉及到如何將操作系統(tǒng)用戶和組信息遷移到LDAP服務(wù)中万皿。本節(jié)主要講解使用migrationtools遷移系統(tǒng)用戶到LDAP服務(wù)的方法。
安裝migrationtools
執(zhí)行:
yum install -y migrationtools
修改配置
編輯/usr/share/migrationtools/migrate_common.ph
文件核行。修改如下內(nèi)容:
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "paultech.com";
# Default base
$DEFAULT_BASE = "dc=paultech,dc=com";
執(zhí)行遷移
# 導(dǎo)出基礎(chǔ)信息
/usr/share/migrationtools/migrate_base.pl > base.ldif
# 導(dǎo)出用戶
/usr/share/migrationtools/migrate_passwd.pl /etc/passwd passwd.ldif
# 導(dǎo)出組
/usr/share/migrationtools/migrate_group.pl /etc/group group.ldif
# 導(dǎo)入上面的信息到LDAP服務(wù)
ldapadd -x -D "cn=Manager,dc=paultech,dc=com" -W -f base.ldif
ldapadd -x -D "cn=Manager,dc=paultech,dc=com" -W -f passwd.ldif
ldapadd -x -D "cn=Manager,dc=paultech,dc=com" -W -f group.ldif
注意牢硅,如果目標(biāo)條目已存在,導(dǎo)入的時候會報錯退出芝雪〖跤啵可以在
ldapadd
命令中使用-c
參數(shù)忽略錯誤。
OpenLDAP命令使用
OpenLDAP 有如下常用客戶端命令:
- ldapsearch:搜索目錄樹條目惩系。
- ldapadd:通過ldif文件添加目錄樹條目位岔。
- ldapdelete:刪除目錄樹條目。
- ldapmodify:修改目錄樹條目堡牡。
- ldapwhoami:校驗LDAP用戶的身份信息抒抬。
- ldapmodrdn:修改目錄樹條目的DN。
- ldapcompare:判斷兩個條目是否為同一個晤柄。
- ldappasswd:重置LDAP用戶條目的密碼擦剑。
服務(wù)端命令常用的有:
- slaptest:驗證OpenLDAP配置文件有效性。
- slapindex:創(chuàng)建LDAP目錄樹索引芥颈,提高檢索效率惠勒。
- slapcat:將條目轉(zhuǎn)換為ldif文件。多用于備份爬坑。
接下來分別介紹他們纠屋。
ldapsearch
ldapsearch
命令用來根據(jù)查詢條件檢索出符合條件的條目。
參數(shù)解釋:
- -x: 使用簡單認(rèn)證妇垢。
- -b searchbase: 查找的節(jié)點巾遭。
- -D binddn: LDAP綁定的DN,使用時候指定OpenLDAP管理員的DN闯估。
- -W: 命令執(zhí)行之后需要數(shù)據(jù)管理員DN密碼灼舍。
- -w password: 直接將管理員密碼附在參數(shù)中。
- -h: LDAP服務(wù)所在hostname或者IP涨薪。
- -p: LDAP服務(wù)的端口號骑素。配合
-h
參數(shù)使用授嘀。 - -H: 根據(jù)LDAP URL查詢對應(yīng)的LDAP服務(wù)挫以。
- -L: 指定輸出格式。輸出格式為ldif(LDAP Data Interchange Format)。一個L代表限制輸出格式為LDIFv1.A寇僧,兩個L代表不輸出注釋弱恒,三個L表示不輸出ldif版本信息射亏。
如果查詢的LDAP服務(wù)和執(zhí)行命令的機器相同虫腋,可以不指定
-p
,-h
和-H
參數(shù)。
例如:
ldapsearch -x -b cn=users,cn=accounts,dc=paultech,dc=com -D uid=admin,cn=users,cn=accounts,dc=paultech,dc=com -W
這條命令查找DN=cn=users,cn=accounts,dc=paultech,dc=com
下面的所有條目的所有屬性妥畏。
ldapsearch -x -b cn=users,cn=accounts,dc=paultech,dc=com uid cn displayName -D uid=admin,cn=users,cn=accounts,dc=paultech,dc=com -W
這條命令查找DN=cn=users,cn=accounts,dc=paultech,dc=com
下面的所有條目的uid, cn和displayName屬性邦邦。
ldapsearch -x -b cn=users,cn=accounts,dc=paultech,dc=com "uid=paul" cn displayName -D uid=admin,cn=users,cn=accounts,dc=paultech,dc=com -W
這條命令查找DN=cn=users,cn=accounts,dc=paultech,dc=com
下面的uid為paul的所有條目的cn和displayName屬性。
除了使用=
表示查詢條件關(guān)系外醉蚁,還可以使用>=
燃辖,<=
和~=
。
ldapadd
ldapadd
命令用來根據(jù)ldif文件添加目錄樹條目网棍。相當(dāng)于ldapmodify -a
命令黔龟。
對于以下ldif文件:
dn: dc=paultech,dc=com
dc: paultech
objectClass: top
objectClass: domain
dn: ou=people,dc=paultech,dc=com
ou: people
objectClass: top
objectClass: organizationalUnit
dn: ou=group,dc=paultech,dc=com
ou: group
objectClass: top
objectClass: organizationalUnit
執(zhí)行:
ldapadd -x -D "cn=Manager,dc=paultech,dc=com" -W -f base.ldif
可以將上面的條目添加到LDAP。
ldapdelete
ldapdelete
從目錄樹中刪除指定的條目滥玷,通過DN來匹配需要刪除的條目氏身。
參數(shù)解釋:
-x: 使用簡單認(rèn)證。
-D binddn: LDAP綁定的DN惑畴,使用時候指定OpenLDAP管理員的DN观谦。
-W: 命令執(zhí)行之后需要數(shù)據(jù)管理員DN密碼。
-w password: 直接將管理員密碼附在參數(shù)中桨菜。
-y: 使用密碼文件的方式認(rèn)證。
-h: LDAP服務(wù)所在hostname或者IP捉偏。
-p: LDAP服務(wù)的端口號倒得。配合
-h
參數(shù)使用。-H: 根據(jù)LDAP URL查詢對應(yīng)的LDAP服務(wù)夭禽。
-r: 遞歸刪除霞掺。
-n: 顯示正在進行的操作,但實際上不修改讹躯,多用于測試命令菩彬。
-c: 持續(xù)操作模式,執(zhí)行過程中間出錯不中斷潮梯。
例如:
ldapdelete -x -W -D cn=Manager,dc=paultech,dc=com "uid=paul,ou=People,dc=paultech,dc=com"
命令會刪除DN為uid=paul,ou=People,dc=paultech,dc=com
的條目骗灶。
ldapmodify
ldapmodify
用來編輯目錄樹中的條目。
參數(shù)解釋:
-x: 使用簡單認(rèn)證秉馏。
-D binddn: LDAP綁定的DN耙旦,使用時候指定OpenLDAP管理員的DN。
-W: 命令執(zhí)行之后需要數(shù)據(jù)管理員DN密碼萝究。
-w password: 直接將管理員密碼附在參數(shù)中免都。
-y: 使用密碼文件的方式認(rèn)證锉罐。
-h: LDAP服務(wù)所在hostname或者IP。
-p: LDAP服務(wù)的端口號绕娘。配合
-h
參數(shù)使用脓规。-H: 根據(jù)LDAP URL查詢對應(yīng)的LDAP服務(wù)。
-a: 增加條目险领。相當(dāng)于
ldapadd
侨舆。-f: 指定ldif文件。
下面給出一個例子舷暮。編輯modifyUser.ldif
文件态罪,內(nèi)容如下:
dn: uid=paul,ou=People,dc=paultech,dc=com
changetype: modify
replace: displayName
displayName: PaulJackson
然后執(zhí)行:
ldapmodify -x -D cn=Manager,dc=paultech,dc=com -W -f modifyUser.ldif
可以修改DN為uid=paul,ou=People,dc=paultech,dc=com
的displayName
屬性值。
ldapmodify
也可以刪除屬性值下面,例如:
dn: uid=paul,ou=People,dc=paultech,dc=com
changetype: modify
delete: displayName
ldapwhoami
用來驗證用戶和密碼复颈。
例如:
ldapwhoami -x -D uid=paul,ou=People,dc=paultech,dc=com -w 123456
uid=paul,ou=People,dc=paultech,dc=com
如果用戶信息正確,會返回用戶的DN沥割。否則會報Invalid credentials(憑據(jù)無效)耗啦。
ldapmodrdn
修改目錄條目的RDN,即修改DN机杜。
其余參數(shù)和上面的命令基本相同帜讲,需要注意的是這個參數(shù):
- -r: 刪除老舊的RDN條目。默認(rèn)情況會保留舊的值椒拗。
例如:
ldapmodrdn -x -D cn=Manager,dc=paultech,dc=com -W "uid=kate,ou=People,dc=paultech,dc=com" uid=mary
將uid=kate,ou=People,dc=paultech,dc=com
修改為uid=mary,ou=People,dc=paultech,dc=com
似将,同時保留uid=kate
。如果之后需要刪除蚀苛≡谘椋可以編寫如下ldif文件,然后使用ldapmodify
命令運行堵未。
dn: uid=mary,ou=People,dc=paultech,dc=com
changetype: modify
delete: uid
uid: kate
ldapcompare
比較兩個條目是否是同一個條目腋舌。
ldapcompare -x -D cn=Manager,dc=paultech,dc=com -W "uid=paul,ou=People,dc=paultech,dc=com" "uid:kate"
FALSE
ldappasswd
使用LDAP管理員修改LDAP用戶的密碼。
需要注意的是下面的參數(shù):
- -A: 提示輸入舊密碼渗蟹。
- -S: 提示輸入新密碼块饺。
一個例子如下:
ldappasswd -x -D cn=Manager,dc=paultech,dc=com -w admin "uid=paul,ou=People,dc=paultech,dc=com" -S
slaptest
檢測LDAP配置文件是否存在問題。例如:
slaptest -f /etc/openldap/slapd.conf
slapindex
創(chuàng)建LDAP數(shù)據(jù)庫的索引雌芽,加快檢索速度授艰。執(zhí)行的時候要求停止slapd
服務(wù)。
-f:指定 OpenLDAP 的配置文件(
slapd.conf
)膘怕,并創(chuàng)建索引想诅。-F:指定 OpenLDAP 數(shù)據(jù)庫目錄,并創(chuàng)建索引。
slapcat
將數(shù)據(jù)條目轉(zhuǎn)換為ldif文件来破。
- -a filter:添加過濾選項篮灼。只dump符合過濾條件的條目。
- -b suffix:指定 suffix徘禁。比如 dc=paultech,dc=com诅诱。
- -f:指定 OpenLDAP 的配置文件。
- -F:指定 OpenLDAP 的數(shù)據(jù)庫文件目錄送朱。
- -c:出現(xiàn)錯誤時娘荡,忽略錯誤繼續(xù)執(zhí)行。
- -H:使用 LDAP 服務(wù)器的 URL 地址進行操作驶沼。
- -v:輸出詳細(xì)信息炮沐。
例如:
slapcat -v -l dump.ldif
圖形化界面操作LDAP
命令方式查看目錄樹,搜索和修改等操作非常繁瑣不直觀回怜。社區(qū)為我們提供了圖形化界面操作LDAP的工具大年。下面我們分別介紹下Apache Directory Studio(客戶端訪問方式)和phpldapadmin(服務(wù)器端常駐服務(wù))兩種常用的圖形化工具。
使用Apache Directory Studio
Apache Directory Studio是一個可運行在Windows玉雾,MacOS和Linux下的圖形界面操作LDAP客戶端翔试。
下載地址:Index of /apache/directory/studio (tsinghua.edu.cn)。然后解壓到任意目錄复旬。
注意:Apache Directory Studio要求JDK11以上垦缅,需要編輯安裝目錄下
ApacheDirectoryStudio.ini
文件,配置JDK11的java二進制文件地址驹碍,如下:-vm /path/to/jdk-11.0.14.1+1/bin/java
啟動成功后點擊File -> New壁涎。選擇彈出窗口wizards中的LDAP Browser -> LDAP Connection。然后按照向?qū)钊隠DAP服務(wù)的hostname和端口號志秃,Bind DN和密碼(管理員DN及其密碼)粹庞。即可連接到LDAP服務(wù)。
Apache Directory Studio左側(cè)導(dǎo)航欄以樹形結(jié)構(gòu)展示了所有LDAP目錄條目洽损。點擊任意一個條目,右側(cè)會展示該條目的所有屬性和值革半。創(chuàng)建條目和編輯屬性的方法較為直觀碑定,這里不再介紹。
phpldapadmin
phpldapadmin是一個常駐web服務(wù)又官,提供了圖形化操作LDAP目錄樹的能力延刘。
安裝配置
安裝epel-release
源:
yum install -y epel-release
yum makecache
安裝phpldapadmin
:
yum install phpldapadmin.noarch
接下來配置phpldapadmin。
編輯/etc/phpldapadmin/config.php
文件六敬,修改Define your LDAP servers in this section
:
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
$servers->setValue('login','auth_type','cookie');
$servers->setValue('login','bind_id','cn=Manager,dc=paultech,dc=com');
$servers->setValue('login','bind_pass','admin');
$servers->setValue('server','tls',false);
SASL Authentication
部分修改如下配置:
$servers->setValue('login','attr','dn');
啟動httpd服務(wù):
systemctl start httpd
登錄web管理頁面
瀏覽器打開http://{ip}/ldapadmin
碘赖。登錄用戶名和密碼分別使用管理員DNcn=Manager,dc=paultech,dc=com
和上面配置的密碼admin
。
FAQ
This base cannot be created with PLA錯誤,無法創(chuàng)建任何條目
出現(xiàn)這個問題說明沒有創(chuàng)建基礎(chǔ)目錄樹普泡。
創(chuàng)建base.ldif
文件播掷,添加如下內(nèi)容:
dn: dc=paultech,dc=com
dc: paultech
objectClass: top
objectClass: domain
然后執(zhí)行:
ldapadd -D cn=Manager,dc=paultech,dc=com -x -f base.ldif -W
輸入LDAP的管理員密碼。創(chuàng)建出基礎(chǔ)目錄樹撼班。