环境准备
| 绑定URL |
环境 |
IP地址 |
| ldap1.test.cn |
samba:4.7.1 openldap-servers:2.4.44 |
192.168.10.73 |
| ldap2.test.cn |
openldap-servers:2.4.44 |
192.168.10.66 |
于samba服务器192.168.10.73安装
yum install samba openldap openldap-servers compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel -y
|
于备份服务器执行
yum install rsync openldap openldap-servers compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel -y
|
配置LDAP多主同步
于各服务器启动LDAP
配置开启LDAP日志
echo "local4.* /var/log/ldap.log" >> /etc/rsyslog.conf systemctl restart rsyslog
|
启用同步复制模块
复制初始化数据库信息
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown ldap:ldap /var/lib/ldap/*
|
编写添加启动复制模块
内容如下
dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /usr/lib64/openldap olcModuleLoad: syncprov.la
|
将配置发送给LDAP
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov_mod.ldif
|
输出:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=module,cn=config"
|
此操作需要于各LDAP服务器执行
开启LDAP配置同步
编辑以下内容(其ID请根据不同的服务器修改,如第一个则为1,第二个LDAP服务器执行时修改为2,依次类推)
dn:cn = config changetype:modify add:olcServerID olcServerID:1
|
更新LDAP服务器上的配置
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcserverid.ldif
|
输出:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config"
|
为LDAP配置复制生成一个密码
然后会要求输入密码,两此输入后显示加密后的密码。
New password: Re-enter new password: {SSHA}ZLm+jyuNoxALHq838pDPSYslDqRdwy8z
|
现在将密码同步至配置中去
填写以下内容(请于olcRootPW:后填写你自己生成的密码,注意有一个空格)
dn: olcDatabase={0}config,cn=config add: olcRootPW olcRootPW: {SSHA}ZLm+jyuNoxALHq838pDPSYslDqRdwy8z
|
同步密码至配置文件
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcdatabase.ldif
|
输出:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={0}config,cn=config"
|
添加各服务器地址与同步配置信息
编写如下内容,请根据情况修改以下内容。
olcServerID: 其后为服务器ID号(递增)和各自的URL
rid: 为同步的id号
provider= 为服务器的URL(建议使用域名而非IP地址,自定义的域名写入hosts,便于管理)
credentials= 为刚才配置的密码
更多参数说明请参考OpenLDAP官方文档
#
dn: cn=config changetype: modify replace: olcServerID olcServerID: 1 ldap://ldap1.test.cn olcServerID: 2 ldap://ldap2.test.cn
#
dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov
#
dn: olcDatabase={0}config,cn=config changetype: modify add: olcSyncRepl olcSyncRepl: rid=001 provider=ldap://ldpsrv1.itzgeek.local binddn="cn=config" bindmethod=simple credentials=x searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 olcSyncRepl: rid=002 provider=ldap://ldpsrv2.itzgeek.local binddn="cn=config" bindmethod=simple credentials=x searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1 - add: olcMirrorMode olcMirrorMode: TRUE
|
将配置信息同步至服务器配置
ldapmodify -Y EXTERNAL -H ldapi:/// -f configrep.ldif
|
输出:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config"
adding new entry "olcOverlay=syncprov,olcDatabase={0}config,cn=config"
modifying entry "olcDatabase={0}config,cn=config"
|
以上步骤需要于每个LDAP服务器执行,完成后重启LDAP即可自动进行同步。
为避免自身同步,重启前需要于 /etc/sysconfig/slapd 中指定LDAP的绑定URL,否则启动失败。
若OpenLDAP的systemd service脚本未指定使用 /etc/sysconfig/slapd ,可于其启动脚本指定即可。
请于 hosts 绑定对应 URL 时,将各自 URL 于本机绑定一份至 127.0.0.1,便于本机管理和以下步骤。
开启数据同步
此操作可于任意LDAP服务器执行,会自动同步至其他服务器。(上面的步骤无误的情况下)
配置数据库同步模块
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov
|
同步配置信息至配置文件
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
|
输出:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "olcOverlay=syncprov,olcDatabase={2}hdb,cn=config"
|
添加同步信息配置
编辑如下内容,请根据情况修改以下内容。
olcSuffix: 绑定的DN(如 dc=local,dc=local)
olcRootDN: rootDN信息,也就是多个管理员名 cn=xxx ,可以统一设你自己的管理员名
olcRootPW: 你生成的密码
rid= 同步ID号,请递增,前面有了 001和002 ,这里使用 003和004
provider= URL信息
binddn= 绑定的DN
credentials= 密码
searchbase= 搜索的基础DN
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=test,dc=cn - replace: olcRootDN olcRootDN: cn=admin,dc=test,dc=cn - replace: olcRootPW olcRootPW: {SSHA}ZLm+jyuNoxALHq838pDPSYslDqRdwy8z - add: olcSyncRepl olcSyncRepl: rid=003 provider=ldap://ldap1.test.cn binddn="cn=admin,dc=test,dc=cn" bindmethod=simple credentials=x searchbase="dc=test,dc=cn" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 olcSyncRepl: rid=004 provider=ldap://ldap2.test.cn binddn="cn=admin,dc=test,dc=cn" bindmethod=simple credentials=x searchbase="dc=test,dc=cn" type=refreshOnly interval=00:00:00:10 retry="5 5 300 5" timeout=1 - add: olcDbIndex olcDbIndex: entryUUID eq - add: olcDbIndex olcDbIndex: entryCSN eq - add: olcMirrorMode olcMirrorMode: TRUE
|
现在同步配置信息至配置文件
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcdatabasehdb.ldif
|
输出:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={2}hdb,cn=config"
|
更改 olcDatabase={1}monitor.ldif 文件以将监视器访问权限仅限于 LDAP root(admin)用户,而不是其他用户。
填入以下信息,请根据情况修改 dn.base=
dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=admin,dc=test,dc=cn" read by * none
|
同步配置信息至配置文件
ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
|
至此无误的话,即可多主同步,后续是为samba认证做准备。
添加 LDAP schemas
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/samba.ldif
|
配置LDAP认证
如下选择

不启用TLS

Samba配置LDAP认证
修改如下配置
[global] ;basic server settings unix charset = utf-8 workgroup = WORKGROUP netbios name = SAMBA server string = Samba-LDAP PDC running %v name resolve order = wins bcast printcap name = CUPS printing = cups cups options = raw load printers = yes ;PDC and master browser settings dns proxy = yes os level = 64 preferred master = yes local master = yes domain master = yes wins support = yes ;log settings os level = 20 log level = 1 max log size = 0 log file = /var/log/samba/log.%m utmp = yes ;password sync security = user domain logons = yes encrypt passwords = yes unix password sync = yes ldap passwd sync = yes passwd program = /usr/sbin/smbldap-passwd -u '%u' passwd chat = Changing \nNew password %n\n Retype new password %n\n ;LDAP-specific settings passdb backend = ldapsam:"ldap://ldap1.test.cn ldap://ldap2.test.cn" ldap ssl = no ldapsam:trusted = no ldap suffix = dc=test,dc=cn ldap user suffix = ou=People ldap group suffix = ou=Group ldap admin dn = cn=admin,dc=test,dc=cn ldap machine suffix = ou=Computers ldap idmap suffix = ou=Idmap idmap config * : backend = ldap idmap config * : range = 1000000-1999999 idmap config * : ldap_url = "ldap://ldap1.test.cn ldap://ldap2.test.cn" idmap config * : ldap_base_dn = ou=idmap,dc=test,dc=cn idmap config * : ldap_user_dn = cn=idmap_admin,dc=test,dc=cn ;LDAP script set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%u' shutdown script = /var/lib/samba/scripts/shutdown.sh add user script = /usr/sbin/smbldap-useradd -m '%u' -t 1 rename user script = /usr/sbin/smbldap-usermod -r '%unew' '%uold' delete user script = /usr/sbin/smbldap-userdel '%u' set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%u' add group script = /usr/sbin/smbldap-groupadd -p '%g' delete group script = /usr/sbin/smbldap-groupdel '%g' add user to group script = /usr/sbin/smbldap-groupmod -m '%u' '%g' delete user from group script = /usr/sbin/smbldap-groupmod -x '%u' '%g' add machine script = /usr/sbin/smbldap-useradd -w '%u' -t 1 ;user profiles and home directory logon home = \%L%U logon drive = H: logon path = \%L\profiles%U logon script = netlogon.bat [共享] comment = 共享 write list = @admin #写权限用户,多个逗号隔开,@表示组 path = /home/samba browseable = yes force create mode = 0664 force directory mode = 2775 [printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/drivers create mask = 0664 directory mask = 0775
|
然后启动samba
Samba LDAP模式用户管理工具
yum install smbldap-tools.noarch -y
|
完成后可使用此工具管理samba用户
先初始化此工具配置。
根据提示填写相关信息,其配置存储于 /etc/smbldap-tools/
给samba添加ldap的密码
执行如上命令,会要求输入LDAP密码。
完成后创建Samba所需目录结构,执行下方命令自动创建。
若无报错,则可使用此工具管理samba用户
如上命令,添加一下samba的test用户。
此工具更多用法请参考 man 手册或help!