LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1685|回复: 7

ldap 问题集(第一个目标是用ldap+通讯录)

[复制链接]
发表于 2005-10-30 20:47:40 | 显示全部楼层 |阅读模式
openldap-2.1.16

在/usr/local/BerkeleyDB.4.1目录下。安装完成后,要把/usr/local/BerkeleyDB.4.1/lib的库路径加到/etc/ld.so.conf文件内,添加完成后执行一次ldconfig,

env CPPFLAGS="-I/usr/local/BerkeleyDB.4.1/include" LDFLAGS="-L/usr/local/BerkeleyDB.4.1/lib" ./configure --prefix=/usr/local/openldap --enable-ldbm

make depend ;make ;  make test ; make install ; /usr/sbin/slapd


[root@shlinux root]# ldapadd -f root.ldif -D "cn=root,o=smb,dc=sh,dc=excellabc,dc=com,dc=cn" -w secret -x
adding new entry "o=smb, dc=sh, dc=excellabc, dc=com, dc=cn"

adding new entry "cn=root, o=smb, dc=sh, dc=excellabc, dc=com, dc=cn"

[root@shlinux root]# ldapsearch -b "o=smb, dc=sh, dc=excellabc, dc=com, dc=cn" -x
# extended LDIF
#
# LDAPv3
# base <o=smb, dc=sh, dc=excellabc, dc=com, dc=cn> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 0 Success

# numResponses: 1
 楼主| 发表于 2005-10-30 23:00:09 | 显示全部楼层
[root@shlinux root]# ldapadd -f testldap.ldif -D "cn=root,o=smb,dc=sh,dc=excellabc,dc=com,dc=cn" -w secret -x
adding new entry "cn=testldap,o=smb,dc=sh,dc=excellabc,dc=com,dc=cn"


[root@shlinux root]# ldap
ldapadd      ldapcompare  ldapdelete   ldapmodify   ldapmodrdn   ldappasswd   ldapsearch   ldapwhoami
[root@shlinux root]# ldapsearch -b "cn=root,o=smb,dc=sh,dc=excellabc,dc=com,dc=cn" -x
# extended LDIF
#
# LDAPv3
# base <cn=root,o=smb,dc=sh,dc=excellabc,dc=com,dc=cn> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2

result: 0 Success

# numResponses: 1

为什么加了一个也查找不到呢???
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-31 00:49:47 | 显示全部楼层
我重新来过,又可以找到了

但是
/usr/sbin/slapd
好像只有没次都要重新来过,当停止过后,不知道为什么呢...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-7 15:25:54 | 显示全部楼层
[root@shlinux bin]# slapd -t
config check succeeded

slapd -d 256
bdb_initialize: Sleepycat Software: Berkeley DB 4.1.25: (December 19, 2002)
bdb_db_init: Initializing BDB database
slapd starting



ps aux | grep slapd
root     23995  0.0  0.3  9916 2788 ?        S    15:04   0:00 slapd -f /usr/local/openldap/etc/openldap/slapd.conf
root     24076  0.0  0.1  2944  792 pts0     R    15:06   0:00 grep slapd



telnet localhost 389
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

[root@shlinux bin]# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
# extended LDIF
#
# LDAPv3
# base <> with scope base
# filter: (objectclass=*)
# requesting: namingContexts
#

#
dn:
namingContexts: dc=sh,dc=excellabc,dc=com,dc=cn

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1



[root@shlinux root]# cat Manager.ldif
dn: dc=sh,dc=excellabc,dc=com,dc=cn
objectClass: dcObject
objectClass: organization
o: ShangHai Adeptech Company
dn: cn=Manager,dc=sh,dc=excellabc,dc=com,dc=cn
objectclass: organizationalRole
cn:Manager

有如下错误
ldap_sasl_interactive_bind_s: No such attribute (16)


cat /usr/local/openldap/etc/openldap/slapd.conf | grep ^[a-zA-Z]
include         /usr/local/openldap/etc/openldap/schema/core.schema
include         /usr/local/openldap/etc/openldap/schema/corba.schema
include         /usr/local/openldap/etc/openldap/schema/cosine.schema
include         /usr/local/openldap/etc/openldap/schema/java.schema
include         /usr/local/openldap/etc/openldap/schema/nis.schema
include         /usr/local/openldap/etc/openldap/schema/inetorgperson.schema
include         /usr/local/openldap/etc/openldap/schema/misc.schema
include         /usr/local/openldap/etc/openldap/schema/openldap.schema
pidfile         /usr/local/openldap/var/slapd.pid
argsfile        /usr/local/openldap/var/slapd.args
database        bdb
suffix          "dc=sh,dc=excellabc,dc=com,dc=cn"
rootdn          "cn=Manager,dc=sh,dc=excellabc,dc=com,dc=cn"
rootpw          secret
directory       /usr/local/openldap/var/openldap-data
index   objectClass                     eq,pres
index   ou,cn,mail,surname,givenname    eq,pres,sub
index   uidNumber,gidNumber,loginShell  eq,pres
index   uid,memberUid                   eq,pres,sub


