LDAP配置+主从+双主
环境:centos6.4 openldap 2.4.23 iptables selinux关闭
理论知识:
实践:
一. openldap安装
Yum安装
yum install -y openldap openldap-servers openldap-clients准备配置文件
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修改server配置文件slapd.conf # ldap.conf是客户端的配置文件
vim /etc/openldap/slapd.conf1) 设置目录树的后缀
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修改权限
chown -R ldap.ldap /etc/openldap/
chown -R ldap.ldap /var/lib/ldap/启动
service slapd start
netstat -tulnp | grep slapd # 查看是否监听389- 初始化库测试库
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=*)"
用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'); # 初始登录的密码访问定义的ldapadmin vhost
点击登录,登录dn: cn=admin,dc=dianping,dc=com 密码:redhat ##上面如果设置了,应该会默认填写着的下载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";利用perl脚本转换为ldif
./migrate_base.pl > /tmp/base.ldif
./migrate_passwd.pl /etc/passwd > /tmp/passwd.ldif
./migrate_group.pl /etc/group > /tmp/group.ldif- 导入到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
安装LDAP客户端及依赖组件
yum -y install openldap openldap-clients nss-pam-ldapd pam_ldap增加BIND策略,避免LDAP无法连接时无法开机
echo "bind_policy soft" >> /etc/openldap/ldap.conf自动创建目录设置
echo "session required pam_mkhomedir.so skel=/etc/skel umask=0077" >> /etc/pam.d/system-auth设置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- 客户端登陆测试,如果不能登陆服务器端tail -f /var/log/ldap.log查看
三。 扩展一下
- 客户端支持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测试
用户家目录是挂载着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.nfsvim /etc/auto.nfs
- -fstype=nfs,rw,sync 192.168.2.128:/home/&
说明,上面的*表示要挂载的某用户的目录,后面的&表示用户名。
(2) 启动或重启autofs服务
service autofs start|restart(3) 重新登录测试,mount查看
- -fstype=nfs,rw,sync 192.168.2.128:/home/&
允许用户修改密码
服务器端设置
(1) 编辑配置文件slapd.conf, 注意:需要加载 database config之前
vim /etc/openldap/slapd.confaccess to attrs=userPassword
by self write
by anonymous auth
by dn.base="cn=admin,dc=dianping,dc=com" write
by * noneaccess 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命令也是可以的
passwdChanging 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加密
服务器端:
下载生成证书的perl脚本
yum install openssl-perl openssl-devel清空/etc/pki/CA下面的内容,否则脚本不会正常执行
rm -rf /etc/pki/CA/*编辑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生成CA证书
cd /etc/pki/tls/misc
./CA.pl -newca # 会提示输入密码,设置一个, 完成后会在CA中生成CA证书cacert.pem提示的参数默认即可
为ldap服务器生成证书
./CA.pl -newreq-nodes # 会提示输入一些信息,需要注意的是Common Name需要是客户端连接ldap服务器用的域名或者ip为ldap证书签名
./CA.pl -sign将证书移动到/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修改配置文件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:检查客户端证书,没有证书或证书错误都将立即终止连接。以ldaps方式运行slapd, 两种方法
1) slapd -h 'ldaps:///'
2) 修改 /etc/sysconfig/ldap
SLAPD_LDAP=no # 不启用389
SLAPD_LDAPS=yes # 启用636
然后service slapd restartnetstat -tulnp | grep slapd # 查看是不是636端口
修改客户端配置文件
vim /etc/openldap/ldap.confTLS_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- 客户端测试
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
基于tls的主从模式
1) 两台机器上安装openldap server,并配置加密,两端的证书一致(不一致貌似有问题)
yum -y install openldap-server openldap2) 修改主配置文件slapd.conf,添加,并重启
modulepath /usr/lib/openldap
modulepath /usr/lib64/openldap
moduleload syncprov.la # 默认没有loadindex 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/openldapsyncrepl 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 +"双主mirror模式,双向同步
mirror模式就是互为主从,任何一个写都会复制到另一个上面
master1 192.168.2.128 master2 192.168.2.131
1) master1的配置文件片段
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100serverID 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 100serverID 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配置+主从+双主相关推荐
- CentOS8配置MySQL双主互备(安装centos8及MySQL)
如果对您有帮助请点赞,谢谢!一个赞至少让我开心一天. CentOS8配置MySQL双主互备 1安装操作系统centos8及配置 启用SSH 2安装MySQL及配置 2.1下载镜像 2.2安装镜像 2. ...
- linux mysql互为主从_mysql互为主从配置(双主模型)
一.A.B双主模型的实现条件: 1. 开启二进制日志 2. 开启中继日志 3. 解决自动增长列的问题 如果A服务器上自动增长的列编号有一个35,此时还没有同步到B服务器上,在B服务器上插入一条数据,编 ...
- mysql双主多从高可用配置_双主MySQL+keepalived高可用配置
部署双节点双主数据库服务器MySQL 分别在二台服务器上安装mysql,要求同版本或主服务器比从服务器版本高. 主机mysql配置: Vi /etc/my.cnf [mysqld] Log-bin=m ...
- ubuntu mysql双主热备配置_MySql双主热备配置
用四台服务器配置MySql双主热备配置 主机1服务器ip:192.168.31.208 主机2服务器ip:192.168.31.133 从机1服务器ip:192.168.31.121 从机2服务器ip ...
- mysql主备数据库配置_MySQL双主互备配置
#主数据库配置 1.修改my.conf(windows下是my.ini)文件: 在[mysqld]部分插入如下两行: #开启二进制日志 log-bin=mysql-bin #设置server-id s ...
- Nginx+keepalived双主配置(双机双主热备)
简介 这种方案,使用两个VIP地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于生产架构环境. 一.网络拓扑 四台虚拟机如下所示 ...
- 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_ ...
- redis 互为主从(双主)
http://blog.csdn.net/zhu_tianwei/article/details/44982521
- mysql 双节点主从搭建_MySQL Replication, 主从和双主配置
MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场合.与之对应的另一个技术是同步的MySQL Clust ...
最新文章
- HTML URL 统一资源定位器
- autocopy2u_借助AutoCopy简化Firefox中的文本复制和粘贴
- 生信分析和统计绘图资源推荐!
- (数据库系统概论|王珊)第四章数据库安全性-第一节:数据库安全性概述
- php js特效代码如何用,phpstorm编写代码增加代码爆炸效果
- 九、Linux系统安装和常见故障排除
- 计算机竞赛制作机器人,2016全国中小学电脑制作比赛机器人灭火竞赛规则
- 深度学习记录第二篇————Tensor基本操作
- 计算机物联网职业生涯规划书,物联网工程技术专业职业生涯规划书-.doc
- 用计算机制作演示文稿教案博客,信息技术:《制作演示文稿的一般过程》教案...
- tar -zxvf是什么意思
- uniapp中使用原生方式写页面头部,存在多级页面时,当点击返回图标按钮时,父页面的返回按钮消失了(已解决)
- 【MAX7800实现KWS20 demo演示】
- 外派linux运维,请好好善待你身边的Linux运维工程师,因为他们...
- Kingbase数据库实验五 PL/SQL程序设计
- Django-应用app名配置中文显示
- imp-00003: 遇到 oracle 错误 4052,imp IMP-00041错误处理
- 滴滴收购优步谈判过程_大流行之后,优步正在为绿色业务做准备
- mysql服务在系统盘_重装系统后恢复MySQL服务
- Gitee图床迁移阿里云
热门文章
- Android7.0多窗口实现原理(一)
- Kati详解-Android10.0编译系统(五)
- listview的divider边距
- 使用命令编译为jar包
- androidstudio常见问题
- C语言中static的作用及C语言中使用静态函数有何好处
- [剑指offer] 跳台阶
- JS数组转字符串和字符串转数组
- 去除警告,打电话,发信息,应用程序之间跳转,打印沙盒路径,字符串名字转换方法,包装导航控制器等的代码...
- ASP.NET中如何实现负载均衡