LDAP配置+主从+双主

环境:centos6.4 openldap 2.4.23 iptables selinux关闭
理论知识:

实践:
一. openldap安装

  1. Yum安装
    yum install -y openldap openldap-servers openldap-clients

  2. 准备配置文件
    cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

  3. 修改server配置文件slapd.conf # ldap.conf是客户端的配置文件
    vim /etc/openldap/slapd.conf

    1) 设置目录树的后缀
    suffix "dc=dianping,dc=com"
    2) 设置管理员DN
    rootdn "cn=admin,dc=example,dc=com"
    3) 设置管理员密码
    rootpw redhat
    或机密格式, 加密格式可通过 slappasswd命令来生成
    rootpw {SSHA}j6OO++o76F2yhww2Cg/+Hy8oDPixx6C3
    4) 设置ldap日志,在argsfile下面添加
    loglevel 1
    修改系统日志配置文件
    vim /etc/rsyslog.conf # centos5版应该是syslog.conf
    local4. /var/log/ldap.log
    service rsyslog restart
    5) 修改完配置文件后用以下命令生成新的配置文件,以后不再特殊说明
    service slapd start
    rm -rf /etc/openldap/slapd.d/

    slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
    chown -R ldap:ldap /etc/openldap/slapd.d/
    service slapd restart

  4. 修改权限
    chown -R ldap.ldap /etc/openldap/
    chown -R ldap.ldap /var/lib/ldap/

  5. 启动
    service slapd start
    netstat -tulnp | grep slapd # 查看是否监听389

  6. 初始化库测试库

vim example.ldif

dn:dc=dianping,dc=com
objectclass:dcObject
objectclass:organization
o:dianping, Inc.
dc:dianping

dn:cn=admin,dc=dianping,dc=com
objectclass:organizationalRole
cn:admin

导入到ldap中
ldapadd -x -W -D "cn=admin,dc=dianping,dc=com" -f example.ldif #会提示导入的数据
测试查找
ldapsearch -x -b "dc=dianping,dc=com" "(objectclass=*)"

  1. 用phpldapadmin测试(也可以安装ldap browser或者ldap administrator)
    下载地址 phpldapadmin.sourceforge.net/
    安装简介:1). 放到apache+php定义的vhost的RootDocument中
    2). 修改配置文件 cd ldapadmin/config/;cp config.php.example;config.php
    278行开始配置:
    $servers = new Datastore();
    $servers->newServer('ldap_pla');
    $servers->setValue('server','name','dc');
    $servers->setValue('server','host','localhost');
    $servers->setValue('server','port',389);
    $servers->setValue('server','base',array('dc=dianping,dc=com'));
    $servers->setValue('login','auth_type','session');
    $servers->setValue('login','bind_id','cn=admin,dc=dianping,dc=com'); # 初始登录的id,以下两行可以不定义
    $servers->setValue('login','bind_pass','redhat'); # 初始登录的密码

  2. 访问定义的ldapadmin vhost
    点击登录,登录dn: cn=admin,dc=dianping,dc=com 密码:redhat ##上面如果设置了,应该会默认填写着的

  3. 下载migrationtools,迁移主机的passwd shadow group等到ldap中
    yum -y install migrationtools
    cd /usr/share/migrationtools/
    vim migrate_common.ph # 71行左右
    $DEFAULT_MAIL_DOMAIN = "dianping.com";
    $DEFAULT_BASE = "dc=dianping,dc=com";

  4. 利用perl脚本转换为ldif
    ./migrate_base.pl > /tmp/base.ldif
    ./migrate_passwd.pl /etc/passwd > /tmp/passwd.ldif
    ./migrate_group.pl /etc/group > /tmp/group.ldif

  5. 导入到ldap中 # 删除/var/lib/ldap下面的数据库文件,重启slapd再导入
    ldapadd -x -W -D "cn=admin,dc=dianping,dc=com" -f /tmp/base.ldif
    ldapadd -x -W -D "cn=admin,dc=dianping,dc=com" -f /tmp/passwd.ldif
    ldapadd -x -W -D "cn=admin,dc=dianping,dc=com" -f /tmp/group.ldif
    重启slapd,在phpldapadmin中查看