cat /usr/local/openldap/etc/openldap/ldap.conf | grep ^[a-zA-z]
BASE    dc=sh, dc=excellabc, dc=com, dc=cn
HOST    127.0.0.1


之前我在windows客户端是有找到一些资料的,不过因为dc不太直观,我就改,改后就不行,不行我就重装db,后重新openldap,是tar包.重新配置正好了解的更加清楚..而现在还是有问题...如何处理.

LinuxSir园豪杰多结义 斩LDAP英雄屡立功

来吧...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-8 22:36:57 | 显示全部楼层
目前状况

ldapsearch -x -b 'dc=sh,dc=excellabc,dc=com,dc=cn
';
# extended LDIF
#
# LDAPv3
# base <dc=sh,dc=excellabc,dc=com,dc=cn
> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# sh.excellabc.com.cn
dn: dc=sh,dc=excellabc,dc=com,dc=cn
objectClass: dcObject
objectClass: organization
dc: sh
o: Corporation
description: excellabc Corporation

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1


可是
[root@onespace peter]# cat peter.ldif
dn: cn=peter,dc=sh,dc=excellabc,dc=com,dc=cn
objectClass: inetOrgPerson
cn: testcn
sn: testsn
mail: test@test.com


ldapadd -x -D "cn=Manager,dc=sh,dc=excellabc,dc=com,dc=cn" -w secret -f peter.ldif
adding new entry "cn=peter,dc=sh,dc=excellabc,dc=com,dc=cn"
ldap_add: Invalid syntax (21)
        additional info: objectClass: value #0 invalid per syntax


兄弟们告诉我一下,这是为什么呢?


加油.....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-12 17:31:15 | 显示全部楼层
顶,一下.

因这问题....怪怪的.


