当前位置: 首页 > news >正文

服务器集群配置LDAP统一认证高可用集群(配置tsl安全链接)-centos9stream-openldap2.6.2

写在前面

因之前集群为centos6,已经很久没升级了,所以这次配置统一用户认证也是伴随系统升级到centos9时一起做的配套升级。新版的openldap配置大致与老版本比较相似,但有些地方配置还是有变化,另外,铺天盖地的帮助文档有相当一部分是直接搬砖过来的,所以参考时容易出错,这里将自己实践的内容一一共享,让大家更方便,更实用。

另外,openldap的配置一般都采用ldif文件配置后使用命令导入,如果有人写的是要直接修改config目录下的文件的话赶紧绕道吧,那不是推荐的写法,会把你的配置搞乱的。

高可用多主服务安装(配置tsl安全链接)

准备服务节点(这里用三主模式)

host1        192.168.1.11        id=1

host2        192.168.1.12        id=2

host3        192.168.1.13        id=3

节点ip和节点名大家自己配置吧,这里不啰嗦了。

当然,安装统一认证主要是为了用户统一,方便维护管理,还有一个就是需要集群用户认证的高可用,防止单个节点宕机引起认证服务无法使用。

高可用方式有多种,大家任选一种就行, 选择任意两个管理主机做主主服务节点直接部署

1、openldap在两个主机上(一般2个就行了,我这里用了3个,现在服务器稳定性还行,一般大家不用纠结)

2、将openldap部署在虚拟机上,云主机或者hyper-v或者kvm virtio都行,这个的好处就是服务节点down机后只需要将虚拟机移到可用节点上就完成了,虚拟机部署和恢复速度都比较快。

3、将openldap部署在docker容器中,当然其他容器也行,这个更方便了,只需要备份好镜像,需要的时候直接在新节点上导入就可以开始运行,平时开销还比虚拟机小,恢复速度更快。

4、部署在远程云主机系统中,这个要涉及远程和云主机安全配置,会稍微麻烦一点 

安装基础包

主服务节点安装就行,但为了方便建议所有主节点和计算节点都直接批量安装,后面不用麻烦了。

###查看已有ldap安装包,如果没有的话请打开crb源和epel源,这里不细说了。
yum list | grep openldapopenldap.x86_64                                                                          2.6.2-2.el9                                    @baseos                   
openldap-clients.x86_64                                                                  2.6.2-2.el9                                    @baseos                   
openldap-compat.x86_64                                                                   2.6.2-2.el9                                    @baseos                   
openldap-servers.x86_64                                                                  2.6.2-2.el9                                    @epel                     
collectd-openldap.x86_64                                                                 5.12.0-24.el9                                  epel                      
openldap.i686                                                                            2.6.3-1.el9                                    baseos                    
openldap.x86_64                                                                          2.6.3-1.el9                                    baseos                    
openldap-clients.x86_64                                                                  2.6.3-1.el9                                    baseos                    
openldap-compat.i686                                                                     2.6.3-1.el9                                    baseos                    
openldap-compat.x86_64                                                                   2.6.3-1.el9                                    baseos                    
openldap-devel.i686                                                                      2.6.3-1.el9                                    appstream                 
openldap-devel.x86_64                                                                    2.6.3-1.el9                                    appstream ##这里神奇的就是2.6.3版本默认没有servers,所以大家要安装2.63的server的话就需要自己再找安装源了,所以建议大家几个安装包直接用2.6.2的版本,这样后面要用到ldap库的地方就没啥问题了。###安装必须的软件包,因服务端也同时用ldap的统一认证,所以建议一起连clients都装上,同时装才能自动选择相同版本,否则会优先选择最高版本,到时候server的包就不好装了,除非直接指定与server包相同的2.6.2版本。
yum install openldap openldap-clients openldap-servers openldap-devel openldap-compat -y###安装完成后检查是否齐全
rpm -qa | grep openldapopenldap-servers-2.6.2-2.el9.x86_64
openldap-clients-2.6.2-2.el9.x86_64
openldap-2.6.2-2.el9.x86_64
openldap-compat-2.6.2-2.el9.x86_64

多主服务配置(所有servers)

###进入配置目录
cd /etc/openldap###建议再建立两个文件夹certs和configs,openldap下除conf文件以外,其他所有者均为ldap,系统不带ldap用户的请自己创建系统用户,所有节点ldap用户建议设置相同uid和gid。
mkdir certs configs###进入certs目录,生成key,一般使用penssl来生成,自己使用现成的也没问题,有这两个文件就行,名字自己取,后面指定正确路径就行
###这里放入/etc/openldap/certs
ldapserver.crt
ldapserver.key###先进入configs目录,将配置文件写入,可以写好一个应用一个,配置时对应配置项第一次可以使用ldapadd命令添加,第二次修改时采用ldapmodify形式修改,具体命令大家可以参考后面配置使用。
cd /etc/openldap/configs####初始化根目录,设定根域
vim  base.ldif 
dn: dc=jingdong,dc=com
o: ldap
objectclass: dcObject
objectclass: organization###应用配置
ldapadd -Y EXTERNAL -H ldapi:/// -f  base.ldif ###一般情况下slapd.d目录下应该有配置的文件夹和配置保存数据库了,没有或者不确定的话可以删除配置目录/etc/openldap/slapd.d/下的所有文件和文件夹后重新生成,这里的slapd.ldif自己按后面规则编写。
slapadd -n 0 -F slapd.d -l slapd.ldif###配置应用命令一般是ldapadd和ldapmodify这两个
###openlap配置入口有三种,第一种直接本地api操作,后面都是接ip地址或域名,建议使用ldaps,端口636,而ldap的是默认端口389,端口配置可根据自己需求修改,如自定义端口,后期使用的时候都要加上端口才能访问成功
# ldapi:///
# ldap:///
# ldaps:/// ############配置系统服务入口,多个ip时指定想要开放的ip就行,按格式添加就行了, 当然还可以开放ldaps://
vim /etc/sysconfig/slapd
SLAPD_URLS="ldapi:/// ldap://192.168.1.11"
##########################################################################具体大家看系统服务和系统端口开启情况就知道了。
systemctl daemon-reload
systemctl enable slapd --now
systemctl status slapd

 下面继续基础配置

