免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5012 | 回复: 0
打印 上一主题 下一主题

[ldap] [原]创建基于ldap的apache目录验证 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-04 15:56 |只看该作者 |倒序浏览
创建基于ldap的apache目录验证

软件:openldap
     ldapclient/server
     apache:添加mod_authz_ldap支持

1:设置ldap和创建ldap数据库
apache的authz_ldap module通过匹配在ldap server中的attributetype:usePassword来验证密码,所以在ldap存储设计中一定要使用这个attribute。而这个attribute是openldap所预先定义好的,它属于inetOrgPerson这样一个objectclass,我们设计的数据的objectClass就应该是inetOrgPerson或者它的一个子类。
这里有必要讲一下ldap中的objectClass和attributetype。在我看来,objectClass就相当于普通数据库中的一个table,attributetype就是table中的一个coloum。与数据库中的table,coloum不同的是,ldap中的objectClass呈现一种类似与面向对象编程中的继承关系,比如 organization->dcObject->top。top就是顶层objectClass,而 dcObject,organization都是“继承”它而来。我们需要使用inetOrgPerson中的userPassword,因此可以直接用这个objectClass,也可以定义一个通过继承它而来的objectClass。objectClass可以定义must和may两种attributetype,意思是必须和不是必须的attributetype,在inetOrgPerson中sn和cn是必须的(我不知道这两个具体代表什么意思),但我们并不需要它,因此我怀疑应该有其他不通过继承inetOrgPerson来使用userPassword的方法,如果哪位高手明白的话,请不吝赐教。

好,说了一堆,现在正式来创建ldap数据项。

  1. attributetype (1.1.2.2.2.2
  2.          NAME 'userName'
  3.          DESC 'Employee User Name'
  4.          EQUALITY caseIgnoreMatch
  5.          SUBSTR caseIgnoreSubstringsMatch
  6.          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )

  7. objectclass (1.1.2.2.1
  8.         NAME 'Employee'
  9.         SUP inetOrgPerson
  10.         STRUCTURAL
  11.         MUST ( userName )
  12.     )
复制代码

在这里我创建了一个叫rdpsUser的objectClass,SUP inetOrgPerson表示它是继承inetOrgPerson而来,并且有一个必须的userName。这个userName使用来存储网页验证时输入的用户名的,当然我们也可是使用inetOrgPerson已有的如sn来存储,而且那样的话都没有必要建立一个新的objectClass,但在这里为了演示如何定义schema,并为了数据库的易读性,还是创建一个新的。

把它另存为/.../openldap/schema/what_ever_you_call_it.schema,然后在slapd.conf里将它include进去。重启ldap以验证schema的正确性。

现在来创建ldap的存储结构,相当于创建数据库的table
创建ldap init文件initial_create.ldif
  1. dn: dc=dps,c=us
  2. objectClass: organization
  3. objectClass: dcObject
  4. objectClass: top
  5. o: dps-us
  6. dc: dps

  7. dn: o=dps-us,dc=dps,c=us
  8. objectClass: organization
  9. objectClass: dcObject
  10. o: dps-us
  11. dc: dps

  12. dn: ou=employees,o=dps,dc=dps,c=us
  13. objectClass: organizationalUnit
  14. ou: employees
复制代码

这里假设了slapd.conf里设置是这样的
  1. suffix      "dc=dps,c=us"
  2. rootdn      "cn=Manager,dc=dps,c=us"
  3. rootpw            secret
复制代码

注:这段使用来设置ldap服务器的root权限,不知道是否一定需要把ldap init文件的root dn设置为和suffix一样,呼唤明白人

关闭ldap
  1. /etc/init.d/ldap stop
复制代码

将数据库定义导入ldap
  1. slapadd -v -l initial_create.ldif
  2. /etc/init.d/ldap start
复制代码

注:我通过yum install安装的ldap,第一次导入这些的时候出现了数据文件的owner不是ldap用户的错误信息,使用chown改成ldap即可

导入数据:
创建内容为如下的data.ldif
  1. dn: userName=fduan,ou=employees,o=dps,dc=dps,c=us
  2. objectClass: top
  3. objectClass: inetOrgPerson
  4. objectClass: rdpsEmployee
  5. userPassword: {crypt}$1$d5TsJc7e$1qEaguOMwU9.89opV3BH1.
  6. userName: fduan
  7. sn: fduan
  8. cn: fduan
复制代码

  1. ldapadd -x -D 'cn=Manager,dc=dps,c=us' -w secret -f data.ldif
复制代码


注:userPassword可以使用明文和加密方式存储,可以使用slappasswd来生成加密的字段,crypt是linux /etc/shadow的加密方式,所以可以使用ldap来存储服务器用户的密码
  1. slappasswd -h{MD5} -s secret
  2. {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==
复制代码



2:为http服务目录添加使用ldap验证的功能
需要为apache安装mod_authz_ldap,还有一个mod_auth_ldap的模块,别搞混了.
假设需要添加验证的目录是/var/www/elog/
首先打开目录.htaccess的override功能
  1. <Directory "/var/www/elog">
  2.     AllowOverride all
  3.     Order allow,deny
  4.     Allow from all
  5. </Directory>
复制代码

在/var/www/elog里面创建.htaccess,添加如下内容

  1. AuthzLDAPMethod ldap
  2. AuthName AuthzLDAP
  3. AuthType Basic

  4. AuthzLDAPServer "serverName"

  5. AuthzLDAPUserBase ou=employees,o=dps-us,dc=dps,c=us
  6. #这是存数据的DN
  7. AuthzLDAPUserKey userName
  8. #这是用来验证的attributetype,所以说不一定要用userName
  9. AuthzLDAPLogLevel info
  10. Order deny,allow
  11. Deny from all
  12. require valid-user
  13. satisfy any
复制代码



这样应该通过ldap来做网页的验证了。

另:打开ldap的log
openldap的log默认是不打开的,要打开在/etc/syslog.conf或rsyslog.conf里面加入
  1. local4.*   -/var/log/ldap/ldap.log
复制代码

[ 本帖最后由 redicaps 于 2009-2-5 14:08 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP