Samba+OpenLDAP(Multi-Master多主同步)统一认证

zhangsir 2018-07-02 102浏览 0条评论
首页/正文
分享到: / / / /

环境准备

绑定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

systemctl start slapd

配置开启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/*

编写添加启动复制模块

vim syncprov_mod.ldif

内容如下

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配置同步

vim olcserverid.ldif

编辑以下内容(其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配置复制生成一个密码

slappasswd

然后会要求输入密码,两此输入后显示加密后的密码。

New password:
Re-enter new password:
{SSHA}ZLm+jyuNoxALHq838pDPSYslDqRdwy8z

现在将密码同步至配置中去

vim olcdatabase.ldif

填写以下内容(请于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"

添加各服务器地址与同步配置信息

vim configrep.ldif

编写如下内容,请根据情况修改以下内容。

olcServerID: 其后为服务器ID号(递增)和各自的URL

rid: 为同步的id号

provider= 为服务器的URL(建议使用域名而非IP地址,自定义的域名写入hosts,便于管理)

credentials= 为刚才配置的密码

更多参数说明请参考OpenLDAP官方文档

### Update Server ID with LDAP URL ###

dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1 ldap://ldap1.test.cn
olcServerID: 2 ldap://ldap2.test.cn

### Enable Config Replication###

dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov

### Adding config details for confDB replication ###

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服务器执行,会自动同步至其他服务器。(上面的步骤无误的情况下)

vim syncprov.ldif

配置数据库同步模块

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"

添加同步信息配置

vim olcdatabasehdb.ldif

编辑如下内容,请根据情况修改以下内容。

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)用户,而不是其他用户。

vim monitor.ldif

填入以下信息,请根据情况修改 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认证

authconfig-tui

如下选择

img

不启用TLS

img

Samba配置LDAP认证

vim /etc/samba/smb.conf

修改如下配置

[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

systemctl start smb

Samba LDAP模式用户管理工具

yum install smbldap-tools.noarch -y

完成后可使用此工具管理samba用户

先初始化此工具配置。

smbldap-config

根据提示填写相关信息,其配置存储于 /etc/smbldap-tools/

给samba添加ldap的密码

smbpasswd -W

执行如上命令,会要求输入LDAP密码。

完成后创建Samba所需目录结构,执行下方命令自动创建。

smbldap-populate

若无报错,则可使用此工具管理samba用户

smbldap-useradd -a test

如上命令,添加一下samba的test用户。

此工具更多用法请参考 man 手册或help!

最后修改:2018-07-02 23:54:58 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

评论列表

还没有人评论哦~赶快抢占沙发吧~