###先管理基础配置
###应用配置采用ldapadd命令,初期配置建议使用本地ldapi接口,后面配置应用命令与此相同,具体参数大家自己多搜一下熟悉就行,如果只是一般管理的话这里的使用命令应该是足够了。一般配置文件会指定dn,所以-D这个参数可以不指定。
ldapadd -Y EXTERNAL -D "cn=config" -H ldapi:/// -f syncprov.ldif#另外两种应用格式,需要ip和端口号,默认的389可以不写,但自定义端口一定要写。-W启用后会要输入密码,所以需要先设定好根域密码,密码修改方式见下方,-D表示操作设置那个域,一般会在ldif文件中指定,可以省略。
ldapadd -x -D "cn=config" -H ldap://192.168.1.11 -W -f syncprov.ldif 
ldapadd -x -D "cn=config" -H ldaps://192.168.1.11:636 -W -f syncprov.ldif ###导入一些基础配置,大家根据实际需求选吧,不一定要全部导入
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/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif######################################################################################
###这里大家一定要注意看一下,很多配置文件这里写的是{2}hdb,实际上2.6.2的配置都在mdb下,大家注意了。 大家可以看一下路径下面的内容就清楚了。自定义参数时,ldif文件前指定对应数据库的dn,如dn: olcDatabase={0}config,cn=config就是指修改下面olcDatabase={0}config.ldif数据库中的配置,dn:olcDatabase={1}monitor.ldif,就是指修改下面olcDatabase={1}monitor.ldif数据库中的配置,每次修改完后可以cat查看修改后的配置情况,但不要直接编辑下面目录中的ldif文件,否则会出现配置文件校验错误。
ls /etc/openldap/slapd.d/cn\=config/
cn=module{0}.ldif              cn=schema.ldif                 olcDatabase={-1}frontend.ldif  olcDatabase={2}mdb/            
cn=schema/                     olcDatabase={0}config.ldif     olcDatabase={1}monitor.ldif    olcDatabase={2}mdb.ldif    
##大家看看这里都是{2}mdb,后面基于这个路径配置的文件会保存在olcDatabase={2}mdb这个目录下,大家配置完反复看一下这些配置目录里的文件
######################################################################################
#生成密码字符串,这里使用的是ssha方式加密, -s后面的密码就是自己想设定的明文密码,可以采用交互方式输入,这样明文密码不会显示在history中,提高安全性。
slappasswd -s sdlfkjeioo@3LK
{SSHA}cGUAOenh1/et0kezbZiJsdY/o7e+hSGJ
###记住这个字符串,后面需要写入配置文件来更新密码###编辑修改根域管理密码配置,修改的是olcRootPW,采用modify添加方式
###当然也可以放在下方管理权限配置里面一同修改。
vim chrootpw.ldif 
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}GDdMN3vBiNHs4fEcDaey6nCdILiY3GYd  
###应用修改
ldapmodify -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif########################################################
###基础配置之后大家可以查看变化,/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif,大家要看到文件头的提示# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
所以千万别手动去修改,容易出错
###下面是配置截图,仅供参考
###olc开头的都是可以设定的参数,想设置哪个参数或者添加什么参数,按ldif配置文件的格式编写即可,自定义配置建议统一放置在 /etc/openldap/configs下面,防止与系统配置文件弄混

###配置管理权限,可以单独配置角色并配置对应的读写权限,dn要写清楚,这里面的dn.base=和后面dn=里面对应的Mangement,jindong,com都可以根据自己喜好或实际修改,但要注意,这个设定后,后面使用时也要按这个来使用,且设定密码或修改对应权限时这个dn都要写全,且不能出错。
###下方的olcRootPW和前面的步骤里提到的是一样的,表示根域管理的密码
###olcSuffix表示自己的域,可以理解为组织或单位的名称,如 jd.com, biosafe.org,按照这个修改为dc=jd,dc=com或 dc=biosafe,dc=org
###olcRootDN就是表示olcSuffix下的一个管理角色Management, 根据自己喜好设定即可,但后面dc要和前面suffix相同。
###olcAccess就是配置权限了,{0}、{1}、{2}这几个表示的是不同数据库,后面by跟着表示对应角色给予什么权限。
vim admin_config.ldif 
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=Management,dc=jindong,dc=com" read by * nonedn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=jindong,dc=comdn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Management,dc=jindong,dc=comdn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}9FYhkbjcu5/JT+jveRmEeE/EgHp6zDVWJ+dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Management,dc=jindong,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Management,dc=jindong,dc=com" write by * read###应用管理权限配置
ldapadd -Y EXTERNAL -H ldapi:/// -f admin_config.ldif###编辑配置tls
vim add_tls.ldif 
dn: cn=config
changetype: modify
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/openldap/certs/ldapserver.crtdn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldapserver.keydn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldapserver.crt
###应用配置
ldapadd -Y EXTERNAL -H ldapi:/// -f add_tls.ldif

配置主主同步

###配置数据库同步
vim syncprov.ldif 
dn: olcOverlay=syncprov,olcDatabase={2}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100###应用配置
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif###配置开启数据同步模块,大家看一下目录下的文件就了解了,如果是手动安装在指定目录下,这个lib位置可能要修改成对应目录,总之是要找到路径/usr/lib64/openldap/下的syncprov.la这个文件
vim syncprov_mod.ldif
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la###应用配置
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov_mod.ldif ###配置日志级别
vim  log_config.ldif 
dn: cn=config
changetype: modify
add: olcLogLevel
olcLogLevel: stats
#stats为打印日志的级别,可根据不同的级别设置不同的值###应用配置,这里使用modify模式
ldapmodify -Y EXTERNAL -H ldapi:/// -f log_config.ldif#####openldap日志级别,看不懂的自己翻译去吧,不难:
Level	Keyword	Description
-1	any	enable all debugging
0		no debugging
1	(0x1 trace)	trace function calls
2	(0x2 packets)	debug packet handling
4	(0x4 args)	heavy trace debugging
8	(0x8 conns)	connection management
16	(0x10 BER)	print out packets sent and received
32	(0x20 filter)	search filter processing
64	(0x40 config)	configuration processing
128	(0x80 ACL)	access control list processing
256	(0x100 stats)	stats log connections/operations/results
512	(0x200 stats2)	stats log entries sent
1024	(0x400 shell)	print communication with shell backends
2048	(0x800 parse)	print entry parsing debugging
16384	(0x4000 sync)	syncrepl consumer processing
32768	(0x8000 none)	only messages that get logged whatever log level is set
######
##可以选择配置rsyslog
# 修改/etc/rsyslog.conf配置文件
cat >> /etc/rsyslog.conf << EOF
local4.*  /var/log/slapd/slapd.log
EOF
###然后重启rsyslog应用:
mkdir -p /var/log/slapd
chown ldap:ldap /var/log/slapd/
systemctl restart rsyslog
systemctl restart slapd   
# 重启看到日志   
ls /var/log/slapd/
# /var/log/slapd/slapd.log目录下就可以看到slapd产生的日志了。##配置禁止匿名用户访问,一般为了安全都需要设置,这里配置的是不允许匿名用户通过ip访问查看数据内容,不允许web服务前端匿名用户登陆,主要指ldapphpadmin的网络管理,后面会详细说明配置。
vim disable_anon.ldif
dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anondn: cn=config
changetype: modify
add: olcRequires
olcRequires: authcdn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcRequires
olcRequires: authc###应用配置
ldapadd -Y EXTERNAL -H ldapi:/// -f disable_anon.ldif####################################################################################
####再提醒一下的就是所有采用命令生成的配置文件ldif都标明了不要手动修改,所以大家不要直接修改这里的ldif文件,否则后面会提示错误,或者在使用命令修改后,这个文件的配置就会对应修改,而且每个都有时间戳,破坏了系统就会显示检测到配置错误。
cat /etc/openldap/slapd.d/cn=config.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 21c2b603
dn: cn=config
objectClass: olcGlobal
cn: config
structuralObjectClass: olcGlobal
entryUUID: 2527141e-d799-103d-8820-417a1b6d07b1
creatorsName: cn=config
createTimestamp: 20230825134340Z
olcDisallows: bind_anon
olcRequires: authc
olcLogLevel: stats
olcTLSCACertificateFile: /etc/openldap/certs/ldapserver.crt
olcTLSCertificateKeyFile: /etc/openldap/certs/ldapserver.key
olcTLSCertificateFile: /etc/openldap/certs/ldapserver.crt
olcServerID:: MSA=
entryCSN: 20231115075749.487914Z#000000#002#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20231115075749Z
#######################################################################################前面配置所有服务主机都配置相同的根域管理和密码,当然也可以不同,但下面对应的bindn和credentials就得做相应修改。###配置主机id及同步主机策略等
#olcServerID,按顺序第几个主机就写对应数字作为对应编号,按自己喜好修改
#下面配置同步主机
# olcSyncRepl 后面配置另外其他主机的信息,一般配置一个就行,这里三个节点,所以配置了2个。其他两台主机注意修改,这里第一个主机所以需要同步的是2和3主机,如果是第二个主机,这里改成1和3号。
# olcMirrorMode表示主主同步,与主从模式区别。###########################host1####################################
vim configrep.ldif 
### Update Server ID with LDAP URL ###
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1 ### Adding details for replication ###
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSyncRepl
olcSyncRepl:rid=002provider=ldap://192.168.1.12binddn="cn=Management,dc=jingdong,dc=com"bindmethod=simplecredentials=这里的密码与前面一致,可以明文,建议使用前面的加密字符串searchbase="dc=jingdong,dc=com"type=refreshAndPersistretry="5 5 300 5"timeout=1
olcSyncRepl:rid=003provider=ldap://192.168.1.13binddn="cn=Management,dc=jingdong,dc=com"bindmethod=simplecredentials=这里的密码与前面一致,可以明文,建议使用前面的加密字符串searchbase="dc=jingdong,dc=com"type=refreshAndPersistretry="5 5 300 5"timeout=1
-
replace: olcMirrorMode
olcMirrorMode: TRUE
############################################################################################################host2#####################################
vim configrep.ldif 
### Update Server ID with LDAP URL ###
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1 ### Adding details for replication ###
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSyncRepl
olcSyncRepl:rid=001provider=ldap://192.168.1.11binddn="cn=Management,dc=jingdong,dc=com"bindmethod=simplecredentials=这里的密码与前面一致,可以明文,建议使用前面的加密字符串searchbase="dc=jingdong,dc=com"type=refreshAndPersistretry="5 5 300 5"timeout=1
olcSyncRepl:rid=003provider=ldap://192.168.1.13binddn="cn=Management,dc=jingdong,dc=com"bindmethod=simplecredentials=这里的密码与前面一致,可以明文,建议使用前面的加密字符串searchbase="dc=jingdong,dc=com"type=refreshAndPersistretry="5 5 300 5"timeout=1
-
replace: olcMirrorMode
olcMirrorMode: TRUE
##################################################################################应用配置
ldapadd -Y EXTERNAL -H ldapi:/// -f configrep.ldif

