关于authlib集成windows ad失败的分析并解决[草稿]
2009-11-28 23:57
393 查看
作者:邓卫华 2009.11.28 23:56
在前面我写了一个由postfix+dovecot+windows ad (win2008)的用户帐户整合成功的文章,那么为什么我还写这个使用authlib来整合windows ad呢?其实造成我把精力改到authlib与ad整合的原因是因为我发现,这样的话就没有好用的Free的webmail软件来使用了。非常不方便。有小部份能测试成功,但是。。长得太丑了。。
目前free的产品中我感觉extmail还是非常不错了。至少在界面与操作与非常不错。可是经过测试以后发现extmail如果使用LDAP的则无法连接到AD服务器上认证成功。后来发现extmail可以使用authlib的认证功能,正是基于些原因造成我转向authlib 的测试。
对于这次我的postfix+authlib+sasl2+windows 2008 ad + extmail 用户帐户整合的过程下次在写吧。
Case:在authlib中查询WINDOWS AD时,如果base_dn设置为根的DN值,则无论任何用户查询都不会成功。
Reslove:必须把所有的用户存放在某个OU下面,然后在base_dn中写这个OU的DN值;如:ldap_base_dn= ou=51ctoMailUser,dc=51cto,dc=com
需要你要使用层级OU构,您可以在51ctomailuser这个OU下面在建子OU来达到您的分层结构。
以下是我的分析解决过程:
言归正转,首先我们来看看我的authldap.rc文件的配置;
[root@mail authlib]# cat authldaprc |grep -v "^#"
LDAP_URI ldap://10.0.3.3
LDAP_PROTOCOL_VERSION 3
LDAP_BASEDN dc=test,dc=com
LDAP_BINDDN vmail@test.com
LDAP_BINDPW 123
LDAP_AUTHBIND 1
LDAP_TIMEOUT 5
LDAP_MAIL sAMAccountName
LDAP_FILTER (objectClass=*)
LDAP_GLOB_UID vmail
LDAP_GLOB_GID 501
LDAP_HOMEDIR sAMAccountName
LDAP_MAILROOT /data/vmail
LDAP_DEREF never
LDAP_FULLNAME displayName
LDAP_CRYPTPW userPassword
#----end
ok,如果配置文件这样写的话用authtest会得到一个如下提示:
#authtest –s login test 123
Authentication FAILED: Input/output error
嗯,我就是在这里卡了很久。(这个时候我在本机安装了openldap进行测试发现一切正常).
后来一次我不小心把base_dn改了一下,突然就认证成功了。
改成如下设置:
(因为我在WINDOWS AD上建了一个叫mailuser的OU,并把所有的邮件用户都存放在这个OU里面)
LDAP_BASEDN ou=mailuser,dc=test,dc=com
然后在authtest –s login test 123
[root@mail authlib]# authdaemond restart
[root@mail authlib]# !authtest
authtest -s login test "123"
Authentication succeeded.
Authenticated: test (uid 1000, gid 501)
Home Directory: /data/vmail/test
Maildir: (none)
Quota: (none)
Encrypted Password: (none)
Cleartext Password: 123
Options: (none)
[root@mail authlib]#
ok,看到了吗?认证成功了,而且POP3和POSTFIX和EXTMAIL全部都认证成功。
两个配置文件我们发现只有base_dn不同;一个是ldap_base_dn=dc=test,dc=com,可以认认证成功的是:ldap_base_dn=ou=mailuser,dc=test,dc=com,而我的用户test 也是在mailuser这个OU下面。
现在我们在来分析一下authdaemond的日志。
[root@mail authlib]# tail -n 15 /var/log/debug.log
Nov 28 19:50:05 mail authdaemond: received auth request, service=login, authtype=login
Nov 28 19:50:05 mail authdaemond: authldap: trying this module
Nov 28 19:50:05 mail authdaemond: selected ldap protocol version 3
Nov 28 19:50:05 mail authdaemond: binding to LDAP server as DN 'vmail@test.com', password '123'
Nov 28 19:50:05 mail authdaemond: using search filter: (&(objectClass=*)(sAMAccountName=test))
Nov 28 19:50:05 mail authdaemond: one entry returned, DN: CN=test,OU=mailuser,DC=test,DC=com
Nov 28 19:50:05 mail authdaemond: raw ldap entry returned:
Nov 28 19:50:05 mail authdaemond: | displayName: test
Nov 28 19:50:05 mail authdaemond: | sAMAccountName: test
Nov 28 19:50:05 mail authdaemond: authldaplib: sysusername=<null>, sysuserid=1000, sysgroupid=501, homedir=/data/vmail/test, address=test, fullname=test, maildir=<null>, quota=<null>, options=<null>
Nov 28 19:50:05 mail authdaemond: authldaplib: clearpasswd=<null>, passwd=<null>
Nov 28 19:50:05 mail authdaemond: rebinding with DN 'CN=test,OU=mailuser,DC=test,DC=com' to validate password
Nov 28 19:50:05 mail authdaemond: authentication bind successful
Nov 28 19:50:05 mail authdaemond: Authenticated: sysusername=<null>, sysuserid=1000, sysgroupid=501, homedir=/data/vmail/test, address=test, fullname=test, maildir=<null>, quota=<null>, options=<null>
Nov 28 19:50:05 mail authdaemond: Authenticated: clearpasswd=123, passwd=<null>
看到两个粗体字了吗?现在我们在AD服务器的mailuser这个OU下面在建一个testuser的OU并把TEST用户移动到这此OU下面:cn=test,ou=testusre,ou=mailuser,dc=test,dc=com
在次进行authtest测试,成功。
那么如果我们把test用户移动到与mailuser同级的OU呢?还可以成功吗?
[root@mail authlib]# authtest -s login g1 "789!"
Authentication FAILED: Operation not permitted
[root@mail authlib]#
日志:
[root@mail authlib]# tail -n 15 /var/log/debug.log
Nov 28 19:51:29 mail ntpd[21118]: sendto(61.129.66.79) (fd=-1): Bad file descriptor
Nov 28 19:51:30 mail authdaemond: received auth request, service=login, authtype=login
Nov 28 19:51:30 mail authdaemond: authldap: trying this module
Nov 28 19:51:30 mail authdaemond: using search filter: (&(objectClass=*)(sAMAccountName=g1))
Nov 28 19:51:30 mail authdaemond: number of entries returned: 0 (but we need exactly 1)
Nov 28 19:51:30 mail authdaemond: authldap: REJECT - try next module
Nov 28 19:51:30 mail authdaemond: FAIL, all modules rejected
Nov 28 19:51:38 mail ntpd[21118]: sendto(114.80.81.1) (fd=-1): Bad file descriptor
Nov 28 19:51:43 mail authdaemond: received auth request, service=login, authtype=login
Nov 28 19:51:43 mail authdaemond: authldap: trying this module
Nov 28 19:51:43 mail authdaemond: using search filter: (&(objectClass=*)(sAMAccountName=g1))
Nov 28 19:51:43 mail authdaemond: number of entries returned: 0 (but we need exactly 1)
Nov 28 19:51:43 mail authdaemond: authldap: REJECT - try next module
Nov 28 19:51:43 mail authdaemond: FAIL, all modules rejected
Nov 28 19:51:45 mail ntpd[21118]: sendto(210.34.128.32) (fd=-1): Bad file descriptor
看到没有,找不到g1用户。看到authlib的base_dn是不能直接写为dc=test,dc=com 这种格式的。应该还需要在DC下面在建一个OU,然后在这个OU中在建立子OU达到分层结构。别小看这个问题了,就这里花费了我3/4天的时间曾经一度想放弃了,结果天无绝人之路。
本文出自 “邓卫华” 博客,请务必保留此出处http://dengweihua1.blog.51cto.com/134932/236060
在前面我写了一个由postfix+dovecot+windows ad (win2008)的用户帐户整合成功的文章,那么为什么我还写这个使用authlib来整合windows ad呢?其实造成我把精力改到authlib与ad整合的原因是因为我发现,这样的话就没有好用的Free的webmail软件来使用了。非常不方便。有小部份能测试成功,但是。。长得太丑了。。
目前free的产品中我感觉extmail还是非常不错了。至少在界面与操作与非常不错。可是经过测试以后发现extmail如果使用LDAP的则无法连接到AD服务器上认证成功。后来发现extmail可以使用authlib的认证功能,正是基于些原因造成我转向authlib 的测试。
对于这次我的postfix+authlib+sasl2+windows 2008 ad + extmail 用户帐户整合的过程下次在写吧。
Case:在authlib中查询WINDOWS AD时,如果base_dn设置为根的DN值,则无论任何用户查询都不会成功。
Reslove:必须把所有的用户存放在某个OU下面,然后在base_dn中写这个OU的DN值;如:ldap_base_dn= ou=51ctoMailUser,dc=51cto,dc=com
需要你要使用层级OU构,您可以在51ctomailuser这个OU下面在建子OU来达到您的分层结构。
以下是我的分析解决过程:
言归正转,首先我们来看看我的authldap.rc文件的配置;
[root@mail authlib]# cat authldaprc |grep -v "^#"
LDAP_URI ldap://10.0.3.3
LDAP_PROTOCOL_VERSION 3
LDAP_BASEDN dc=test,dc=com
LDAP_BINDDN vmail@test.com
LDAP_BINDPW 123
LDAP_AUTHBIND 1
LDAP_TIMEOUT 5
LDAP_MAIL sAMAccountName
LDAP_FILTER (objectClass=*)
LDAP_GLOB_UID vmail
LDAP_GLOB_GID 501
LDAP_HOMEDIR sAMAccountName
LDAP_MAILROOT /data/vmail
LDAP_DEREF never
LDAP_FULLNAME displayName
LDAP_CRYPTPW userPassword
#----end
ok,如果配置文件这样写的话用authtest会得到一个如下提示:
#authtest –s login test 123
Authentication FAILED: Input/output error
嗯,我就是在这里卡了很久。(这个时候我在本机安装了openldap进行测试发现一切正常).
后来一次我不小心把base_dn改了一下,突然就认证成功了。
改成如下设置:
(因为我在WINDOWS AD上建了一个叫mailuser的OU,并把所有的邮件用户都存放在这个OU里面)
LDAP_BASEDN ou=mailuser,dc=test,dc=com
然后在authtest –s login test 123
[root@mail authlib]# authdaemond restart
[root@mail authlib]# !authtest
authtest -s login test "123"
Authentication succeeded.
Authenticated: test (uid 1000, gid 501)
Home Directory: /data/vmail/test
Maildir: (none)
Quota: (none)
Encrypted Password: (none)
Cleartext Password: 123
Options: (none)
[root@mail authlib]#
ok,看到了吗?认证成功了,而且POP3和POSTFIX和EXTMAIL全部都认证成功。
两个配置文件我们发现只有base_dn不同;一个是ldap_base_dn=dc=test,dc=com,可以认认证成功的是:ldap_base_dn=ou=mailuser,dc=test,dc=com,而我的用户test 也是在mailuser这个OU下面。
现在我们在来分析一下authdaemond的日志。
[root@mail authlib]# tail -n 15 /var/log/debug.log
Nov 28 19:50:05 mail authdaemond: received auth request, service=login, authtype=login
Nov 28 19:50:05 mail authdaemond: authldap: trying this module
Nov 28 19:50:05 mail authdaemond: selected ldap protocol version 3
Nov 28 19:50:05 mail authdaemond: binding to LDAP server as DN 'vmail@test.com', password '123'
Nov 28 19:50:05 mail authdaemond: using search filter: (&(objectClass=*)(sAMAccountName=test))
Nov 28 19:50:05 mail authdaemond: one entry returned, DN: CN=test,OU=mailuser,DC=test,DC=com
Nov 28 19:50:05 mail authdaemond: raw ldap entry returned:
Nov 28 19:50:05 mail authdaemond: | displayName: test
Nov 28 19:50:05 mail authdaemond: | sAMAccountName: test
Nov 28 19:50:05 mail authdaemond: authldaplib: sysusername=<null>, sysuserid=1000, sysgroupid=501, homedir=/data/vmail/test, address=test, fullname=test, maildir=<null>, quota=<null>, options=<null>
Nov 28 19:50:05 mail authdaemond: authldaplib: clearpasswd=<null>, passwd=<null>
Nov 28 19:50:05 mail authdaemond: rebinding with DN 'CN=test,OU=mailuser,DC=test,DC=com' to validate password
Nov 28 19:50:05 mail authdaemond: authentication bind successful
Nov 28 19:50:05 mail authdaemond: Authenticated: sysusername=<null>, sysuserid=1000, sysgroupid=501, homedir=/data/vmail/test, address=test, fullname=test, maildir=<null>, quota=<null>, options=<null>
Nov 28 19:50:05 mail authdaemond: Authenticated: clearpasswd=123, passwd=<null>
看到两个粗体字了吗?现在我们在AD服务器的mailuser这个OU下面在建一个testuser的OU并把TEST用户移动到这此OU下面:cn=test,ou=testusre,ou=mailuser,dc=test,dc=com
在次进行authtest测试,成功。
那么如果我们把test用户移动到与mailuser同级的OU呢?还可以成功吗?
[root@mail authlib]# authtest -s login g1 "789!"
Authentication FAILED: Operation not permitted
[root@mail authlib]#
日志:
[root@mail authlib]# tail -n 15 /var/log/debug.log
Nov 28 19:51:29 mail ntpd[21118]: sendto(61.129.66.79) (fd=-1): Bad file descriptor
Nov 28 19:51:30 mail authdaemond: received auth request, service=login, authtype=login
Nov 28 19:51:30 mail authdaemond: authldap: trying this module
Nov 28 19:51:30 mail authdaemond: using search filter: (&(objectClass=*)(sAMAccountName=g1))
Nov 28 19:51:30 mail authdaemond: number of entries returned: 0 (but we need exactly 1)
Nov 28 19:51:30 mail authdaemond: authldap: REJECT - try next module
Nov 28 19:51:30 mail authdaemond: FAIL, all modules rejected
Nov 28 19:51:38 mail ntpd[21118]: sendto(114.80.81.1) (fd=-1): Bad file descriptor
Nov 28 19:51:43 mail authdaemond: received auth request, service=login, authtype=login
Nov 28 19:51:43 mail authdaemond: authldap: trying this module
Nov 28 19:51:43 mail authdaemond: using search filter: (&(objectClass=*)(sAMAccountName=g1))
Nov 28 19:51:43 mail authdaemond: number of entries returned: 0 (but we need exactly 1)
Nov 28 19:51:43 mail authdaemond: authldap: REJECT - try next module
Nov 28 19:51:43 mail authdaemond: FAIL, all modules rejected
Nov 28 19:51:45 mail ntpd[21118]: sendto(210.34.128.32) (fd=-1): Bad file descriptor
看到没有,找不到g1用户。看到authlib的base_dn是不能直接写为dc=test,dc=com 这种格式的。应该还需要在DC下面在建一个OU,然后在这个OU中在建立子OU达到分层结构。别小看这个问题了,就这里花费了我3/4天的时间曾经一度想放弃了,结果天无绝人之路。
本文出自 “邓卫华” 博客,请务必保留此出处http://dengweihua1.blog.51cto.com/134932/236060
相关文章推荐
- 关于authlib集成windows ad失败的分析并解决[草稿]
- 关于Lync2010与Exchange2010 集成失败的原因分析过程 推荐
- 关于对话框DoModal()函数调用失败的原因分析
- Jquery Ajax请求文件下载操作失败的原因分析及解决办法
- struts2日期转换在Win10上失败问题的分析和解决
- 系统启动失败的原因分析及解决办法
- 关于Android studio中os文件导入失败的解决方式
- 关于大话西游2在安装后运行提示拷贝临时文件失败,请确认磁盘空间、客户端是否在运行和运行客户的权限的解决办法
- 关于“Web 创作组件” 解决MS Office 2007找不到Office.zh-cn问题以及VS2008 SP1 安装失败需指定visualwebdeveloperww.msi所在路径
- 关于水晶报表加载失败的解决办法.
- 关于Hibernate 5 和 Hibernate 4 在创建SessionFactory的不同点分析(解决 org.hibernate.MappingException: Unknown entit
- 关于dedecms近期频繁出现[错误警告:连接数据库失败..]错误的解决方法
- 关于python pyqt5安装失败问题的解决方法
- 关于COM类工厂80070005和8000401a错误分析及解决办法
- 关于DllRegisterServer的调用失败的问题解决办法
- 关于"建立空文档失败"的问题的分析
- 关于SqlServer服务无法启动的症状分析和解决方法
- 关于使用spring框架的时候抽象类中注入其他实现类失败的解决方法
- 关于解决my eclipse 2014破解失败的问题
- 关于优酷视频上传失败或暂停之后一直处于上传中或者处理中删除不掉的解决方法