LDAP统一验证的理解

时间:2022-11-04 12:45:16

接触ldap,可以说是从iRedMail开始,对这个的了解和认识也一点一点增加。

大家其实都知道通过LDAP可以实现身份统一验证,大家只需要记住一套的用户名和密码就可以。不过不同的软件实现的方式,会有很大的差异,我就把我了解,接触过的,总结一下。

1:php-ldap

现在开源的程序,php的很多,那么php的程序,如果让用户采用ldap的验证呢,其实他是需要php-ldap类似的模块,让php支持ldap,这样就可以实现直接去验证。

很多开源的web应用,如SguarCRM,WordPress,其实应该都是类似的方式。对于python,估计也是一样。

2:直接查询ldap

这个就以OpenVPN为例,实现OpenVPN的ldap验证,方式应该不少,我至少知道3种,这其实有时候让大家感觉很困惑的地方,为啥同一个功能,不同文章的做法不一样。

最省事的方式,就是让OpenVPN直接查询ldap,也就是通过OpenVPN的ldap插件来实现。现在centos和Ubuntu10.04,都已经提供现成的包,直接安装就可以,我已经成功实现。相关的文章,大家可以搜索howtoforge。

http://www.howtoforge.com/setting-up-an-openvpn-server-with-authentication-against-openldap-on-ubuntu-10.04-lts

http://www.howtoforge.com/using-iredmail-and-openvpn-for-virtual-email-hosting-and-vpn-services-centos-5.4

这个其实和邮件系统也是类似,很多人实现邮件系统和微软AD整合,需要安装很多别的软件,不过iRedMail实现的方式也是采用最简单的方式,直接设置Postfix,Dovecot去查询微软的ldap。

3:ldap schema

直接查询ldap,一般就只能返回用户名和密码是否正确,让用户使用。不过对于用户具备什么权限,就无法实现。通过LDAP的schema,就可以实现用户的权限的设置。

这个就PureFTP为例子,由于PureFTP提供schema,这样我们不但可以提供用户的统一验证,还可以在ldap上给用户设置权限。

如果你实现samba的ldap验证,其实也是类似,由于有samba的schema,所以你可以在ldap上设置你的权限。

4:PAM-ldap

PAM类似一个接口,例如ssh,他是通过pam来验证,那么我们可以通过pam-ldap来实现ldap的验证。Openvpn,其实也是支持pam验证,那么它也是可以通过这种方式实现ldap的验证。

5:Radius-ldap

这个是我这几天折腾的东西。其实OpenVPN还支持Radius,也就是说,你还可以通过Radius-ldap的方式,实现ldap验证。

我研究Radius,主要是希望解决无线网络使用ldap验证。这样看上去更加安全。

Radius,感觉有点类似pam,通过Radius,他也是可以实现mysql和ldap的验证。

很多路由器,AP,他们是没有ldap的验证选项,他就只能通过Radius来实现。

上次曾经看过,RouterOS是否支持ldap验证,后来看论坛,RouterOS支持Radius,所以你可以配置Radius采用ldap验证。

6:apache-ldap

这其实需要你的apache支持ldap,如果你是编译apache,需要你加入ldap的支持,如果是rpm,好像都是支持的。

iRedMail里的awstat,就是使用apache的ldap验证来实现的。你访问的时候,会跳出一个框,让你输入用户名和密码,他会查询ldap。

iRedMail里awstats 使用apache验证。

<Directory /var/www/awstats/>
DirectoryIndex awstats.pl
Options ExecCGI
order deny,allow
allow from all
#allow from 127.0.0.1

AuthName "Authorization Required"
AuthType Basic

AuthBasicProvider ldap
AuthzLDAPAuthoritative   Off

AuthLDAPUrl   ldap://127.0.0.1:389/o=domainAdmins,dc=iredmail,dc=org?mail?sub?(&(objectclass=mailAdmin)(accountStatus=active))

AuthLDAPBindDN "cn=vmail,dc=iredmail,dc=org"
AuthLDAPBindPassword "password"

Require valid-user