前面所有服务节点配置完成后最好是按顺序重新启动一下slapd服务,并确认所有服务状态和数据库同步无错误信息

###所有slapd节点,基本就是下面三个命令确认一下就行
systemctl restart slapd
systemctl status slapd
journal -xe | grep lapd

高可用配置keepalived+haproxy

怎么配置keepalived和haproxy大家搜索吧,本人后面会补充上

这里仅修改haproxy 关于 openldap高可用配置选段

##修改/etc/haproxy/haproxy.cfg,haproxy版本 2.8.1
##添加下面内容
listen openldap_clusterbind 192.168.1.251:10389mode tcpoption tcplogbalance roundrobinserver  host1 192.168.1.11:389 check weight 5server  host2 192.168.1.12:389 check weight 5server  host3 192.168.1.13:389 check weight 5

复制haproxy配置到所有haproxy节点下,重新启动 haproxy服务,后面所有认证服务都可以使用ldap://192.168.1.251:10389这个地址。

添加用户组和用户

####批量导入导出原来系统已有的账号和用户组需要使用migrationtools,高版本的centos需要单独找安装源了。
###这里人员账户信息是按照migrationtools导出系统账户的格式,大家添加用户或者批量导入账户的都可以采用这种方式对应修改即可,有多少个人就添加多少个模块信息。
###这里的呃userPassword可以直接明文,但不建议,用户密码还是建议使用slappasswd生成后写入下面文件吧,但得注意明文密码单独记录,
###这里还可以添加其他email之类的账户参数,大家搜索一下就知道了。
###建议大家直接指定gid和uid,系统默认创建用户会从uid=500开始,个人一般喜好将小于1000的id留给系统账户,方便安全管理。##分别编辑group和user配置文件
############################################################
vim add_group.ldif 
dn: cn=liuqiangdong,ou=Group,dc=jingdong,dc=com
objectClass: posixGroup
objectClass: top
cn: liuqiangdong
gidNumber: 1601dn: cn=zhangtianze,ou=Group,dc=jingdong,dc=com
objectClass: posixGroup
objectClass: top
cn: zhangtianze
gidNumber: 1602
#######################################################################################################################
vim add_user.ldif
dn: uid=liuqiangdong,ou=People,dc=jingdong,dc=com
uid: liuqiangdong
cn: liuqiangdong
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {SSHA}22idPfpP0R2THBaxqpr14bawdKJKpeTC
shadowLastChange: 19333
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1601
gidNumber: 1601
homeDirectory: /home/liuqiangdongdn: uid=zhangtianze,ou=People,dc=jingdong,dc=com
uid: zhangtianze
cn: zhangtianze
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {SSHA}22idPfpP0R2THBaxqpr14bawdKJKpeTC
shadowLastChange: 19333
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1602
gidNumber: 1602
homeDirectory: /home/zhangtianze
#################################################################添加用户,用户信息重复时会报错,修改成新的不重复信息或者使用ldapmodify命令修改。
ldapadd -x -D "cn=Management,dc=jingdong,dc=com" -H ldapi:/// -W -f new_group.ldif
ldapadd -x -D "cn=Management,dc=jingdong,dc=com" -H ldapi:/// -W -f add_user.ldif
#
#添加用户后最好确认已经建立好用户对应的文件夹,也可以配置自动建立用户文件夹,但系统未能自动建立时还需要手动建立。

配置phpldapadmin(选配)

这个是web管理界面,可以选择安装,没有安装的话直接使用ldapsearch命令按指定域查询信息即可。

这里已经不影响ldap的认证服务运行了,后面补充web界面配置和操作。

客户端配置

需要统一认证的server物理机也建议一起配置

先配置slapd.conf 的

