目錄服務就是按照樹狀存儲信息的模式。LDAP是輕量目錄訪問協議(LightweightDirectory Access Protocol)的縮寫,LDAP標準其實是在X.500標準基礎上產生的一個簡化版本。前端
<1>在LDAP中目錄是按照樹型結構組織——目錄信息樹(DIT) ,DIT是一個主要進行讀操做的數據庫。sql
<2>DIT由條目(Entry)組成,條目至關於關係數據庫中表的記錄;條目是具備分辨名DN(Distinguished Name)的屬性-值對(Attribute-value,簡稱AV)的集合。數據庫
基於cn(姓名) |
cn=test,ou=auth,dc=baike,dc=com最多見的cn是/etc/group轉來的條目 |
基於uid(User ID) |
uid=test, ou=auth,dc=baike,dc=com最多見的uid是/etc/passwd轉來的條目 |
1、檢查環境:安全
×××服務器:10.0.18.122服務器
[root@TEST1~]# cat /etc/redhat-release 網絡
CentOSrelease 5.8 (Final)數據結構
[root@TEST1~]# uname -aapp
Linux TEST12.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 x86_64 x86_64GNU/Linuxdom
2、安裝openldap軟件tcp
[root@TEST1~]# yum -y install openldap-*
######################################################################
Yum安裝openlap時安裝和升級的軟件包以下:
Install:
openldap-servers.x86_640:2.3.43-25.el5_8.1
openldap-servers-overlays.x86_640:2.3.43-25.el5_8.1
openldap-servers-sql.x86_640:2.3.43-25.el5_8.1
DependencyInstalled:
libtool-ltdl.x86_640:1.5.22-7.el5_4
unixODBC-libs.x86_640:2.2.11-10.el5
Updated:
openldap.i3860:2.3.43-25.el5_8.1
openldap.x86_640:2.3.43-25.el5_8.1
openldap-clients.x86_640:2.3.43-25.el5_8.1
openldap-devel.i3860:2.3.43-25.el5_8.1
openldap-devel.x86_640:2.3.43-25.el5_8.1
######################################################################
3、配置openldap
<1>備份配置文件sldap.conf和ldap.conf
[root@TEST1~]# cd /etc/openldap/
[root@TEST1openldap]# ls
cacerts DB_CONFIG.example ldap.conf schema slapd.conf
[root@TEST1openldap]# cp slapd.conf slapd.conf_liqunyan_$(date +%F)
[root@TEST1openldap]# cp ldap.conf ldap.conf_liqunyan_$(date +%F)
[root@TEST1openldap]# ls
cacerts ldap.conf schema slapd.conf_liqunyan_2013-02-27
DB_CONFIG.example ldap.conf_liqunyan_2013-02-27 slapd.conf
<2>用哈希散列的方式生成root管理員密碼
[root@TEST1openldap]# slappasswd -h {SSHA}
Newpassword:
Re-enter newpassword:
{SSHA}jT3zYgVa1Ys7x4Bp2g/Iec5wDTLQfk4t
<3>修改配置文件slapd.conf
[root@TEST1openldap]# cat slapd.conf|egrep -v "^#|^$"
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
allowbind_v2
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
TLSCACertificateFile/etc/pki/tls/certs/ca-bundle.crt
TLSCertificateFile /etc/pki/tls/certs/slapd.pem
TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem
[l1] access todn.base="cn=Subschema" by * read
access to *
by self write
by users read
by anonymous auth
database bdb
rootdn "cn=Manager,dc=abc,dc=com"
[l2] rootpw {SSHA}jT3zYgVa1Ys7x4Bp2g/Iec5wDTLQfk4t[l3]
directory /var/lib/ldap
indexobjectClass eq,pres
indexou,cn,mail,surname,givenname eq,pres,sub
indexuidNumber,gidNumber,loginShell eq,pres
indexuid,memberUid eq,pres,sub
indexnisMapName,nisMapEntry eq,pres,sub
<4>啓動ldap服務
[root@TEST1openldap]# /etc/init.d/ldap start
Startingslapd: [ OK ]
[root@TEST1openldap]# netstat -lant|grep 389
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN
[root@TEST1openldap]# ps -ef|grep ldap
ldap 26976 1 0 04:37 ? 00:00:00 /usr/sbin/slapd -h ldap:///ldaps:/// -u ldap
root 26987 3148 0 04:40 pts/0 00:00:00 grep ldap
4、遷移用戶數據到目錄服務數據庫
[root@TEST1~]# cd /usr/share/openldap/migration/
[root@TEST1migration]#vi migrate_common.ph
$DEFAULT_MAIL_DOMAIN = "abc.com";
# Default base
$DEFAULT_BASE = "dc=abc,dc=com"
[l4] <1>首先建立基本的數據庫文件
[root@TEST1migration]#./migrate_base.pl >base.ldif[l5]
修改生成的base.ldif文件
(修改爲本身想要的結構,本實驗中的結構以下:
)
[root@TEST1migration]# cat base.ldif
dn:dc=abc,dc=com
dc: abc
objectClass:domain
[root@TEST1migration]# cp base.ldif base1.ldif
[root@TEST1migration]# cat base1.ldif
ou: accounts
objectClass: top
objectClass: organizationalUnit
dn: ou=sysusers,dc=abc,dc=com
ou: sysusers
objectClass: top
objectClass: organizationalUnit
[l6] objectClass中organizationalUnit屬性的說明:
objectclass ( 2.5.6.5 NAME 'organizationalUnit'
DESC'RFC2256: an organizational unit'
SUPtop STRUCTURAL
MUSTou
MAY (userPassword $ searchGuide $ seeAlso $ businessCategory $
x121Address $ registeredAddress $ destinationIndicator $
preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $
telephoneNumber $ internationaliSDNNumber $
facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $
postalAddress $ physicalDeliveryOfficeName $ st $ l $ description ) )
以上內容在/etc/openldap/schema/core.schema中有相關說明。
[root@TEST1migration]# cp base1.ldif base2.ldif
[root@TEST1migration]# cat base2.ldif
dn:ou=users,ou=accounts,dc=abc,dc=com
ou: users
objectClass:top
objectClass:organizationalUnit
dn:ou=groups,ou=accounts,dc=abc,dc=com
ou: groups
objectClass:top
objectClass:organizationalUnit
<2>從/etc/group中遷移ldap中用戶組的信息
[root@TEST1migration]# grep root /etc/group >group.in
[root@TEST1 migration]# ./migrate_group.pl group.in>group.ldif
[l7] [root@TEST1migration]# cat groups.ldif
dn:cn=staff,ou=groups,ou=accounts,dc=abc,dc=com
objectClass:posixGroup
cn: staff
gidNumber: 1
posixGroup的相關信息:
objectclass ( 1.3.6.1.1.1.2.2 NAME 'posixGroup'
DESC'Abstraction of a group of accounts'
SUPtop STRUCTURAL
MUST (cn $ gidNumber )
MAY (userPassword $ memberUid $ description ) )
在/etc/openldap/schema/nis.schema中能夠查看到相關信息。
<3>從/etc/passwd和/etc/shadow中遷移ldap中用戶的信息:
[root@TEST1migration]# grep root /etc/passwd > passwd.in
[root@TEST1 migration]# ./migrate_passwd.plpasswd.in >users.ldif
[l8] [root@TEST1 migration]# cat users.ldif
dn:cn=liqunyan,ou=users,ou=accounts,dc=abc,dc=com
objectClass:posixAccount
objectClass:inetOrgPerson
givenName::576k6Imz
sn:: 5p2O
cn: liqunyan
uid:liqunyan
uidNumber:3236
gidNumber: 1
homeDirectory:/home/liqunyan
loginShell:/bin/sh
mail:liqunyan@aa.com
employeeType:staff
userPassword::e1NIQX1GN1ZLZVRFWUIvY0NqUkJjV0NodTdrWW2275pxc9
dn:cn=aa,ou=users,ou=accounts,dc=abc,dc=com
objectClass:posixAccount
objectClass:inetOrgPerson
givenName::55Ge
sn:: 546L
cn: aa
uid: aa
uidNumber:2872
gidNumber: 1
homeDirectory:/home/aa
loginShell:/bin/sh
mail:aa@aa.com
employeeType:staff
userPassword::e1NIQX1mWFVTMEtPVG81R21sd25RRnc3cjRjWEZ5UXc9
[root@TEST1migration]# cat sysusers.ldif
dn:uid=lsync,ou=sysusers,dc=abc,dc=com
uid: lsync
userPassword::e01ENX1wMnB5WWVqTmZkb0hYT1VLcWFFb3JBPT0=
objectClass:account
objectClass:simpleSecurityObject
objectClass:top
dn:uid=mail,ou=sysusers,dc=abc,dc=com
uid: mail
userPassword::e01ENX05ZG5DcnU5ZFhnSDN4Sk02cWkyOGV3PT0=
objectClass:account
objectClass:simpleSecurityObject
objectClass:top
dn:uid=auth,ou=sysusers,dc=abc,dc=com
uid: auth
userPassword::e01ENX1KeCtKMmNQZWJYOGV3L3VjS0NsOTFBPT0=
objectClass:account
objectClass:simpleSecurityObject
objectClass:top
account和simpleSecurityObject的相關信息:
objectclass ( 0.9.2342.19200300.100.4.5 NAME'account'
SUPtop STRUCTURAL
MUSTuserid
MAY (description $ seeAlso $ localityName $
organizationName $ organizationalUnitName $ host )
)
objectclass ( 0.9.2342.19200300.100.4.19 NAME'simpleSecurityObject'
SUP topAUXILIARY
MUSTuserPassword )
<4>將以上的結構一層一層導入到ldap中
[root@TEST1migration]# ldapadd -x -D "cn=Manager,dc=abc,dc=com" -W -f base.ldif
adding newentry "dc=abc,dc=com"
[root@TEST1migration]# ldapadd -x -D "cn=Manager,dc=abc,dc=com" -W -f base1.ldif
Enter LDAPPassword:
adding newentry "ou=accounts,dc=abc,dc=com"
adding newentry "ou=sysusers,dc=abc,dc=com"
[root@TEST1migration]# ldapadd -x -D "cn=Manager,dc=abc,dc=com" -W -fbase2.ldif
Enter LDAPPassword:
adding newentry "ou=users,ou=accounts,dc=abc,dc=com"
adding newentry "ou=groups,ou=accounts,dc=abc,dc=com"
[root@TEST1migration]# ldapadd -x -D "cn=Manager,dc=abc,dc=com" -W -fgroups.ldif
Enter LDAPPassword:
adding newentry "cn=staff,ou=groups,ou=accounts,dc=abc,dc=com"
[root@TEST1migration]# ldapadd -x -D "cn=Manager,dc=abc,dc=com" -W -fsysusers.ldif
Enter LDAPPassword:
adding newentry "uid=lsync,ou=sysusers,dc=abc,dc=com"
adding newentry "uid=mail,ou=sysusers,dc=abc,dc=com"
adding newentry "uid=auth,ou=sysusers,dc=abc,dc=com"
ldapadd -x-D "cn=Manager,dc=abc,dc=com" -W -f users.ldif
Enter LDAPPassword:
adding newentry "cn=liqunyan,ou=users,ou=accounts,dc=abc,dc=com"
adding newentry "cn=aa,ou=users,ou=accounts,dc=abc,dc=com"
<5>查看導入的用戶信息。
[root@TEST1migration]# /usr/bin/ldapsearch-LLL -W -x -H ldap://127.0.0.1 -D "cn=Manager,dc=abc,dc=com" -b"ou=sysusers,dc=abc,dc=com" "(uid=lsync)"[l10]
Enter LDAPPassword:
dn:uid=lsync,ou=sysusers,dc=abc,dc=com
uid: lsync
userPassword::e01ENX1wMnB5WWVqTmZkb0hYT1VLcWFFb3JBPT0=
objectClass:account
objectClass:simpleSecurityObject
objectClass:top
[root@TEST1migration]#/usr/bin/ldapsearch -LLL -W -x -H ldap://127.0.0.1 -D"cn=Manager,dc=abc,dc=com" -b"ou=users,ou=accounts,dc=abc,dc=com" "(uid=liqunyan)"[l11]
Enter LDAPPassword:
dn:cn=liqunyan,ou=users,ou=accounts,dc=abc,dc=com
objectClass:posixAccount
objectClass:inetOrgPerson
givenName::576k6Imz
sn:: 5p2O
cn: liqunyan
uid:liqunyan
uidNumber:3236
gidNumber: 1
homeDirectory:/home/liqunyan
loginShell:/bin/sh
mail:liqunyan@aa.com
employeeType:staff
userPassword::e1NIQX1GN1ZLZVRFWUIvY0NqUkJjV0NodTdrWW2275pxc9
說明:
《1》 修改用戶的密碼:
知道本身的密碼,給本身設置新的密碼:
[root@TEST1openldap]# ldappasswd -x -H ldap://127.0.0.1 -D"cn=liqunyan,ou=users,ou=accounts,dc=abc,dc=com" -W"cn=liqunyan,ou=users,ou=accounts,dc=abc,dc=com" -S
Newpassword:
Re-enter newpassword:
Result:Success (0)
[root@TEST1openldap]# /usr/bin/ldapsearch -LLL -W -x -H ldap://127.0.0.1 -D"cn=Manager,dc=abc,dc=com" -b"ou=users,ou=accounts,dc=abc,dc=com" "(uid=liqunyan)"
Enter LDAPPassword:
dn: cn=liqunyan,ou=users,ou=accounts,dc=abc,dc=com
objectClass:posixAccount
objectClass:inetOrgPerson
givenName::576k6Imz
sn:: 5p2O
cn: liqunyan
uid:liqunyan
uidNumber:3236
gidNumber: 1
homeDirectory:/home/liqunyan
loginShell:/bin/sh
mail: liqunyan@aa.com
employeeType:staff
userPassword::e1NTSEF9RktlNDRtSXhiaDRKMlZ4RDFFa2lTaW5jQmRpZXdzcGI=
管理員給任何一個用戶修改密碼:
[root@TEST1openldap]# ldappasswd -x -H ldap://127.0.0.1 -D"cn=Manager,dc=abc,dc=com" -W"cn=aa,ou=users,ou=accounts,dc=abc,dc=com" -S
Newpassword:
Re-enter newpassword:
Result:Success (0)
[root@TEST1openldap]# /usr/bin/ldapsearch -LLL -W -x -H ldap://127.0.0.1 -D"cn=Manager,dc=abc,dc=com" -b"ou=users,ou=accounts,dc=abc,dc=com" "(uid=aa)"
Enter LDAPPassword:
dn:cn=aa,ou=users,ou=accounts,dc=abc,dc=com
objectClass:posixAccount
objectClass:inetOrgPerson
givenName::55Ge
sn:: 546L
cn: aa
uid: aa
uidNumber:2872
gidNumber: 1
homeDirectory:/home/aa
loginShell:/bin/sh
mail:aa@aa.com
employeeType:staff
userPassword::e1NTSEF9cXhPajMzemNpYkJUWVpBN2R3OHpsMGV3ZkJ3bXA3ZTc=
[l1]此三行最前端不要有空格
[l2]Suffix和rootdn修改爲本身的域後綴。
[l3]管理員密碼,注意rootpw和密碼之間不能存在空格,要用tab鍵隔開。
[l4]將此選項中的域名修改爲本身的域名。
[l5]基本的數據庫文件能夠用此命令生成,也能夠本身手寫,若是手寫,手寫內容必須符合相關屬性。
[l6]添加ou account和sysusers(就是abc.com的分支機構)
[l7]一樣,group.ldif能夠使用命令生成,也能夠本身手寫建立。
[l8]一樣,sysusers.ldif能夠使用命令生成,也能夠本身手寫建立。
[l9]此密碼爲上面設置的root密碼。
[l10]查詢lsync用戶信息
[l11]查看liqunyan用戶信息。
[l12]此處輸入的是本身的密碼
[l13]此處輸入的就是管理員root的密碼。