环境: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

LDAP配置+主从+双主相关推荐

  1. CentOS8配置MySQL双主互备(安装centos8及MySQL)

    如果对您有帮助请点赞,谢谢!一个赞至少让我开心一天. CentOS8配置MySQL双主互备 1安装操作系统centos8及配置 启用SSH 2安装MySQL及配置 2.1下载镜像 2.2安装镜像 2. ...

  2. linux mysql互为主从_mysql互为主从配置(双主模型)

    一.A.B双主模型的实现条件: 1. 开启二进制日志 2. 开启中继日志 3. 解决自动增长列的问题 如果A服务器上自动增长的列编号有一个35,此时还没有同步到B服务器上,在B服务器上插入一条数据,编 ...

  3. mysql双主多从高可用配置_双主MySQL+keepalived高可用配置

    部署双节点双主数据库服务器MySQL 分别在二台服务器上安装mysql,要求同版本或主服务器比从服务器版本高. 主机mysql配置: Vi /etc/my.cnf [mysqld] Log-bin=m ...

  4. ubuntu mysql双主热备配置_MySql双主热备配置

    用四台服务器配置MySql双主热备配置 主机1服务器ip:192.168.31.208 主机2服务器ip:192.168.31.133 从机1服务器ip:192.168.31.121 从机2服务器ip ...

  5. mysql主备数据库配置_MySQL双主互备配置

    #主数据库配置 1.修改my.conf(windows下是my.ini)文件: 在[mysqld]部分插入如下两行: #开启二进制日志 log-bin=mysql-bin #设置server-id s ...

  6. Nginx+keepalived双主配置(双机双主热备)

    简介 这种方案,使用两个VIP地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于生产架构环境. 一.网络拓扑 四台虚拟机如下所示 ...

  7. mysql gtid 双主_MySQL5.7配置GTID双主

    192.168.31.178 Master/Slave 192.168.31.179 Master/Slave 192.168.31.178 配置 gtid-mode=ON enforce_gtid_ ...

  8. redis 互为主从(双主)

    http://blog.csdn.net/zhu_tianwei/article/details/44982521

  9. mysql 双节点主从搭建_MySQL Replication, 主从和双主配置

    MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场合.与之对应的另一个技术是同步的MySQL Clust ...

最新文章

  1. HTML URL 统一资源定位器
  2. autocopy2u_借助AutoCopy简化Firefox中的文本复制和粘贴
  3. 生信分析和统计绘图资源推荐!
  4. (数据库系统概论|王珊)第四章数据库安全性-第一节:数据库安全性概述
  5. php js特效代码如何用,phpstorm编写代码增加代码爆炸效果
  6. 九、Linux系统安装和常见故障排除
  7. 计算机竞赛制作机器人,2016全国中小学电脑制作比赛机器人灭火竞赛规则
  8. 深度学习记录第二篇————Tensor基本操作
  9. 计算机物联网职业生涯规划书,物联网工程技术专业职业生涯规划书-.doc
  10. 用计算机制作演示文稿教案博客,信息技术:《制作演示文稿的一般过程》教案...
  11. tar -zxvf是什么意思
  12. uniapp中使用原生方式写页面头部,存在多级页面时,当点击返回图标按钮时,父页面的返回按钮消失了(已解决)
  13. 【MAX7800实现KWS20 demo演示】
  14. 外派linux运维,请好好善待你身边的Linux运维工程师,因为他们...
  15. Kingbase数据库实验五 PL/SQL程序设计
  16. Django-应用app名配置中文显示
  17. imp-00003: 遇到 oracle 错误 4052,imp IMP-00041错误处理
  18. 滴滴收购优步谈判过程_大流行之后,优步正在为绿色业务做准备
  19. mysql服务在系统盘_重装系统后恢复MySQL服务
  20. Gitee图床迁移阿里云

热门文章

  1. Android7.0多窗口实现原理(一)
  2. Kati详解-Android10.0编译系统(五)
  3. listview的divider边距
  4. 使用命令编译为jar包
  5. androidstudio常见问题
  6. C语言中static的作用及C语言中使用静态函数有何好处
  7. [剑指offer] 跳台阶
  8. JS数组转字符串和字符串转数组
  9. 去除警告,打电话,发信息,应用程序之间跳转,打印沙盒路径,字符串名字转换方法,包装导航控制器等的代码...
  10. ASP.NET中如何实现负载均衡