###客户端主要安装clients配置,建议都按前面server形式安全全吧, 只要不启用slapd服务即可。
###安装完后先配置slapd.conf
###主要修改或添加下面几行,其他的可以注释掉
vim /etc/openldap/slapd.conf
DEREF		never
SASL_NOCANON	on
TLS_REQCERT never
TLS_CACERT	/etc/openldap/certs/ldapserver.crt
URI ldap://192.168.1.11,ldap://192.168.1.12,ldap://192.168.1.13
BASE dc=liuqiangdong,dc=com
# 配置了haproxy高可用的可以直接使用前面的URI   ldap://192.168.1.251:10389
# 当然如果为安全考虑可以只使用 ldaps://的链接,对应的haproxy部分和这里的地址都需要做相应调整

在配置sssd及sshd

###安装sssd
yum install sssd -y###生成certs证书,这里直接使用前面ldapserver的
ls /etc/sssd/pki
ldapserver.crt  ldapserver.key###配置sssd
vim sssd.conf
[sssd]
services = nss, pam, ssh, autofs
config_file_version = 2
domains = ldap[nss]
fd_limit = 65535
filter_groups = root,bin,daemon,sys,adm,tty,disk,lp,mem,kmem,wheel,mail,uucp,man,games,gopher,video,dip,ftp,lock,audio,nobody,users,dbus,utmp,utempter,floppy,vcsa,stapusr,stapsys,stapdev,abrt,cdrom,tape,dialout,haldaemon,ntp,cgred,saslauth,postdrop,postfix,sshd,oprofile,tcpdump,screen,slocate,www,tomcat,apache,nginx,zabbix,rpc,rpcuser,nfsnobody 
filter_users = root,bin,daemon,adm,lp,sync,shutdown,halt,mail,uucp,operator,games,gopher,ftp,nobody,dbus,vcsa,abrt,haldaemon,ntp,saslauth,postfix,sshd,oprofile,tcpdump,www,tomcat,apache,nginx,zabbix,rpc,rpcuser,nfsnobody,ldap
homedir_substring = /home[domain/ldap]
autofs_provider = ldap
id_provider = ldap
auth_provider = ldap
chpass_provider = ldapdefault_shell = /bin/bash
ldap_id_use_start_tls = True
ldap_tls_cacertdir = /etc/sssd/pki
cache_credentials = True
ldap_tls_reqcert = never###这里可以使用ldaps的安全链接和高可用链接,如果配置了的话
ldap_uri = ldap://192.168.1.11,ldap://192.168.1.12,ldap://192.168.1.13
ldap_search_base = dc=jingdong,dc=com
ldap_user_search_base = ou=People,dc=jingdong,dc=com
ldap_group_search_base = ou=Group,dc=jingdong,dc=com###重启sssd服务###修改sshd_config配置
vim /etc/ssh/sshd_config
PermitEmptyPasswords no
PasswordAuthentication yes
UsePAM yes#修改后重新启动sshd服务##退出系统再进入服务器,验证登陆
id liuqiangdong

相关文章:

服务器集群配置LDAP统一认证高可用集群(配置tsl安全链接)-centos9stream-openldap2.6.2

写在前面 因之前集群为centos6&#xff0c;已经很久没升级了&#xff0c;所以这次配置统一用户认证也是伴随系统升级到centos9时一起做的配套升级。新版的openldap配置大致与老版本比较相似&#xff0c;但有些地方配置还是有变化&#xff0c;另外&#xff0c;铺天盖地的帮助文…...

12-1- GAN -简单网络-线性网络

功能 随机噪声→生成器→MINIST图像。 训练方法 0 损失函数:gan的优化目标是一个对抗损失,是二分类问题,用BCELoss 1 判别器的训练,首先固定生成器参数不变,其次判别器应当将真实图像判别为1,生成图像判别为0 loss=loss(real_out, 1)+loss(fake_out, 0) 2 生成器的…...

Antv/G2 分组柱状图+折线图双轴图表

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,heightdevice-height"><title>分组柱状图折线图双轴图表</title><styl…...

springboot323基于Java的美妆购物网站的设计与实现

交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————...

vue项目本地开发完成后部署到服务器后报404

vue项目本地开发完成后部署到服务器后报404是什么原因呢&#xff1f; 一、如何部署 前后端分离开发模式下&#xff0c;前后端是独立布署的&#xff0c;前端只需要将最后的构建物上传至目标服务器的web容器指定的静态目录下即可 我们知道vue项目在构建后&#xff0c;是生成一系…...

Android设计模式--状态模式

真知即所以为行&#xff0c;不行不足谓之知 一&#xff0c;定义 当一个对象的内在状态改变时&#xff0c;允许改变其行为&#xff0c;这个对象看起来像是改变了其类。 这么说可能很难理解&#xff0c;通俗来讲就是当一个对象它有多种状态的时候&#xff0c;把每一种状态的行为…...

C++关系运算符重载

#include<iostream> using namespace std;class Person { public:string name;int age;Person(string n, int a){name n;age a;}//friend bool operator(Person& p1, Person& p2); 使用友元//成员函数实现函数关系符重载bool operator(Person& p) {if (na…...

HLS基础issue

hls 是一个用C/c 来开发PL &#xff0c;产生rtl的工具 hls是按照rtl code来运行的 &#xff0c; 但是rtl会在不同器件调用不同的源语&#xff1b; 可能产生的ip使用在vivado另外一个器件的话 会存在问题&#xff1b; Hls &#xff1a; vivado ip &#xff0c; vitis kernel 是…...

