这几天在研究LDAP安装,上网找了一大圈还是没整明白,经过无数次的失败和N小时的尝试中终于研究的差不多了。
下面简要说一下流程吧,希望对大家有所帮助:
由于10.04之后的配置又发生了点变化,这里再做点补充;见第二部分
第一部分:
主要参考: http://www.debuntu.org/ldap-server-and-linux-ldap-clients
http://wiki.ubuntu.org.cn/LDAPClientAuthentication
1. LDAP Server
1.1. 安装
主要安装一下套件:
按照提示输入相关信息,这样在重新配置的时候就可以作较少的工作了
重新配置
大致如下:
由于现在新版本的2.4 以上版本的ldap都采用了新的数据库存储技术,因此可能就找不到像大家所说的sldap配置文件了,
现在都用新的数据格式存放在 /etc/ldap/slap.d/ 目录下面,dpkg-reconfigure slapd 可以实现ldap服务端的配置,按照要求填写即可,相信大家都能读懂里面的提示
现在我们已经设置好了域和管理员用户: “admin”
检查一下你是否可以顺利的访问你的LDAP服务:
输入:
如果得到如下错误,可能是由于你的服务未开启:
启动服务:
1.2 建立数据库
我们可以通过 migrationtools 来很容易的导入本地的用户和用户组数据:
我们要先修改 migrationtools 的默认配置文件 migrate_common.ph 里面的参数:
导出本地数据:
可惜上面的脚本并没有帮我们创建 People 和 Group节点ou( Organisation Unit),因此我们要先建立他们,建立一个
people_group.lidf 如下:
其实它的结构就是一棵树,先建立了这棵树的根, dc=debuntu,dc=com ,在dn的表示中都是从儿子到祖先的顺序进行的,在以后的实践中可以发现这一点,结构可以如下图所示两种,我们比较常用的是第二种
导入数据库的前阶段工作已经完成
好了,现在我们开始导入数据:
ps:如果people_group.lidf 直接从网页拷贝的话可能会有点问题,得用工具重新编辑一下
其中:
* -x 指示我们不用 sasl
* -W 指定要输入密码再进行操作
* -D 识别系统管理员
* -f 指定要输入的文件
到目前为止,服务器端已经建立好了。
2、客户端
首先安装相关套件:
libnss-ldap 被用于名字解析, libpam-ldap 用 pm 通过LDAP来认证用户, nscd is 是一个查找用户、组、密码的守护进程它会对查询结果进行缓存
接下来修改相关的配置文件: 注意大部分只有 debain用户需要进行修改,ubuntu 9.10+在安装相关套件的时候已经帮你修改好了,所以ubuntu用户只需最后修改一下认证的开关文件就行 nsswitch.conf
这两个文件比较关键,如果你遇到客户端说
pam_ldap: error trying to bind (Invalid DN syntax)
那么很可能的原因就是 rootbinddn cn=admin,dc=debuntu,dc=local 有问题,因为在配置的时候只是生成 rootbinddn admin ,如果是这样的话,那你按照上面的相关提示进行补全再试试吧
最后我们要修改一下nsswitch文件规定系统进行用户认证的规则
现在你可以在本地进行用户的登入测试了,good luck!
可以先进行
第二部分
参见这里:zz http://www.opinsys.fi/setting-up-openldap-on-ubuntu-10-04-alpha2
由于在10.04的时候安装slapd 系统没有进行默认的域名和系统管理员配置,所以操作就跟之前的有点不太一样
1、安装相关的软件,跟之前的一样
2、把需要的schemas加载到服务器上
3、建立所需的存储数据库,这个需要通过建立一个ldif文件来实现,以下就通过一个例子来说明:建立目录前缀为 dc=edu,dc=example,dc=org,数据库放在/var/lib/ldap/.
create_database.ldif:
用ldapadd 来修改cn=config 条目:
接着 把包含ou=People and ou=Groups的新数据库发布,以便存储用户和组的信息
init_database.ldif
同样用ldapadd 来进行修改
最后修改一下访问权限控制。在这里我们让所有用户都能够进行目录的读操作
acls.ldif:
修改数据库
一下的命令可以对之前的配置进行测试:
# Show the current configuration:
查看当前的配置
# Show the current data in the directory as anonymous user:
以陌生人身份查看当前目录结构下的数据
# Dump the database with metadata:
sudo slapcat
ok,ldap的基本配置基本搞定,接下来就可以按照之前的方法进行数据的导入操作鸟,best wishes!
客户端 设置不变,如上第一部分
下面简要说一下流程吧,希望对大家有所帮助:
由于10.04之后的配置又发生了点变化,这里再做点补充;见第二部分
第一部分:
主要参考: http://www.debuntu.org/ldap-server-and-linux-ldap-clients
http://wiki.ubuntu.org.cn/LDAPClientAuthentication
1. LDAP Server
1.1. 安装
主要安装一下套件:
代码:
# apt-get install slapd ldap-utils migrationtools
按照提示输入相关信息,这样在重新配置的时候就可以作较少的工作了
重新配置
代码:
#dpkg-reconfigure slapd
大致如下:
代码:
Omit OpenLDAP server configuration? ... No
DNS domain name: ... debuntu.local //根据自己需要输入,但必须和后面的相关地方保持一致
Name of your organization: ... Whatever & Co
Admin Password: XXXXX
Confirm Password: XXXXX
OK
BDB
Do you want your database to be removed when slapd is purged? ... No
Move old database? ... Yes
Allow LDAPv2 Protocol? ... No
DNS domain name: ... debuntu.local //根据自己需要输入,但必须和后面的相关地方保持一致
Name of your organization: ... Whatever & Co
Admin Password: XXXXX
Confirm Password: XXXXX
OK
BDB
Do you want your database to be removed when slapd is purged? ... No
Move old database? ... Yes
Allow LDAPv2 Protocol? ... No
由于现在新版本的2.4 以上版本的ldap都采用了新的数据库存储技术,因此可能就找不到像大家所说的sldap配置文件了,
现在都用新的数据格式存放在 /etc/ldap/slap.d/ 目录下面,dpkg-reconfigure slapd 可以实现ldap服务端的配置,按照要求填写即可,相信大家都能读懂里面的提示
现在我们已经设置好了域和管理员用户: “admin”
检查一下你是否可以顺利的访问你的LDAP服务:
输入:
代码:
$ ldapsearch -x -b dc=debuntu,dc=local
如果得到如下错误,可能是由于你的服务未开启:
代码:
ldap_bind: Can't contact LDAP server (-1)
启动服务:
代码:
# /etc/init.d/slapd start
1.2 建立数据库
我们可以通过 migrationtools 来很容易的导入本地的用户和用户组数据:
代码:
#cd /usr/share/migrationtools/
我们要先修改 migrationtools 的默认配置文件 migrate_common.ph 里面的参数:
代码:
$DEFAULT_MAIL_DOMAIN = "debuntu.local";
$DEFAULT_BASE = "dc=debuntu,dc=local";
$DEFAULT_BASE = "dc=debuntu,dc=local";
导出本地数据:
代码:
# ./migrate_group.pl /etc/group ~/group.ldif
# ./migrate_passwd.pl /etc/passwd ~/passwd.ldif
# ./migrate_passwd.pl /etc/passwd ~/passwd.ldif
可惜上面的脚本并没有帮我们创建 People 和 Group节点ou( Organisation Unit),因此我们要先建立他们,建立一个
people_group.lidf 如下:
代码:
dn: ou=People, dc=debuntu, dc=local
ou: People
objectclass: organizationalUnit
dn: ou=Group, dc=debuntu, dc=local
ou: Group
objectclass: organizationalUnit
ou: People
objectclass: organizationalUnit
dn: ou=Group, dc=debuntu, dc=local
ou: Group
objectclass: organizationalUnit
其实它的结构就是一棵树,先建立了这棵树的根, dc=debuntu,dc=com ,在dn的表示中都是从儿子到祖先的顺序进行的,在以后的实践中可以发现这一点,结构可以如下图所示两种,我们比较常用的是第二种
附件:
附件:
导入数据库的前阶段工作已经完成
好了,现在我们开始导入数据:
ps:如果people_group.lidf 直接从网页拷贝的话可能会有点问题,得用工具重新编辑一下
代码:
# ldapadd -x -W -D "cn=admin,dc=debuntu,dc=local" -f ~/people_group.ldif
# ldapadd -x -W -D "cn=admin,dc=debuntu,dc=local" -f ~/group.ldif
# ldapadd -x -W -D "cn=admin,dc=debuntu,dc=local" -f ~/passwd.ldif
# ldapadd -x -W -D "cn=admin,dc=debuntu,dc=local" -f ~/group.ldif
# ldapadd -x -W -D "cn=admin,dc=debuntu,dc=local" -f ~/passwd.ldif
其中:
* -x 指示我们不用 sasl
* -W 指定要输入密码再进行操作
* -D 识别系统管理员
* -f 指定要输入的文件
到目前为止,服务器端已经建立好了。
2、客户端
首先安装相关套件:
代码:
#apt-get install libnss-ldap libpam-ldap nscd
LDAP Account for root: cn=admin,dc=debuntu,dc=local
Password: XXXX
Make local root database admin: yes
Database require logging in: No
Root login account: cn=admin,dc=debuntu,dc=local
Root login password: XXXX
LDAP Account for root: cn=admin,dc=debuntu,dc=local
Password: XXXX
Make local root database admin: yes
Database require logging in: No
Root login account: cn=admin,dc=debuntu,dc=local
Root login password: XXXX
libnss-ldap 被用于名字解析, libpam-ldap 用 pm 通过LDAP来认证用户, nscd is 是一个查找用户、组、密码的守护进程它会对查询结果进行缓存
接下来修改相关的配置文件: 注意大部分只有 debain用户需要进行修改,ubuntu 9.10+在安装相关套件的时候已经帮你修改好了,所以ubuntu用户只需最后修改一下认证的开关文件就行 nsswitch.conf
代码:
#vi /etc/libnss-ldap.conf
host ldap
base dc=debuntu,dc=local
rootbinddn cn=admin,dc=debuntu,dc=local
#vi /etc/pam_ldap.conf
host ldap
base dc=debuntu,dc=local
rootbinddn cn=admin,dc=debuntu,dc=local
host ldap
base dc=debuntu,dc=local
rootbinddn cn=admin,dc=debuntu,dc=local
#vi /etc/pam_ldap.conf
host ldap
base dc=debuntu,dc=local
rootbinddn cn=admin,dc=debuntu,dc=local
这两个文件比较关键,如果你遇到客户端说
pam_ldap: error trying to bind (Invalid DN syntax)
那么很可能的原因就是 rootbinddn cn=admin,dc=debuntu,dc=local 有问题,因为在配置的时候只是生成 rootbinddn admin ,如果是这样的话,那你按照上面的相关提示进行补全再试试吧
代码:
#vi /etc/pam.d/common-account
account sufficient pam_ldap.so
account required pam_unix.so
#if you want user homedir to be created on first login
#session required pam_mkhomedir.so umask=0022 skel=/etc/skel/ silent
account sufficient pam_ldap.so
account required pam_unix.so
#if you want user homedir to be created on first login
#session required pam_mkhomedir.so umask=0022 skel=/etc/skel/ silent
代码:
#vi /etc/pam.d/common-auth
auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure use_first_pass
auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure use_first_pass
代码:
vi /etc/pam.d/common-password
password sufficient pam_ldap.so
password required pam_unix.so nullok obscure min=4 max=8 md5
#vi /etc/pam.d/common-session
session sufficient pam_ldap.so
session required pam_unix.so
session optional pam_foreground.so //有些系统可能会提示找不到这个直接注释掉就行,好像是没什么用
password sufficient pam_ldap.so
password required pam_unix.so nullok obscure min=4 max=8 md5
#vi /etc/pam.d/common-session
session sufficient pam_ldap.so
session required pam_unix.so
session optional pam_foreground.so //有些系统可能会提示找不到这个直接注释掉就行,好像是没什么用
最后我们要修改一下nsswitch文件规定系统进行用户认证的规则
代码:
# vim /etc/nsswitch.conf
passwd: files ldap
group: files ldap
shadow: files ldap
passwd: files ldap
group: files ldap
shadow: files ldap
现在你可以在本地进行用户的登入测试了,good luck!
可以先进行
代码:
getent passwd
检查一下是否正常工作了,如果还是不行就请
重启电脑
再试试吧
第二部分
参见这里:zz http://www.opinsys.fi/setting-up-openldap-on-ubuntu-10-04-alpha2
由于在10.04的时候安装slapd 系统没有进行默认的域名和系统管理员配置,所以操作就跟之前的有点不太一样
1、安装相关的软件,跟之前的一样
代码:
sudo apt-get install slapd ldap-utils
2、把需要的schemas加载到服务器上
代码:
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/misc.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/misc.ldif
3、建立所需的存储数据库,这个需要通过建立一个ldif文件来实现,以下就通过一个例子来说明:建立目录前缀为 dc=edu,dc=example,dc=org,数据库放在/var/lib/ldap/.
create_database.ldif:
代码:
# Load hdb backend module
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: {0}back_hdb
# Create the hdb database and place the files under /var/lib/ldap
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=edu,dc=example,dc=org
[color=#FF0000]#这里需要注意一下,如果你之前的服务器由配置过ldap的话可以考虑吧一下的admin的dn修改一下以便跟以前的配置保持一致这样就可以避免在客户端进行不必要的修改,-----delete me [复制的时候][/color]
olcRootDN: uid=admin,ou=People,dc=edu,dc=example,dc=org
olcRootPW: example
olcDbConfig: {0}set_cachesize 0 2097152 0 begin_of_the_skype_highlighting 0 2097152 0 end_of_the_skype_highlighting
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcDbIndex: uid pres,eq
olcDbIndex: cn,sn,mail pres,eq,approx,sub
olcDbIndex: objectClass eq
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: {0}back_hdb
# Create the hdb database and place the files under /var/lib/ldap
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=edu,dc=example,dc=org
[color=#FF0000]#这里需要注意一下,如果你之前的服务器由配置过ldap的话可以考虑吧一下的admin的dn修改一下以便跟以前的配置保持一致这样就可以避免在客户端进行不必要的修改,-----delete me [复制的时候][/color]
olcRootDN: uid=admin,ou=People,dc=edu,dc=example,dc=org
olcRootPW: example
olcDbConfig: {0}set_cachesize 0 2097152 0 begin_of_the_skype_highlighting 0 2097152 0 end_of_the_skype_highlighting
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcDbIndex: uid pres,eq
olcDbIndex: cn,sn,mail pres,eq,approx,sub
olcDbIndex: objectClass eq
用ldapadd 来修改cn=config 条目:
代码:
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f create_database.ldif
接着 把包含ou=People and ou=Groups的新数据库发布,以便存储用户和组的信息
init_database.ldif
代码:
dn: dc=edu,dc=example,dc=org
objectClass: dcObject
objectclass: organization
o: edu.example.org
dc: edu
description: LDAP root
dn: ou=People,dc=edu,dc=example,dc=org
objectClass: top
objectClass: organizationalUnit
ou: People
[color=#FF0000]#以前的Groups可能是Group,如果想和之前的配置文件保持一致请自行修改其一[/color]
dn: ou=Groups,dc=edu,dc=example,dc=org
objectClass: top
objectClass: organizationalUnit
ou: Groups
objectClass: dcObject
objectclass: organization
o: edu.example.org
dc: edu
description: LDAP root
dn: ou=People,dc=edu,dc=example,dc=org
objectClass: top
objectClass: organizationalUnit
ou: People
[color=#FF0000]#以前的Groups可能是Group,如果想和之前的配置文件保持一致请自行修改其一[/color]
dn: ou=Groups,dc=edu,dc=example,dc=org
objectClass: top
objectClass: organizationalUnit
ou: Groups
同样用ldapadd 来进行修改
代码:
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f init_database.ldif
最后修改一下访问权限控制。在这里我们让所有用户都能够进行目录的读操作
acls.ldif:
代码:
dn: olcDatabase={1}hdb,cn=config
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="uid=admin,ou=People,dc=edu,dc=example,dc=org" write by anonymous auth by self write by * none
olcAccess: {1}to dn.subtree="" by * read
olcAccess: {2}to * by dn="uid=admin,ou=People,dc=edu,dc=example,dc=org" write by * read
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="uid=admin,ou=People,dc=edu,dc=example,dc=org" write by anonymous auth by self write by * none
olcAccess: {1}to dn.subtree="" by * read
olcAccess: {2}to * by dn="uid=admin,ou=People,dc=edu,dc=example,dc=org" write by * read
修改数据库
代码:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f acls.ldif
一下的命令可以对之前的配置进行测试:
# Show the current configuration:
查看当前的配置
代码:
sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config
# Show the current data in the directory as anonymous user:
以陌生人身份查看当前目录结构下的数据
代码:
ldapsearch -x -h localhost -b dc=edu,dc=example,dc=org
# Dump the database with metadata:
sudo slapcat
ok,ldap的基本配置基本搞定,接下来就可以按照之前的方法进行数据的导入操作鸟,best wishes!
客户端 设置不变,如上第一部分