LDAP安装配置
  LDAP(轻量级目录访问服务),通过配置这个服务,我们也可以在linux下面使用目录的形式管理用户,就像windows下面的AD一样,方便我们管理。下面我们就一起来配置openldap服务。本文运行环境:CentOS 5。
 
 
 
  软件需求:
 
 
 
  db-4.7.25.tar.gz (http://www.oracle.com/technology/global/cn/software/products/berkeley-db/index.html)
 
 
 
  openldap-stable-20090411.tgz (http://www.openldap.org/software/download/)
 
 
 
  安装openldap
 
 
 
  1、安装BerkeleyDB
 
 
 
  # tar  zxvf  db-4.7.25.tar.gz
 
 
 
  # cd  db-4.7.25/build_unix
 
 
 
  # ../dist/configure
 
 
 
  # make
 
 
 
  # make  install
 
 
 
  # vi  /etc/ld.so.conf
 
 
 
  加入一下语句:
 
 
 
  /usr/local/BerkeleyDB.4.7/lib
 
 
 
  # /sbin/ldconfig
 
 
 
  2、安装openldap
 
 
 
  # tar  zxvf  openldap-stable-20090411.tgz
 
 
 
  # cd  openldap-2.4.16
 
 
 
  # ./configure  --prefix=/usr/local/openldap
 
 
 
  # make depend
 
 
 
  # make
 
 
 
  # make install
 
 
 
  3、检查安装结果
 
 
 
  安装好后,系统会自动生成一些.schema文件,我们可以使用命令:
  
  
 
 
   # ll  /usr/local/etc/openldap/schema/*.schema
  
 
  
   -r--r--r-- 1 root root  6190 Jun 13 15:58 /usr/local/etc/openldap/schema/collective.schema
  
 
  
   -r--r--r-- 1 root root  8063 Jun 13 15:58 /usr/local/etc/openldap/schema/corba.schema
  
 
  
   -r--r--r-- 1 root root 20499 Jun 13 15:58 /usr/local/etc/openldap/schema/core.schema
  
 
  
   -r--r--r-- 1 root root 73994 Jun 13 15:58 /usr/local/etc/openldap/schema/cosine.schema
  
 
  
   -r--r--r-- 1 root root 10388 Jun 13 15:58 /usr/local/etc/openldap/schema/duaconf.schema
  
 
  
   -r--r--r-- 1 root root  3289 Jun 13 15:58 /usr/local/etc/openldap/schema/dyngroup.schema
  
 
  
   -r--r--r-- 1 root root  6267 Jun 13 15:58 /usr/local/etc/openldap/schema/inetorgperson.schema
  
 
  
   -r--r--r-- 1 root root 13901 Jun 13 15:58 /usr/local/etc/openldap/schema/java.schema
  
 
  
   -r--r--r-- 1 root root  2387 Jun 13 15:58 /usr/local/etc/openldap/schema/misc.schema
  
 
  
   -r--r--r-- 1 root root  7640 Jun 13 15:58 /usr/local/etc/openldap/schema/nis.schema
  
 
  
   -r--r--r-- 1 root root  1514 Jun 13 15:58 /usr/local/etc/openldap/schema/openldap.schema
  
 
  
   -r--r--r-- 1 root root 20467 Jun 13 15:58 /usr/local/etc/openldap/schema/pmi.schema
  
 
  
   -r--r--r-- 1 root root 19603 Jun 13 15:58 /usr/local/etc/openldap/schema/ppolicy.schema
  
 
 
  配置openldap
 
 
 
  openldap的配置文件主要为/usr/local/openldap/etc/openldap/slapd.conf
#此句是用来将目录所用到的schema文件包含进来;openldap一般默认带有几个schema,在我们的配置文件安装目录下的schema目录中存 放。本句中的core.schema是LDAP V3中必须的,它给出了LDAP V3中最基本的attribute和objects的定义。其它的还有:corba.schema、dyngroup.schema、 java.schema nis.schema、openldap.schema、cosine.schema、 inetorgperson.schema、misc.schema、ppolicy.schema
 
 #此句是用来将目录所用到的schema文件包含进来;openldap一般默认带有几个schema,在我们的配置文件安装目录下的schema目录中存 放。本句中的core.schema是LDAP V3中必须的,它给出了LDAP V3中最基本的attribute和objects的定义。其它的还有:corba.schema、dyngroup.schema、 java.schema nis.schema、openldap.schema、cosine.schema、 inetorgperson.schema、misc.schema、ppolicy.schema
  include /usr/local/etc/openldap/schema/collective.schema
 
 
 
  include /usr/local/etc/openldap/schema/cosine.schema
 
 
 
  include /usr/local/etc/openldap/schema/duaconf.schema
 
 
 
  include /usr/local/etc/openldap/schema/dyngroup.schema
 
 
 
  include /usr/local/etc/openldap/schema/inetorgperson.schema
 
 
 
  include /usr/local/etc/openldap/schema/java.schema
 
 
 
  include /usr/local/etc/openldap/schema/misc.schema
 
 
 
  include /usr/local/etc/openldap/schema/nis.schema
 
 
 
  include /usr/local/etc/openldap/schema/openldap.schema
 
 
 
  include /usr/local/etc/openldap/schema/pmi.schema
 
 
 
  include /usr/local/etc/openldap/schema/ppolicy.schema
 
 
 
 
  #此句用来定义slapd进程运行时的pid文件,需要使用绝对路径。
 
 
 
   pidfile         /usr/local/openldap/var/run/slapd.pid
  
 
  
   #此句用来定义包含当前正在运行的slapd进程所用到的命令行参数的文件,需要使用绝对路径。
  
 
  
   argsfile        /usr/local/openldap/var/run/slapd.args
  
   
 
  
    #以下用来指定动态加载的后端模块。
   
 
  
   # Load dynamic backend modules:
  
 
  
   # modulepath    /usr/local/openldap/libexec/openldap
  
 
  
   # moduleload    back_bdb.la
  
 
  
   # moduleload    back_ldap.la
  
 
  
   # moduleload    back_ldbm.la
  
 
  
   # moduleload    back_passwd.la
  
 
  
   # moduleload    back_shell.la
  
   
 
  
    #以下是安全相关的声明语句。常用到的参数有五类,除了Require和security外还有Allow、Disallow和password-hash等。
   
 
   
    Require参数用来使管理员指定访问目录时必须遵循的规则和条件;这种指定可以是全局的,也可以仅用来限制对某个后端数据库的访问限制。
   
 
   
    security参数用来让管理员指定加强安全性的一般规则。
   
 
  
   # Sample security restrictions
  
 
  
   #       Require integrity protection (prevent hijacking)
  
 
  
   #       Require 112-bit (3DES or better) encryption for updates
  
 
  
   #       Require 63-bit encryption for simple bind
  
 
  
   # security ssf=1 update_ssf=112 simple_bind=64
  
 
  
   以下主要是用来定义访问控制列表。
  
 
  
   # Sample access control policy:
  
 
  
   #       Root DSE: allow anyone to read it
  
 
  
   #       Subschema (sub)entry DSE: allow anyone to read it
  
 
  
   #       Other DSEs:
  
 
  
   #               Allow self write access
  
 
  
   #               Allow authenticated users read access
  
 
  
   #               Allow anonymous users to authenticate
  
 
  
   #       Directives needed to implement policy:
  
 
  
   # access to dn.base="" by * read
  
 
  
   # access to dn.base="cn=Subschema" by * read
  
 
  
   # access to *
  
 
  
   #       by self write
  
 
  
   #       by users read
  
 
  
   #       by anonymous auth
  
 
  
   #
  
 
  
   # if no access controls are present, the default policy
  
 
  
   # allows anyone and everyone to read anything but restricts
  
 
  
   # updates to rootdn.  (e.g., "access to * by * read")
  
 
  
   #
  
 
  
   # rootdn can always read and write EVERYTHING!
  
 
  
   #######################################################################
  
 
  
   # BDB database definitions
  
 
  
   #######################################################################
  
 
  
    #定义使用的后端数据存储方式。其后可以跟的值有bdb、ldbm、passwd和shell。bdb指使用Berkley DB 4数据库。
   
 
   database        bdb
  
   #定义suffix,以下部分可以改作你的域名中相关的部分,如"dc=example,dc=com"。
  
 
  
   suffix          "dc=my-domain,dc=org"
  
 
  
   #定义此目录的超级管理员帐号,类同于系统中的root。由于访问控制对此用户是不生效的,因此存在很大的安全隐患。建议安装配置及调试完成以后移除此帐号。
  
 
  
   rootdn          "cn=Manager,dc=mydomain,dc=org"
  
 
  
   定义超级管理员帐号的密码,这里使用的是明文存储(secret即是其密码)的方式。
  
 
  
   rootpw          secret
  
 
  
    这是极不安全的,建议使用加密方式存储,可以使用的加密方式有: CRYPT、MD5、SMD5、SHA和SSHA。产生加密密码散列的方法是使用slappasswd命令,用-h选项指明加密时使用的方式。示例如下:
   
 
   
    # /usr/local/openldap/sbin/slappasswd -h {SSHA}
   
 
   
    New password:
   
 
   
    Re-enter new password:
   
 
   
    {SSHA}k2H1GPM/95VfgsKg2jZv9hV+2GCH04hC
   
 
  
   #这一句用来指定目录相关数据的存放位置。此目录最好只能由运行slapd进程的用户所有,推荐权限为700
  
 
  
   directory       /usr/local/openldap/var/openldap-data
  
 
  
   #此句用来指定slapd索引时用到的attribute,eq指索引时的匹配规则。主要是用来优化查询的。常用到的匹配规则有:approx(模糊匹配, approximate)、eq(精确匹配,equality)、pres(现值匹配,若某记录的此attribute没有值则不进行匹配, presence)和sub (子串匹配,substring)。
  
 
  
   index   objectClass     eq
  
 
  
   导入数据
  
 
  
   先建立一个创建起始结点所用的ldif文件
  
 
  
   #vi init.ldif
  
 
  
   输入以下内容(可以根据自己的需要修改)
  
 
  
   dn: dc=mydomain,dc=org   #定义根结点
  
 
  
   dc: mydomain
  
 
  
   objectClass: top
  
 
  
   objectClass: domain
  
 
  
   dn: ou=people,dc=mydomain,dc=org   #定义一个OU
  
 
  
   ou: people
  
 
  
   objectClass: organizationalUnit
  
 
  
   注意:ldif文件中,每一行中冒号后有一个空格,行尾一定不能有空格。不同记录一定要有空行,且不能包含空格。切记!
  
 
  
   导入数据时,可以离线也可以在线操作,这边先示范如何使用离线import命令导入到目录中(要先关闭slapd进程)
  
 
  
   #kill -INT `cat /usr/local/openldap/var/run/slapd.pid`
  
 
  
   # /usr/local/openldap/sbin/slapadd -v -l ./init.ldif
  
 
  
   bdb_db_open: Warning - No DB_CONFIG file found in directory /var/openldap/data-3: (2)
  
 
  
   Expect poor performance for suffix dc=mydomain,dc=org.
  
 
  
   added: "dc=mydomain,dc=org" (00000001)
  
 
  
   added: "ou=people,dc=mydomain,dc=org" (00000002)
  
 
  
   命令中:
  
 
  
   -v选项表示启用verbose模式,即输出执行中的具体信息;
  
 
  
   -l表示后面附加ldif文件。
  
 
  
   其它常用的选项还有:
  
 
  
   -d  指定debug向日志文件输出信息,后面跟日志级别
  
 
  
   -f  指定要读取的配置文件
  
 
  
   启动服务进程
  
 
  
   #/usr/local/openldap/libexec/slapd
  
 
  
   在线导入具体的记录信息ldif文件
  
 
  
   #vi users.ldif
  
 
  
   dn: cn=Tom Black,ou=people,dc=mydomain,dc=org   #定义人员1
  
 
  
   cn: Tom Black
  
 
  
   sn: Black
  
 
  
   mail: tom@126.com
  
 
  
   telephoneNumber: 371-6338-3522
  
 
  
   objectClass: inetOrgPerson
  
 
  
   dn: cn=Jerry Smith,ou=people,dc=mydomain,dc=org   #定义人员2
  
 
  
   cn: Jerry Smith
  
 
  
   sn: Smith
  
 
  
   mail: jerry@sina.com
  
 
  
   telephoneNumber: 371-6338-3521
  
 
  
   objectClass: inetOrgPerson
  
 
  
   导入ldif文件
  
 
  
   # /usr/local/openldap/bin/ldapmodify -D "cn=Manager,dc=mydomain,dc=org" -W -x -a -f users.ldif
  
 
  
   Enter LDAP Password:
  
 
  
   adding new entry "cn=Tom Black,ou=people,dc=mydomain,dc=org"
  
 
  
   adding new entry "cn=Jerry Smith,ou=people,dc=mydomain,dc=org"
  
 
  
   命令中:
  
 
  
   -D选项表示指定绑定到LDAP的DN;
  
 
  
   -W表示提示用户输入密码;
  
 
  
   -x表示使用简单身份验正方式,默认的是使用sasl进行验正;
  
 
  
   -a表示将文件中的条目添加至目录中,默认情况下,ldapmodify只修改现有记录;
  
 
  
   -f用来指定ldif文件;
  
 
  
   配置文件中的高级功能使用方法
  
 
  
   开启日志功能
  
 
  
   要启用日志功能,需要在编译时指定--enable-debug 选项,默认是允许的。要打开slapd的日志功能,需要在slapd.conf中的全局配置段添加loglevel指令,并后跟一个十进制数字表示的日志级别,如下所示:
  
 
  
   # Added logging parameters
  
 
  
   loglevel     256
  
 
  
   其日志级别如下所示:
  
 
  
   -1 记录所有的信息
  
 
  
   0 不记录debug
  
 
  
   1 跟踪功能调用的信息
  
 
  
   2 包处理的debug信息
  
 
  
   4 丰富的debug信息
  
 
  
   8 连接管理信息
  
 
  
   16 包的收发信息
  
 
  
   32 搜索过滤的处理过程
  
 
  
   64 配置文件的处理过程
  
 
  
   128 访问控制列表处理过程
  
 
  
   256 连接、操作及其结果的统计数据
  
 
  
   512 向客户端返回的结果的统计信息
  
 
  
   1024 与shell后端的通信信息
  
 
  
   2048 显示记录条目的分析信息
  
 
  
   4096 数据库缓存处理信息
  
 
  
   8192 数据库索引
  
 
  
   16384 从服务器数据同步资源消耗处理信息
  
 
  
   若要记录所有的debug日志,可以使用LOG_LEVEL4 syslogd系统日志来记录,这需要在slapd.conf中添加如下语句实现:
  
 
  
   local4.debug /var/log/slapd.log
  
 
  
   为BDB后端数据库实例指定在内存中的缓存空间大小
  
 
  
   在如下句子后
  
 
  
   DBDirectory: /usr/local/openldap/var/openldap-data
  
 
  
   后添加:
  
 
  
   DBCachesize: 2000
  
 
  
   常见报错
  
 
  
    1、ldapadd: no DN specified
   
 
   
    ldif文件格式不正确,可能还有其他原因。之前就可以,为了解决中文的问题,转换了下格式结果出现这个问题,修改回来后解决。
   
 
   
    2、ldap_add: Already exists (68)
   
 
   
    这个问题容易明白,在一个dn下存在一个与新加entry相同cn或ou的其他entry
   
 
   
    3、ldap_add: Invalid syntax (21)
   
 
   
    我这里是其中包含中文编码的问题
   
 
   
    4、ldap_add: No such object (32)
   
 
   
    如:adding new entry "ou=jisuanjikexue,o=cqupt,dc=com"
   
 
   
    表示父节点没有创建,需要先添加dn: ou=cqupt,dc=com
   
 
   
    5、ldap_bind: Invalid credentials (49)
   
 
   
    ldapadd -x -D "cn=Manager,o=cqupt,dc=com" -W -f webex.ldif 我的正确命令应该是这个。如果错写成   ldapadd -x -D "cn=Manager,o=cqupt,dc=com" -W -f webex.ldif 则会报上面的错误。 另外一个情况是ldif文件中的内容有错误。
   
 
   
    6、configure: error: BDB/HDB: BerkeleyDB version incompatible 
   
 
   
     #export CPPFLAGS="-I/usr/local/BerkeleyDB.4.8/include" 
    
 
    
     #export LDFLAGS="-L/usr/local/lib -L/usr/local/BerkeleyDB.4.8/lib -R/usr/local/BerkeleyDB.4.8/lib"  
    
 
    
     #export LD_LIBRARY_PATH="/usr/local/BerkeleyDB.4.8/lib" 
    
 
    
     环境变量问题:  
    
 
    
     env CPPFLAGS="-I /usr/local/BerkeleyDB.4.8/include" LDFLAGS="-L /usr/local/BerkeleyDB.4.8/lib"  ./configure --prefix=/openldap_with_crypt  --enable-modules   --enable-ldbm   --enable-crypt --enable-spasswd --enable-accesslog  --enable-spasswd
    
 
    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号