C#特性(Attribute)

C#特性&#xff08;Attribute&#xff09;是一种在程序中添加元数据的机制&#xff0c;它可以为代码提供额外的信息和指示。通过使用特性&#xff0c;我们可以为类、方法、属性等元素添加标记&#xff0c;以便在运行时进行更多的操作和决策。 C#特性是一种声明式编程的工具&…...

【设计模式】七大设计原则

七大设计原则 文章目录 七大设计原则一、概述二、单一职责原则三、接口隔离原则四、依赖倒转原则五、里氏替换原则六、开闭原则七、迪米特法则八、合成复用原则 一、概述 设计模式是为了让程序(软件)&#xff0c;具有更好代码重用性&#xff0c;可读性&#xff0c;可扩展性&am…...

思维导图软件 Xmind mac中文版特点介绍

XMind 2022 mac是一款思维导图软件&#xff0c;可以帮助用户创建各种类型的思维导图和概念图。 XMind mac软件特点 - 多样化的导图类型&#xff1a;XMind提供了多种类型的导图&#xff0c;如鱼骨图、树形图、机构图等&#xff0c;可以满足不同用户的需求。 - 强大的功能和工具&…...

Day32力扣打卡

打卡记录 买卖股票的最佳时机 IV&#xff08;状态机DP&#xff09; 链接 class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:n len(prices)max lambda x, y: x if x > y else yf [[-0x3f3f3f3f] * 2 for _ in range(k 2)]for i in range(k 2…...

抗击.Elbie勒索病毒:如何应对.Elbie病毒威胁,保卫您的数据

导言&#xff1a; .Elbie勒索病毒如今成为网络世界中的一大威胁&#xff0c;其狡猾性让用户防不胜防。本文将深入介绍.Elbie病毒的特点、对数据的威胁&#xff0c;提供被感染文件的恢复方法&#xff0c;并详述一系列强化网络安全的预防措施&#xff0c;让您远离.Elbie勒索病毒…...

Vue3 函数式弹窗

运行环境 vue3vitetselement-plus 开发与测试 1. 使用h、render函数创建Dialog 建议可在plugins目录下创建dialog文件夹&#xff0c;创建index.ts文件&#xff0c;代码如下 import { h, render } from "vue";/*** 函数式弹窗* param component 组件* param opti…...

如何解决 Critical dependency: the request of a dependency is an expression ?

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; ruoyi-nbcio: nbcio-boot的若依版本,基于ruoyi-flowable-plus和flowable6.7.2&#xff0c;目前处于开发功能完善阶段&#xff0c;目标是打造一个最好的若依平台上flowable流程管理系统开源版本&…...

挑战视觉边界,探索图形验证码背后的黑科技

在日常生活中&#xff0c;我们登录网站或者其他平台时&#xff0c;在填写完账号密码之后&#xff0c;还会让我们填写4或6位的数字或者英文字母等&#xff0c;填写正确才能请求登录。这个其实是防止某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试&#xff0c;如下…...

【网络奇缘】- 计算机网络|网络类型|性能指标

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏: 一见倾心,再见倾城 --- 计算机网络~&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 计算机网络分类 1.根据范围分类 ​编辑 2.按使用者分​编辑 3.按交换技术分 ​编辑4.按拓扑结构分 ​…...

Leetcode—剑指Offer LCR 140.训练计划II【简单】

2023每日刷题&#xff08;三十三&#xff09; Leetcode—LCR 140.训练计划II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* trainingPlan(struct ListNode* head, int cnt) {str…...

梦想编织者——Adobe Dreamweaver

今天&#xff0c;我们来谈谈一款在Adobe系列中推出的一款Adobe Dreamweaver&#xff0c;简称“DW”&#xff0c;中文名称 “梦想编织者”&#xff0c;是集网页制作和管理网站于一身的所见即所得网页代码编辑器。 利用对 HTML、CSS、JavaScript等内容的支持&#xff0c;设计人员…...

springMVC学习笔记-请求映射,参数绑定,响应,restful,响应状态码,springMVC拦截器

目录 概述 springMVC做了什么 springMVC与struts2区别 springMVC整个流程是一个单向闭环 springMVC具体的处理流程 springMVC的组成部分 请求映射 RequestMapping 用法 属性 1.value 2.method GET方式和POST方式 概述 HTTP给GET和POST做了哪些规定 GET方式&…...

Python实现视频字幕时间轴格式转换

自己喜欢收藏电影&#xff0c;有时网上能找到的中文字幕文件都不满足自己电影版本。在自己下载的压制版电影中已内封非中文srt字幕时&#xff0c;可以选择自己将srt的时间轴转为ass并替换ass中的时间轴。自己在频繁 复制粘贴改格式的时候想起可以用Python代码完成转换这一操作&…...

蓝桥杯 枚举

例题讲解 特别数的和 #include<iostream> using namespace std; bool ifspecial(int n){while(n){if(n%100||n%101||n%102||n%109){return true;} n/10;}return false; } int main(){int n;cin>>n;int sum0;for(int i1;i<n;i){if(ifspecial(i)){sumi;}}cout&l…...

C#的MessagePack(unity)--02

高级API (MessagePackSerializer) MessagePackSerializer类是MessagePack for C# 的入口点。静态方法构成了MessagePack for C# 的主要API。 APIDescriptionSerialize<T>将一个对象图序列化为MessagePack二进制块。可以使用异步变体获取Stream。也有非泛型重载可用。De…...