还有比较有实际作用哦 ....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-21 08:58:11 | 显示全部楼层
1.
wget -t 0 -c http://downloads.sleepycat.com/db-4.4.16.tar.gz -b
2.
wget -t 0 -c ftp://ftp.openldap.org/pub/OpenL ... openldap-2.3.12.tgz -b
3.
tar -zxf db-4.4.16.tar.gz
4.
tar -zxf openldap-2.3.12.tgz
5.
cd db-4.4.16
6.
cp -r docs/ /var/www/html/docs/db/
7.
lynx http://localhost/docs/db/ref/build_unix/intro.html
Building for UNIX/POSIX systems
8.
cd ..
./db-4.4.16/dist/configure
9.
make
9.1.
libtool: link: `bt_compare.lo' is not a valid libtool object
make: *** [libdb-4.4.la] Error 1
9.1.1
若有如上错误请用.当然你可以
make realclean    ; ./db-4.4.16/dist/configure ; ./db-4.4.16/dist/configure
10.
make install
这步不要忘记了哦
会产生/usr/local/BerkeleyDB.4.4/这个目录等
11.
/usr/local/BerkeleyDB.4.4/lib的库路径加到/etc/ld.so.conf文件内,添加完成后执行一次ldconfig,

此步如果提示数据库的版本不一致时请用locate找到原来的如我的
/usr/lib/libdb-4.2.so
/usr/lib64/libdb-4.2.so
将其mv改名即可.
12.

ldap+通讯录已OK,
具体的内容会补上的...

cd ../openldap-2.3.12/

env CPPFLAGS="-I/usr/local/BerkeleyDB.4.4/include" LDFLAGS="-L/usr/local/BerkeleyDB.4.4/lib" ./configure --prefix=/usr/local/openldap

13.
make depend ; make ; make test ; make install ;

14.
vi /usr/local/openldap/etc/openldap/slapd.conf

database        bdb
suffix          "dc=excelladeptech,dc=twcn"
rootdn          "cn=peter,dc=excelladeptech,dc=twcn"
rootpw          peterldap

15.
ls /usr/local/openldap/etc/openldap/schema/
README                    dyngroup.schema           nis.schema
corba.schema              inetorgperson.schema      openldap.ldif
core.ldif                 inetorgperson.schema.old  openldap.schema
core.schema               java.schema               ppolicy.schema
cosine.schema             misc.schema
16.
将这些都仿这句加入到slapd.conf
include         /usr/local/openldap/etc/openldap/schema/core.schema

cat /usr/local/openldap/etc/openldap/ldap.conf | grep BASE
BASE    dc=excelladeptech,dc=twcn

17.
service ldap restart

Stopping slapd:                                                 [  OK  ]
Warning: no db_recover available for /usr/local/openldap/var/openldap-data
Starting slapd (ldap):                                          [FAILED]
(备注:不知道具体原因,现在启动我只能用
/usr/local/openldap/libexec/slapd

ps aux | grep slapd
root     29409  0.0  0.3 11368 2584 ?        S    11:01   0:00 /usr/local/openldap/libexec/slapd
root     29413  0.0  0.1  3012  792 pts/1    S    11:01   0:00 grep slapd
有它就代表基本正常了.


18.
cat /etc/openldap/peter-unit.ldif
#root node
dn: dc=excelladeptech,dc=twcn
objectClass: dcObject
objectClass: organization
o: Excell&Adeptech Company
dc: excelladeptech

#the mail node
dn: ou=account,dc=excelladeptech,dc=twcn
objectClass: organizationalUnit
ou: account

#for Manager information
dn: cn=peter,dc=excelladeptech,dc=twcn
objectClass: organizationalRole
cn:peter
19.
和slapd.con中的dc=excelladeptech,dc=twcn要一樣哦,我就錯了幾次,看?磉是浮躁了.
备注:其上文件有两个空行必不可少,每行最后一行不得有空格,不然就乱掉了.
20.
ldapadd -x -D "cn=peter,dc=excelladeptech,dc=twcn" -W -f /etc/openldap/peter-unit.ldif

這個過程之前總碰到各種錯誤,要麽是.schema中有被注釋或者是有些沒被注釋的問題吧.
因為我們的目標只是一個通?錄故我們可以?量簡化ldif文件,
21.
cat /etc/openldap/wangjun.ldif
dn: cn=wangjun,dc=excelladeptech,dc=twcn
cn: wangjun
objectClass: inetorgperson
objectClass: person
sn: panye
mail: wangjun@at-scale.com


ldapadd -x -D "cn=peter,dc=excelladeptech,dc=twcn" -W -f /etc/openldap/wangjun.ldif

如無錯誤提示就用ldapsearch?砜纯葱Ч.
前提是訪問控制我們可以簡單的在slapd.conf加句這個
access to *
         by * read

[root@shlinux schema]# ldapsearch -b "dc=excelladeptech,dc=twcn" -x
# extended LDIF
#
# LDAPv3
# base <dc=excelladeptech,dc=twcn> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# excelladeptech.twcn
dn: dc=excelladeptech,dc=twcn
objectClass: dcObject
objectClass: organization
o: Excell&Adeptech Company
dc: excelladeptech

# account, excelladeptech.twcn
dn: ou=account,dc=excelladeptech,dc=twcn
objectClass: organizationalUnit
ou: account

# wangjun, excelladeptech.twcn
dn: cn=wangjun,dc=excelladeptech,dc=twcn
cn: wangjun
objectClass: inetOrgPerson
objectClass: person
sn: panye
mail: wangjun@at-scale.com
是不會感覺OK了呢?還不是很規範吧.
所以我們要將dn: cn=wangjun,dc=excelladeptech,dc=twcn
刪除掉,而且我們還要用中文,不然不能用到?施的技術是沒有太大的價值的.

ldapdelete -x -D "cn=peter,dc=excelladeptech,dc=twcn" -W "cn=wangjun,dc=excelladeptech,dc=twcn"

就OK了,備註pete是ldap的管理員哦
25.
加一個中文的哦
cat /etc/openldap/lizhijuan.ldif
dn: cn=lizhijuan,ou=account,dc=excelladeptech,dc=twcn
cn: lizhijuan
objectClass: inetorgperson
objectClass: person
sn: 李志娟
mail: lzj@mis.com
(備註:如果你是用中文簡繁體輸入的請使用
autogb < /tmp/123 > /etc/openldap/lizhijuan.ldif  -i big5  -o utf8

ldapadd -x -D "cn=peter,dc=excelladeptech,dc=twcn" -W -f /etc/openldap/lizhijuan.ldif

導入OK了.

26.
辛苦了半天,是不是要體驗一下在windows的outlook express中設置看看效果呢?
(別鬧了,沒辦法畢竟客戶端用windows的多,有?際作用就好了)
工具->帳號-->目錄服務-->新增目錄服務-->
192.168.7.112
是要用這個目錄服務檢查地址
dc=excelladeptech,dc=twcn
當然我們可以用
ou=account,dc=excelladeptech,dc=twcn
差?是用
dc=excelladeptech,dc=twcn檢查的時候其下都可以找到,
用ou=account,dc=excelladeptech,dc=twcn只可以找到ou=account,dc=excelladeptech,dc=twcn下的,這就是ldif中dn的那一句的作用了.
dn: cn=lizhijuan,ou=account,dc=excelladeptech,dc=twcn

基本結束了,有時間細寫.

phpldapadmin
下載解壓到/var/www/html目錄下後
需要
php-xml
php-ldap

cp config.php.example config.php
就可以用
cn=peter,dc=excelladeptech,dc=twcn
去登錄管理了.

可在網頁上
ldap://192.168.7.112/dc=excelladeptech,dc=twcn??sub?
這樣按ctrl可連選去發送郵件了...
回复 支持 反对

使用道具 举报

发表于 2005-11-22 00:55:39 | 显示全部楼层
好,有时间我也试试。谢谢:)。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表