二. 客户端使用ldap作为auth # centos6.3

  1. 安装LDAP客户端及依赖组件
    yum -y install openldap openldap-clients nss-pam-ldapd pam_ldap

  2. 增加BIND策略,避免LDAP无法连接时无法开机
    echo "bind_policy soft" >> /etc/openldap/ldap.conf

  3. 自动创建目录设置
    echo "session required pam_mkhomedir.so skel=/etc/skel umask=0077" >> /etc/pam.d/system-auth

  4. 设置LDAP启用
    备份一下: authconfig --savebackup=auth.bak
    启用新的:
    authconfig --enableldap --enableldapauth --enablemkhomedir --enableforcelegacy --disablesssd --disablesssdauth --ldapserver=192.168.2.128 --ldapbasedn="dc=dianping,dc=com " --update

    启用tls
    --enableldapstarttls --enableldaptls --ldaploadcacert=file:///etc/openldap/cacerts/cacert.pem

  5. 客户端登陆测试,如果不能登陆服务器端tail -f /var/log/ldap.log查看

三。 扩展一下

  1. 客户端支持sudo
    服务器端
    (1) 拷贝sudo schema
    cp /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema ## 拷贝schema
    (2) 配置文件导入schema
    vim /etc/openldap/slapd.conf
    include /etc/openldap/schema/sudo.schema
    rm -rf /etc/openldap/slapd.d/
    slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
    chown -R ldap:ldap /etc/openldap/slapd.d/

    service slapd restart
    (3) 建立sudo.ldif实例
    注: 导入ldap server中的有个ldapuser的用户,还有个test用户组
    vim sudo.ldif
    dn: ou=Sudoers,dc=dianping,dc=com
    objectClass: top
    objectClass: organizationalUnit
    ou: Sudoers

dn: cn=defaults,ou=Sudoers,dc=dianping,dc=com
objectClass: top
objectClass: sudoRole
cn: defaults
sudoOption: !visiblepw
sudoOption: always_set_home
sudoOption: env_reset
sudoOption: requiretty

dn: cn=ldapuser,ou=Sudoers,dc=dianping,dc=com ## dn
objectClass: top
objectClass: sudoRole
cn: ldappuser ## 对应的是用户名或者组
sudoCommand: ALL ## 可以执行的命令
sudoHost: ALL ## 可以登录的Host
sudoOption: !authenticate ## 是否需要输入密码
sudoRunAsUser: ALL ## 以哪个用户执行
sudoUser: ldapuser ## 用户或者组

dn: cn=%test,ou=Sudoers,dc=dianping,dc=com
objectClass: top
objectClass: sudoRole
cn: %test
sudoCommand: /bin/su
sudoHost: 192.168.2.134
sudoOption: !authenticate
sudoRunAsUser: ALL
sudoUser: %test

(2) 客户端
vi /etc/sudo-ldap.conf
uri ldap://192.168.2.128 # 如果有备用后面跟备用的
Sudoers_base ou=Sudoers,dc=dianping,dc=com
vi /etc/nsswitch.conf 增加
Sudoers: ldap files