MySQL数据库管理--- mysql数据库迁移-v查看报错sql

默认情况下&#xff1a;每个客户端连接都会在服务器进程中拥有一个线程。 每个线程相当于一个LOCALNO的oracle远程链接。 1 该连接的查询只会在这个单独的线程中执行&#xff0c;该线程驻留在一个内核或者CPU上&#xff0c;服务器维护一个 缓冲区&#xff0c;用于存放已就绪的线…...

基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于秃鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…...

向pycdc项目提的一个pr

向pycdc项目提的一个pr 前言 pycdc这个项目&#xff0c;我之前一直有在关注&#xff0c;之前使用他反编译python3.10项目&#xff0c;之前使用的 uncompyle6无法反编译pyhton3.10生成的pyc文件&#xff0c;但是pycdc可以&#xff0c;但是反编译效果感觉不如uncompyle6。但是版…...

Spring学习③__Bean管理

目录 IOC接口ApplicationContext 详解IOC操作Bean管理基于xml方式基于xml方式创建对象基于xml方式注入属性使用set方法进行注入通过有参数的构造进行注入p 名称空间注入&#xff08;了解&#xff09; 基于xml方式注入其他类型属性xml 注入数组类型属性 IOC接口 IOC思想基于IOC…...

《视觉SLAM十四讲》-- 后端 2

文章目录 09 后端 29.1 滑动窗口滤波和优化9.1.1 实际环境下的 BA 结构9.1.2 滑动窗口法 9.2 位姿图9.2.1 位姿图的意义9.2.2 位姿图优化 09 后端 2 9.1 滑动窗口滤波和优化 9.1.1 实际环境下的 BA 结构 由于计算机算力的限制&#xff0c;我们必须控制 BA 的规模&#xff0c…...

安装插件时Vscode XHR Failed 报错ERR_CERT_AUTHORITY_INVALID

安装插件时Vscode XHR Failed 报错ERR_CERT_AUTHORITY_INVALID 今天用vscode 安装python插件时报XHR failed,无法拉取应用商城的数据&#xff0c; 报的错如下&#xff1a; ERR_CERT_AUTHORITY_INVALID 翻译过来就是证书有问题 找错误代码的方法&#xff1a; 打开vscode, 按F1…...

ON_WM_TIMER()

ON_WM_TIMER() static_cast: cannot convert from void (__cdecl CPop::* )(UINT) to void (__cdecl CWnd::* )(UINT_PTR) OnTimer(UINT nIDEvent) ----> OnTimer(UINT_PTR nIDEvent)...

【Unity】单例模式及游戏声音管理类应用

【Unity】单例模式及游戏声音管理类应用 描述 在日常游戏项目开发中&#xff0c;单例模式是一种常用的设计模式&#xff0c;它允许在应用程序的生命周期中只创建一个对象实例&#xff0c;并提供对该实例的全局访问点。通过使用单例模式&#xff0c;可以提高代码的可维护性和可…...

视频剪辑技巧:轻松搞定视频随机合并,一篇文章告知所有秘诀

在视频制作的过程中&#xff0c;视频随机合并是一种创新的剪辑手法&#xff0c;它打破了传统的线性剪辑模式&#xff0c;使得视频剪辑更加灵活和有趣。通过将不同的视频片段随机组合在一起&#xff0c;我们可以创造出独特的视觉效果和情感氛围。这种剪辑方式让观众在观看视频时…...

torch.stack

看网上看多没讲的不是很明白&#xff0c;我来试试空间上的理解 # 假设是时间步T1的输出 T1 torch.tensor([[1, 2, 3],[4, 5, 6],[7, 8, 9]]) # 假设是时间步T2的输出 T2 torch.tensor([[10, 20, 30],[40, 50, 60],[70, 80, 90]])输出&#xff1a; print(torch.stack((T1,T2…...

手搓哈希表、列表、队列,只为了用C语言快速求解华容道游戏,我不是大佬,只是一个游戏算法爱好者

背景 多年前曾经写过C语言求解华容道&#xff0c;当时没有用到哈希表&#xff0c;导致整个查重搜索数组过大&#xff0c;每次求解都得花上数分钟的时间&#xff0c;如今时过境迁&#xff0c;对数据结构和算法有了更深的理解&#xff0c;所以得把这一块补上了。(其实就是最近想…...

MySQL 的执行原理(一)

5.1 单表访问之索引合并 我们前边说过 MySQL 在一般情况下执行一个查询时最多只会用到单个二级 索引&#xff0c;但存在有特殊情况&#xff0c;在这些特殊情况下也可能在一个查询中使用到多个二 级索引&#xff0c;MySQL 中这种使用到多个索引来完成一次查询的执行方法称之为&…...

2023_“数维杯”问题B:棉秸秆热解的催化反应-详细解析含代码

题目翻译&#xff1a; 随着全球对可再生能源需求的不断增加&#xff0c;生物质能作为一种成熟的可再生能源得到了广泛的关注。棉花秸秆作为一种农业废弃物&#xff0c;因其丰富的纤维素、木质素等生物质成分而被视为重要的生物质资源。虽然棉花秸秆的热解可以产生各种形式的可…...

django理解01

