ldap服務構建過程+phpldapadmin構建使用
基於centos 6.8系統:
1. 安裝openldap
yum install -y openldap openldap-servers openldap-clients openldap-devel compat-openldap
2. 安裝Berkeley DB
yum install -y db4 db4-utils
openldap使用Berkeley DB存儲數據。
3. 安裝nginx, php (php要安裝5.4的版本,否則會有不兼容情況)
這裏php還需要安裝對ldap支持的模塊:參考這篇文章:centos安裝php-ldap擴展,總結 https://blog.csdn.net/gpxxgpxx/article/details/60135356
這個用ansible自動安裝
nginx的配置文件:
server {
listen 8099;
server_name ldap.anmav.cn;
location / {
root /home/data/html/phpldapadmin;
index index.php index.html index.htm;
}
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root /home/www//html;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/data/html/phpldapadmin/$fastcgi_script_name;
include fastcgi_params;
}
error_log logs/phpldapadmin_error.log;
access_log logs/phpldapadmin_access.log main;
}
4. 下載phpldapadmin
cd /home/workspace
wget http://sourceforge.net/projects/phpldapadmin/files/phpldapadmin-php5/1.2.3/phpldapadmin-1.2.3.zip/download
unzip phpldapadmin-1.2.3.zip
cp -R phpldapadmin-1.2.3 /var/www/html/phpldapadmin
cd /home/data/html/phpldapadmin/config
cp config.php.example config.php
5. 配置openldap
安裝完openldap後我們看到在/etc/openldap目錄下有certs、schema、slapd.d三個目錄和ldap.conf一個文件。
1)certs目錄用於存放TLS認證的CA證書等。
2)(該目錄用於舊的配置方法,已廢棄)schema目錄下有.schema文件和.ldif文件。
3)slapd.d目錄是openldap2.4.x的配置目錄。/etc/openldap/slapd.d/cn=config存放數據庫的配置文件,/etc/openldap/slapd.d/cn=config/cn=schema存放.ldif文件。 注意: /etc/openldap/slapd.d/cn=config.ldif會被/etc/openldap/slapd.d/cn=config/*裏面的配置文件覆蓋掉
4)ldap.conf是openldap client的配置文件。
5.1首先生成管理員密碼:
slappasswd
輸完兩遍密碼後會生成一個加密散列字符串,保存下來。
如:
[root@gitlab openldap]# slappasswd
New password:
Re-enter new password:
{SSHA}kk20rdNChGiPTP+Xoh4bdKZKrS+46sYM
5.2 編輯數據庫配置文件,設置域名:
vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif
設置目錄樹後綴(域名),作用是定義根的名字。
找到:
olcSuffix: dc=my-domain,dc=com
修改dc:
olcSuffix: dc=ldap,dc=anmav,dc=cn
設置管理員DN。
PS:LDAP管理員cn默認爲Manager,可以改成自己需要的名字。
找到:
olcRootDN: cn=Manager,dc=my-domain,dc=com
修改dc:
olcRootDN: cn=anmavadmin,dc=ldap,dc=anmav,dc=cn
設置管理員密碼。在olcDatabase={2}bdb.ldif最後添加:
olcRootPW: {SSHA}kk20rdNChGiPTP+Xoh4bdKZKrS+46sYM
5.3 指定監控權限:
vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif
找到:
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=exter
nal,cn=auth" read by dn.base="cn=manager,dc=my-domain,dc=com" read by * n
one
修改爲:
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=exter
nal,cn=auth" read by dn.base="cn=anmavadmin,dc=ldap,dc=anmav,dc=cn" read by * n
one
5.4 設置Database Cache:
設置Database Cache:
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
設置權限:
chown -R ldap:ldap /var/lib/ldap/
測試配置文件是否有錯:
slaptest -u
提示:
config file testing succeeded
測試通過。
啓動slapd服務:
service slapd start
#上面的ldif文件是推薦通過ldapmodify的方式修改的
修改方式可以參照這篇文章 https://www.server-world.info/en/note?os=CentOS_7&p=openldap&f=1
6. 配置phpldapadmin
vim /home/data/html/phpldapadmin/config/config.php
找到"Define your LDAP servers in this section"區塊。
將:
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
前的註釋去掉。
將:
$servers->setValue('server','base',array(''));
修改爲:
$servers->setValue('server','base',array('dc=ldap,dc=anmav,dc=cn'));
在array中輸入設置的olcSuffix。
將:
$servers->setValue('login','auth_type','session');
前的註釋去掉。
chown www. -R /home/data/html/phpldapadmin
瀏覽器訪問:http://ldap.anamv.cn:8099/
使用RootDN和RootPW登陸:
用戶名:cn=anmavadmin,dc=ldap,dc=anmav,dc=cn
密碼: 自己設置的密碼
此時左側目錄樹會顯示:This base cannot be created with PLA.
添加根節點:
vim base.ldif
dn: dc=ldap,dc=anmav,dc=cn
o: anmav
objectclass: dcObject
objectclass: organization
添加到ldap數據庫:
ldapadd -f base.ldif -x -D cn=anmavadmin,dc=ldap,dc=anmav,dc=cn -W
#-f 指定文件,相當於mysql的.sql類文件
#-x 簡單用戶認證
#-D 綁定的dn
#-W 提示輸入綁定dn的密碼
輸入密碼後會提示:
adding new entry "dc=ldap,dc=anmav,dc=cn"
在瀏覽器裏刷新一下條目就會顯示出根節點。
7. 剩下來就可以登錄phpldapadmin進行條目的添加了
也可以使用openldap的LAM工具進行管理
#注意事項:
#如果ldap裏面沒有對應的objectClass,可以進行導入,centos 7下yum安裝可能需要手動導入,centos6下,在vim /etc/openldap/slapd.d/cn\=config.ldif裏面配置了olcConfigFile: /usr/share/openldap-servers/slapd.conf.obsolete, 而slapd.conf.obsolete裏面include這些ldif了,那麼系統會自動導入進去的
cd /etc/openldap/schema/
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f collective.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f corba.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f core.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f duaconf.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f dyngroup.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f inetorgperson.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f java.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f misc.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f openldap.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f pmi.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f ppolicy.ldif
#參考文檔:
LDAP服務原理詳解(原創) http://czmmiao.iteye.com/blog/1561597
CentOS Linux安裝OpenLDAP服務器 http://www.live-in.org/archives/1731.html (安裝過程也是根據這篇文章做的)
Centos7 Ldap統一認證部署 http://blog.chinaunix.net/uid-21926461-id-5676013.html
概念:
olc : on-line configuration 在線配置
objectClass:表示使用什麼對象類,這個對象類可以自定義的,比如說inetOrgPerson,olcDatabaseConfig等
olcAccess: acl訪問控制列表
openldap相關縮寫:
dn - distinguished name(區別名,主鍵)
o - organization(組織-公司)
ou - organization unit(組織單元-部門)
c - countryName(國家)
dc - domainComponent(域名)
sn - sure name(真實名稱)
cn - common name(常用名稱)
openldap組件:
slapd:主LDAP服務器
slurpd:負責與複製LDAP服務器保持同步的服務器
對網絡上的目錄進行操作的客戶機程序。下面這兩個程序是一對兒:
ldapadd:打開一個到LDAP服務器的連接,綁定、修改或增加條目
ldapsearch:打開一個到LDAP服務器的連接,綁定並使用指定的參數進行搜索
對本地系統上的數據庫進行操作的幾個程序:
slapadd:將以LDAP目錄交換格式(LDIF)指定的條目添加到LDAP數據庫中
slapcat:打開LDAP數據庫,並將對應的條目輸出爲LDIF格式.
相關命令:
slapd -V 查看版本
slappasswd 生產加密密碼
slaptest -u 測試ldap配置文件是否有錯
ldapadd man ldapadd 或者ldapadd -h 增加ldap條目
例子: ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -f base.ldif -x -D "cn=anmavadmin,dc=ldap,dc=anmav,dc=cn" -W
ldapmodify 修改ldap條目
例子: ldapmodify -Y EXTERNAL -H ldapi:/// -f xxx.ldif
ldapmodify -f changebase.ldif -D "cn=admin,dc=ldap,dc=myjason,dc=org" -W
ldapdelete 刪除ldap條目
例子: ldapdelete -x -D "cn=admin,dc=netsafe,dc=qa,dc=net" -W "uid=seabird,ou=People,dc=netsafe,dc=qa,dc=net"
或者: vim delete.ldif
內容爲:
dn: dc=ldap,dc=myjason,dc=org
changetype: delete
然後執行:
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f delete.ldif
ldapsearch 搜索ldap條目
例子: ldapsearch -x -b 'dc=ldap,dc=anmav,dc=cn'
ldapsearch -LLL -W -x -H ldap://192.168.3.21 -D "cn=anmavadmin,dc=ldap,dc=anmav,dc=cn" -b "dc=dev,dc=com" "(uid=*)"
slapcat 查看ldap數據庫條目,輸出爲ldif格式
例子: slapcat -b "dc=ldap,dc=anmav,dc=cn"
8、 自定義一個添加一個schema(添加自定義項)
需要給ldap用戶添加mobile和sex這個屬性,但是發現暫時上面只有mobile,沒有sex。所以要麼自定義一個schema,然後用繼承,要麼在現有的裏面添加
1)、新建自定義schema
cd /etc/openldap/schema
vi localperson.schema
attributetype ( 2.16.840.1.113730.3.1.930
NAME 'userType'
DESC 'normalperson,doctor,citizen'
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE )
attributetype ( 2.16.840.1.113730.3.1.931
NAME 'idType'
DESC 'person id cardtype'
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.932
NAME 'idNumber'
DESC 'person id cardnumber'
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype (2.16.840.1.113730.3.1.933
NAME 'age'
DESC 'person age'
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.934
NAME 'sex'
DESC 'person id cardnumber'
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.935
NAME 'userRole'
DESC 'user role '
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.936
NAME 'firstLogin'
DESC 'whether firstlogin flag '
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.937
NAME 'securityQuestion'
DESC 'SecurityQuestion'
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.938
NAME 'securityAnswer'
DESC 'SecurityAnswer'
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
# inetOrgPerson
# The inetOrgPerson represents people who are associatedwith an
# organization in some way. It is a structural class and is derived
objectclass ( 111111.3.2.8
NAME 'localPerson'
DESC 'Local py Person attributes'
SUP person
STRUCTURAL
MAY ( uid $ userType $ idType $ idNumber $ age $ sex $ title $ postalAddress $ postalCode $ displayName $ mail $ mobile $ userRole$firstLogin $ securityQuestion $ securityAnswer ) )
vim /etc/openldap/slapd.conf
加入include /etc/openldap/schema/localperson.schema
在include /etc/openldap/schema/inetorgperson.schema前面
還需要修改/etc/openldap/schema/inetorgperson.schema,讓其繼承localperson的objectclass
vim /etc/openldap/schema/inetorgperson.schema
修改
objectclass ( 2.16.840.1.113730.3.2.2
NAME 'inetOrgPerson'
DESC 'RFC2798: Internet Organizational Person'
SUP organizationalPerson
STRUCTURAL
MAY (
audio $ businessCategory $ carLicense $ departmentNumber $
displayName $ employeeNumber $ employeeType $ givenName $
homePhone $ homePostalAddress $ initials $ jpegPhoto $
labeledURI $ mail $ manager $ mobile $ o $ pager $
photo $ roomNumber $ secretary $ uid $ userCertificate $
x500uniqueIdentifier $ preferredLanguage $
userSMIMECertificate $ userPKCS12 )
)
改成
objectclass ( 2.16.840.1.113730.3.2.2
NAME 'inetOrgPerson'
DESC 'RFC2798: Internet Organizational Person'
SUP ( organizationalPerson $ localPerson )
STRUCTURAL
MAY (
audio $ businessCategory $ carLicense $ departmentNumber $
displayName $ employeeNumber $ employeeType $ givenName $
homePhone $ homePostalAddress $ initials $ jpegPhoto $
labeledURI $ mail $ manager $ mobile $ o $ pager $
photo $ roomNumber $ secretary $ uid $ userCertificate $
x500uniqueIdentifier $ preferredLanguage $
userSMIMECertificate $ userPKCS12 )
)
然後用slaptest -u,測試是否有問題
如果沒有問題再重啓service slapd restart
但是這裏面發現其實是有問題的,有可能會抱找不到localPerson這個objectClass,這個具體原因有待去查明
所以這裏我使用了第二種方法,直接修改inetOrgPerson,這個objecclass,添加一個sex屬性
2)、 添加sex屬性
vim /etc/openldap/schema/inetorgperson.schema
添加
attributetype ( 2.16.840.1.113730.3.1.934
NAME 'sex'
DESC 'person sex'
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
說明:
1、 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 這個數字對應這個Directory String類型,詳細可參照http://ldap.anmav.cn:8099/htdocs/cmd.php?cmd=schema&server_id=1&view=objectclasses&viewvalue=inetOrgPerson 選擇“語法規則”
2、 2.16.840.1.113730.3.1.934這個是個OID,是每個屬性唯一的id號,不能重複
再修改
objectclass ( 2.16.840.1.113730.3.2.2
NAME 'inetOrgPerson'
DESC 'RFC2798: Internet Organizational Person'
SUP organizationalPerson
STRUCTURAL
MAY (
audio $ businessCategory $ carLicense $ departmentNumber $
displayName $ employeeNumber $ employeeType $ givenName $
homePhone $ homePostalAddress $ initials $ jpegPhoto $
labeledURI $ mail $ manager $ mobile $ o $ pager $
photo $ roomNumber $ secretary $ uid $ userCertificate $
x500uniqueIdentifier $ preferredLanguage $
userSMIMECertificate $ userPKCS12 )
)
添加個sex
objectclass ( 2.16.840.1.113730.3.2.2
NAME 'inetOrgPerson'
DESC 'RFC2798: Internet Organizational Person'
SUP organizationalPerson
STRUCTURAL
MAY (
audio $ businessCategory $ carLicense $ departmentNumber $
displayName $ sex $ employeeNumber $ employeeType $ givenName $
homePhone $ homePostalAddress $ initials $ jpegPhoto $
labeledURI $ mail $ manager $ mobile $ o $ pager $
photo $ roomNumber $ secretary $ uid $ userCertificate $
x500uniqueIdentifier $ preferredLanguage $
userSMIMECertificate $ userPKCS12 )
)
然後vim /etc/openldap/slapd.conf
#include /etc/openldap/schema/localperson.schema
再用slaptest -u,測試是否有問題, 再重啓service slapd restart
說明:
1、 SUP是繼承的意思,表示inetOrgPerson繼承了organizationalPerson的所有屬性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.