(3) sudo测试

  1. 用户家目录是挂载着NFS
    NFS Server设置
    (1) 安装nfs
    yum -y install nfs-utils portmap
    (2) vim /etc/exportfs
    /home *(rw,sync)
    (3) 启动nfs,关闭防火墙
    service nfs start
    service iptables stop

    客户端设置:
    (1) 配置autofs服务
    vim /etc/auto.master
    /home auto.nfs

    vim /etc/auto.nfs

    • -fstype=nfs,rw,sync 192.168.2.128:/home/&

      说明,上面的*表示要挂载的某用户的目录,后面的&表示用户名。

    (2) 启动或重启autofs服务
    service autofs start|restart

    (3) 重新登录测试,mount查看

  2. 允许用户修改密码
    服务器端设置
    (1) 编辑配置文件slapd.conf, 注意:需要加载 database config之前
    vim /etc/openldap/slapd.conf

    access to attrs=userPassword
    by self write
    by anonymous auth
    by dn.base="cn=admin,dc=dianping,dc=com" write
    by * none

    access to
    by self write
    by dn.base="cn=admin,dc=dianping,dc=com" write
    by
    read

    (2) 重新生成配置文件
    rm -rf /etc/openldap/slapd.d/
    slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
    chown -R ldap:ldap /etc/openldap/slapd.d/

    service slapd restart

    (3) 客户端修改密码测试
    ldappasswd -D 'cn=admin,dc=dianping,dc=com' -W -S 'uid=ldapuser,ou=People,dc=dianping,dc=com' ## 以rootdn修改
    ldappasswd -D 'uid=ldapuser,ou=People,dc=dianping,dc=com' -W -S 'uid=ldapuser,ou=People,dc=dianping,dc=com' ## 以普通用户修改

    是不是很麻烦,其实passwd命令也是可以的
    passwd

    Changing password for user ldapuser.
    Enter login(LDAP) password:
    New password:
    Retype new password:
    LDAP password information changed for ldapuser
    passwd: all authentication tokens updated successfully.

三。 使用openssl加密