接在Vue理解01后 项目创建 pycharm上下载django框架 在需要创建项目的文件夹终端django-admin startproject 项目名终端创建APPpython manage.py startapp app名注册APP&#xff0c;settings.py里INSTALLED_APPS下&#xff0c;增加一项&#xff1a;app名.apps.类名&#xff0…...

限制Domain Admin登录非域控服务器和用户计算机

限制Domain Admin管理员使用敏感管理员帐户(域或林中管理员组、域管理员组和企业管理员组中的成员帐户)登录到信任度较低的服务器和用户端计算机。 此限制可防止管理员通过登录到信任度较低的计算机来无意中增加凭据被盗的风险。 建议采用的策略 建议使用以下策略限制对信任度…...

原来机械硬盘比内存慢10万倍

我们都知道机械硬盘的速度很慢&#xff0c;内存的速度很快&#xff0c;那么不同存储器之间的差距到底有多大呢&#xff1f; 我们先来看一幅图&#xff1a; CPU访问寄存器的时间是0.3纳秒&#xff0c;访问L1高速缓存的时间是1纳秒&#xff0c;访问L2高速缓存的时间是4纳秒… 秒…...

ElementUI的Dialog弹窗实现拖拽移动功能

文章目录 1. ElementUI简介2. 弹窗基本使用3. 实现拖拽移动功能4. 拓展与分析 &#x1f389;欢迎来到Java学习路线专栏~ElementUI的Dialog弹窗实现拖拽移动功能 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&a…...

生成式AI模型量化简明教程

在不断发展的人工智能领域&#xff0c;生成式AI无疑已成为创新的基石。 这些先进的模型&#xff0c;无论是用于创作艺术、生成文本还是增强医学成像&#xff0c;都以产生非常逼真和创造性的输出而闻名。 然而&#xff0c;生成式AI的力量是有代价的—模型大小和计算要求。 随着生…...

机器人制作开源方案 | 智能快递付件机器人

一、作品简介 作者&#xff1a;贺沅、聂开发、王兴文、石宇航、盛余庆 单位&#xff1a;黑龙江科技大学 指导老师&#xff1a;邵文冕、苑鹏涛 1. 项目背景 受新冠疫情的影响&#xff0c;大学校园内都采取封闭式管理来降低传染的风险&#xff0c;导致学生不能外出&#xff0c…...

PostgreSQL技术大讲堂 - 第34讲:调优工具pgBagder部署

PostgreSQL从小白到专家&#xff0c;是从入门逐渐能力提升的一个系列教程&#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容&#xff0c;希望对热爱PG、学习PG的同学们有帮助&#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第34讲&#…...

《Python日志新宠——Loguru,轻松记录,笑对Bug!》

嘿&#xff0c;程序媛和程序猿们&#xff01;&#x1f469;‍&#x1f4bb;&#x1f468;‍&#x1f4bb; 你们是不是也曾为日志处理这个“小事”而头疼&#xff1f;别着急&#xff0c;今天我给你们介绍一个简直比拥抱泰迪熊还要温暖的Python库——Loguru&#xff01;这货不仅强…...

NET8 ORM 使用AOT SqlSugar

.NET AOT8 基本上能够免强使用了, SqlSugar ORM也支持了CRUD 能在AOT下运行了 Nuget安装 SqlSugarCore 具体代码 StaticConfig.EnableAot true;//启用AOT 程序启动执行一次就好了//用SqlSugarClient每次都new,不要用单例模式 var db new SqlSugarClient(new ConnectionC…...

CCRC认证是什么?

什么是CCRC认证&#xff1f; 信息安全服务资质&#xff0c;是信息安全服务机构提供安全服务的一种资格&#xff0c;包括法律地位、资源状况、管理水平、技术能力等方面的要求。 信息安全服务资质&#xff08;CCRC&#xff09;是依据国家法律法规、国家标准、行业标准和技术规范…...

linux内核面试题(2)

整理了一些网上的linux驱动岗位相关面试题&#xff0c;如果错误&#xff0c;欢迎指正。 工作队列是运行在进程上下文&#xff0c;还是中断上下文&#xff1f;它的回调函数是否允许睡眠&#xff1f; 工作队列是运行在进程上下文的。工作队列的回调函数是允许睡眠的&#xff0c;…...

YOLOV5----修改损失函数-ShuffleAttention

主要修改yolo.py、yolov5s.yaml及添加ShuffleAttention.py 一、ShuffleAttention.py import numpy as np import torch from torch import nn from torch.nn import init from torch.nn.parameter import Parameterclass ShuffleAttention(nn.Module):def...

Kafka(四)消费者消费消息

文章目录 如何确保不重复消费消息&#xff1f;消费者业务逻辑重试消费者提交自定义反序列化类消费者参数配置及其说明重要的参数session.time.ms和heartbeat.interval.ms和group.instance.id增加消费者的吞吐量消费者消费的超时时间和poll()方法的关系 消费者消费逻辑启动消费者…...

Python uiautomation获取微信内容!聊天记录、聊天列表、全都可获取

Python uiautomation 是一个用于自动化 GUI 测试和操作的库&#xff0c;它可以模拟用户操作来执行各种任务。 通过这个库&#xff0c;可以使用Python脚本模拟人工点击&#xff0c;人工操作界面。本文使用 Python uiautomation 进行微信电脑版的操作。 以下是本次实验的版本号。…...