服务器端:

  1. 下载生成证书的perl脚本
    yum install openssl-perl openssl-devel

  2. 清空/etc/pki/CA下面的内容,否则脚本不会正常执行
    rm -rf /etc/pki/CA/*

  3. 编辑openssl.conf 设置默认参数,以防写错
    vim /etc/pki/tls/openssl.conf
    [ CA_default ]
    dir = /etc/pki/CA
    ...其它的默认
    default_days = 3650
    [ req_distinguished_name ]
    countryName_default = CN
    stateOrProvinceName_default = BeiJing
    localityName_default = BeiJing
    0.organizationName_default = dianping.inc
    organizationalUnitName_default = Tech

  4. 生成CA证书
    cd /etc/pki/tls/misc
    ./CA.pl -newca # 会提示输入密码,设置一个, 完成后会在CA中生成CA证书cacert.pem

    提示的参数默认即可

  5. 为ldap服务器生成证书
    ./CA.pl -newreq-nodes # 会提示输入一些信息,需要注意的是Common Name需要是客户端连接ldap服务器用的域名或者ip

  6. 为ldap证书签名
    ./CA.pl -sign

  7. 将证书移动到/etc/openldap/cacerts目录,修改权限
    mv new /etc/openldap/cacerts
    cd /etc/openldap/cacerts
    cp /etc/pki/CA/cacert.pem .
    chown ldap:ldap

    chmod 644 newcert.pem
    chmod 600 newkey.pem

  8. 修改配置文件slapd.conf,添加如下
    TLSCipherSuite HIGH:MEDIUM:+SSLv2:+TLSv1:+SSLv3
    TLSCACertificateFile /etc/openldap/cacerts/cacert.pem
    TLSCertificateFile /etc/openldap/cacerts/newcert.pem
    TLSCertificateKeyFile /etc/openldap/cacerts/newkey.pem
    TLSVerifyClient allow

    说明:
    never:默认选项,不验证客户端证书。
    allow:检查客户端证书,没有证书或证书错误,都允许连接。
    try:检查客户端证书,没有证书(允许连接),证书错误(终止连接)。
    demand | hard | true:检查客户端证书,没有证书或证书错误都将立即终止连接。

  9. 以ldaps方式运行slapd, 两种方法
    1) slapd -h 'ldaps:///'
    2) 修改 /etc/sysconfig/ldap
    SLAPD_LDAP=no # 不启用389
    SLAPD_LDAPS=yes # 启用636
    然后service slapd restart

    netstat -tulnp | grep slapd # 查看是不是636端口

  10. 修改客户端配置文件
    vim /etc/openldap/ldap.conf

    TLS_REQCERT allow
    TLS_CACERT /etc/openldap/cacerts/cacert.pem
    TLS_CACERTDIR /etc/openldap/cacerts
    URI ldaps://192.168.2.128
    BASE dc=dianping,dc=com

  11. 客户端测试
    ldapwhoami -v -x -Z # 匿名测试,最后显示success就是对的
    ldapsearch -x -b "dc=dianping,dc=com" -H ldaps://192.168.2.128 # search测试

四。 主从复制 1) 一主多从 2) 双主mirror模式
测试服务器: 主: 192.168.2.131 从: 192.168.2.128

  1. 基于tls的主从模式
    1) 两台机器上安装openldap server,并配置加密,两端的证书一致(不一致貌似有问题)
    yum -y install openldap-server openldap

    2) 修改主配置文件slapd.conf,添加,并重启
    modulepath /usr/lib/openldap
    modulepath /usr/lib64/openldap
    moduleload syncprov.la # 默认没有load

     index entryCSN,entryUUID        eq   # 加索引 
    
     overlay syncprov                      
     syncprov-checkpoint 100 10 
     syncprov-sessionlog 100 

    3) 修改从配置文件slapd.conf,并重启 注意,后面的注释不能有,下面是tab
    moduleload syncprov.la # 默认没有load
    modulepath /usr/lib/openldap
    modulepath /usr/lib64/openldap

    syncrepl rid=125 
        provider=ldaps://192.168.2.131:636         
        searchbase="dc=dianping,dc=com" 
        type=refreshOnly 
        interval=00:00:01:00                # 同步间隔,分别是天时分秒 
        filter="(objectClass=*)" 
        schemachecking=off 
        bindmethod=simple                   # 认证            
        binddn="cn=admin,dc=dianping,dc=com" 
        credentials=redhat                  # 密码 
        retry="60 +"                        # 重试时间 

    4) 主上面添加记录测试从是否复制过来
    主配置文件slapd.conf
    include /etc/openldap/schema/corba.schema
    include /etc/openldap/schema/core.schema
    include /etc/openldap/schema/cosine.schema
    include /etc/openldap/schema/duaconf.schema
    include /etc/openldap/schema/dyngroup.schema
    include /etc/openldap/schema/inetorgperson.schema
    include /etc/openldap/schema/java.schema
    include /etc/openldap/schema/misc.schema
    include /etc/openldap/schema/nis.schema
    include /etc/openldap/schema/openldap.schema
    include /etc/openldap/schema/ppolicy.schema
    include /etc/openldap/schema/collective.schema
    allow bind_v2
    pidfile /var/run/openldap/slapd.pid
    argsfile /var/run/openldap/slapd.args
    loglevel 1
    modulepath /usr/lib/openldap
    modulepath /usr/lib64/openldap
    moduleload syncprov.la
    database config
    access to
    by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
    by
    none
    database monitor
    access to
    by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
    by dn.exact="cn=Manager,dc=my-domain,dc=com" read
    by
    none
    database bdb
    suffix "dc=dianping,dc=com"
    checkpoint 1024 15
    rootdn "cn=admin,dc=dianping,dc=com"
    rootpw redhat
    directory /var/lib/ldap
    index entryCSN,entryUUID eq
    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
    index nisMapName,nisMapEntry eq,pres,sub
    TLSCipherSuite HIGH:MEDIUM:+SSLv2:+TLSv1:+SSLv3
    TLSCACertificateFile /etc/openldap/cacerts/cacert.pem
    TLSCertificateFile /etc/openldap/cacerts/newcert.pem
    TLSCertificateKeyFile /etc/openldap/cacerts/newkey.pem
    TLSVerifyClient allow
    overlay syncprov
    syncprov-checkpoint 100 10
    syncprov-sessionlog 100

    从配置文件slapd.conf
    include /etc/openldap/schema/corba.schema
    include /etc/openldap/schema/core.schema
    include /etc/openldap/schema/cosine.schema
    include /etc/openldap/schema/duaconf.schema
    include /etc/openldap/schema/dyngroup.schema
    include /etc/openldap/schema/inetorgperson.schema
    include /etc/openldap/schema/java.schema
    include /etc/openldap/schema/misc.schema
    include /etc/openldap/schema/nis.schema
    include /etc/openldap/schema/openldap.schema
    include /etc/openldap/schema/ppolicy.schema
    include /etc/openldap/schema/collective.schema
    allow bind_v2
    pidfile /var/run/openldap/slapd.pid
    argsfile /var/run/openldap/slapd.args
    loglevel 1
    modulepath /usr/lib/openldap
    modulepath /usr/lib64/openldap
    moduleload syncprov.la
    database config
    access to
    by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
    by
    none
    database monitor
    access to
    by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
    by dn.exact="cn=Manager,dc=my-domain,dc=com" read
    by
    none
    database bdb
    suffix "dc=dianping,dc=com"
    checkpoint 1024 15
    rootdn "cn=admin,dc=dianping,dc=com"
    rootpw redhat
    directory /var/lib/ldap
    index objectClass eq,pres
    index entryCSN,entryUUID eq
    index ou,cn,mail,surname,givenname eq,pres,sub
    index uidNumber,gidNumber,loginShell eq,pres
    index uid,memberUid eq,pres,sub
    index nisMapName,nisMapEntry eq,pres,sub
    TLSCipherSuite HIGH:MEDIUM:+SSLv2:+TLSv1:+SSLv3
    TLSCACertificateFile /etc/openldap/cacerts/cacert.pem
    TLSCertificateFile /etc/openldap/cacerts/newcert.pem
    TLSCertificateKeyFile /etc/openldap/cacerts/newkey.pem
    TLSVerifyClient allow
    syncrepl rid=125
    provider=ldaps://192.168.2.131:636
    searchbase="dc=dianping,dc=com"
    type=refreshOnly
    interval=00:00:01:00
    filter="(objectClass=*)"
    schemachecking=off
    bindmethod=simple
    binddn="cn=admin,dc=dianping,dc=com"
    credentials=redhat
    retry="60 +"

  2. 双主mirror模式,双向同步
    mirror模式就是互为主从,任何一个写都会复制到另一个上面
    master1 192.168.2.128 master2 192.168.2.131
    1) master1的配置文件片段
    overlay syncprov
    syncprov-checkpoint 100 10
    syncprov-sessionlog 100

    serverID 1 
    
    syncrepl        rid=001 
                    provider=ldaps://192.168.2.131:636 
                    bindmethod=simple 
                    binddn="cn=admin,dc=dianping,dc=com" 
                    credentials=redhat 
                    searchbase="dc=dianping,dc=com" 
                    schemachecking=on 
                    type=refreshAndPersist 
                    retry="60 +" 
    
    mirrormode      on 

    2) master2的配置文件片段,与master1配置文件基本相同,只是serverid和provider不同而已
    overlay syncprov
    syncprov-checkpoint 100 10
    syncprov-sessionlog 100

    serverID 2 
    
    syncrepl        rid=001 
                    provider=ldaps://192.168.2.128 
                    bindmethod=simple 
                    binddn="cn=admin,dc=dianping,dc=com" 
                    credentials=redhat 
                    searchbase="dc=dianping,dc=com" 
                    schemachecking=on 
                    type=refreshAndPersist 
                    retry="60 +" 
    
    mirrormode      on 

    3) 重启,测试添加条目

五、 权限控制

passwd 直接修改吗
serverfault.com/questions/303256/ldap-password-information-update-failed-insufficient-access-50

转载于:https://blog.51cto.com/13791715/2317223

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值