这是关于堡垒跳板机的第三篇文章,以前介绍了实现堡垒跳板机的总体三层架构 和 设计实现:
堡垒跳板机总体架构
堡垒跳板机架构实现segmentfault
本篇介绍整个体系中的一个补充,对第三层ldap架构的实现的具体操做进行下记录。后端
后端服务器数量日益增长,帐号的数量也在不断增长,帐号的统一管理变得尤其重要。结合堡垒机,主要针对服务器帐号体系接入LDAP管理作以下主要工做:服务器
ldap server主从的搭建,ldap主从考虑用同步复制(syncrepl)实现,大体为slave到master以拉的模式同步目录树,master负责读写,slave只读。另外主从都需接入负载均衡提供读服务;session
服务器帐号接入ldap,客户端能够ssh远程链接服务器用户名和密码登陆;架构
ldap管理客户端的公钥,使客户端能够ssh服务器免密码登陆;app
ldap管理服务器用户的sudo权限负载均衡
openldap有自带的几种同步模式,也能够采用inotify+rsync
或者rsync
加入定时任务等方法。这里采用的是syncrepl
同步机制,syncrepl
是OpenLDAP服务器之间同步所使用的协议, 且属于slapd
的一个模块。在它基本的refreshOnly
同步模式下, 提供者使用基于拉模式的同步, 在拉模式同步下, 消费者按期拉取提供者( master) 服务器的内容来更新本地目录树并应用。 less
从库写入数据将出现此提示:ssh
Enter LDAP Password: adding new entry "uid=test4,ou=people,dc=lianjia,dc=com" ldap_add: Server is unwilling to perform (53)
1) OpenLDAP服务器之间须要保持时间同步。
2) OpenLDAP软件包版本保持一致。
3) OpenLDAP节点之间域名能够互相解析。
4) 配置OpenLDAP同步复制, 须要提供彻底同样的配置及目录树信息。
5) 数据条目保持一致。
6) 额外的schema文件保持一致。ide
此种模式的优点就是简单,仅slave
按期从master
拉取数据就行,而且可以彻底同步,缺点是面对上万条的大量数据,而且写操做较多时,压力就会产生,鉴于ldap
自己的优点就是提供读的服务为主,可能一天的写进数据量都不会太大,此种模式理论上是可行的。
主master:
modulepath /usr/lib/openldap modulepath /usr/lib64/openldap moduleload syncprov.la #以上为开启同步模块 index entryCSN,entryUUID eq #添加索引,提升性能,此索引主要用于提升同步速度,同步须要使用到这二个字段 overlay syncprov #后端工做在overlay模式(不明,缺乏此参数同步不能进行) syncprov-checkpoint 100 10 #当知足修改100个条目或者10分钟的条件时主动以推的方式执行 syncprov-sessionlog 100 #同步时的会话日志量
从slave:
modulepath /usr/lib/openldap modulepath /usr/lib64/openldap moduleload syncprov.la index entryCSN,entryUUID eq syncrepl rid=002 #节点ID必须在整个OpenLDAP集群中是惟一的, serverID与MySQL复制中的server-id是同等的概念 provider=ldap://admin.lianjia.com:389/ #主OpenLDAP服务器IP地址及端口 type=refreshOnly #设定模式为拉 retry="60 10 600 +" #在开始的10次每60秒重试一次,在10次之后每600秒重试一次 interval=00:00:00:10 #同步的时间间隔,interval格式day:hour:minitus:second) searchbase="dc=lianjia,dc=com" #从另一台OpenLDAP服务器即master的根域同步条目 scope=sub #sub表明同步根域lianjia.com下的全部条目 schemachecking=off #不启用schema语法检测 bindmethod=simple #采用的同步验证模式为简单 binddn="cn=admin,dc=lianjia,dc=com" #使用admin.lianjia.com即管理员读取目录树信息 attrs="*,+" #同步全部属性信息 credentials=***************** #密码
openldap
oddjob
oddjob-mkhomedir
nss-pam-ldapd
openldap-clients
authconfig
openssh-ldap
messagebus
oddjobd
nslcd
sshd
authconfig --enablemkhomedir --enableldap --enableldapauth --ldapserver=ldap://admin.lianjia.com --ldapbasedn="dc=lianjia,dc=com" --enableforcelegacy --disablesssd --disablesssdauth --update --enablemkhomedir #建立家目录并配置相关用户家目录的环境变量,建议都采用oddjob软件的mkhomedir模块 --enableldap --enableldapauth --ldapserver=ldap://admin.lianjia.com --ldapbasedn="dc=lianjia,dc=com" #接入ldapserver --enableforcelegacy --disablesssd --disablesssdauth #不采用sssd验证的方式,默认会采用。 --update #对相关配置进行更新
/etc/sudo-ldap.conf:
uri ldap://admin.lianjia.com/' #ldap服务端地址 SUDOERS_BASE ou=sudoers,dc=lianjia,dc=com' #sudo的规则都在组织单元sudoers下,服务端需先存在组织单元ou=sudoers和sudo相关的schema文件
/etc/nsswitch.conf:
#认证的顺序配置 原配置为: passwd: files shadow: files group: files netgroup: nisplus automount: files nisplus 现有配置为: passwd: files ldap shadow: files ldap group: files ldap netgroup: files ldap automount: files ldap sudoers: files ldap #配置ldap管理sudo规则时新增的
/etc/ssh/sshd_config:
PubkeyAuthentication yes #容许sshpublickey验证 AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper #抓取ldapserver的用户配置的公钥的脚本 AuthorizedKeysCommandRunAs root #运行脚本命令用户为root
/etc/ssh/ldap.conf:
URI ldap://admin.lianjia.com BASE dc=lianjia,dc=com #服务端需先配置导入sshpublickey相关的schema文件 port 389 ssl off
/etc/nslcd.conf:
#配置客户端与后端的ldap认证服务器进行交互,新增以下 uid nslcd #默认 gid ldap #默认 uri ldap://admin.lianjia.com base dc=lianjia,dc=com ssl no tls_cacertdir /etc/openldap/cacerts
/etc/pam_ldap.conf:
#配置c/s交互中走pam的认证 uri ldap://admin.lianjia.com ssl no tls_cacertdir /etc/openldap/cacerts pam_password md5
/etc/pam.d/system-auth:
#系统认证走ldap,如su - user(ldap),debug打印相关日志信息 auth required pam_env.so debug auth sufficient pam_unix.so nullok try_first_pass debug auth requisite pam_succeed_if.so uid >= 500 quiet auth sufficient pam_ldap.so use_first_pass debug #新增行 auth required pam_deny.so account required pam_unix.so broken_shadow debug #新增broken_shadow参数,在做为account使用时,该参数用来忽略对影子密码的读错误 account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account [default=bad success=ok user_unknown=ignore] pam_ldap.so debug #新增行 account required pam_permit.so password requisite pam_cracklib.so try_first_pass debug retry=3 type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok debug password sufficient pam_ldap.so use_authtok debug #新增行 password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so debug session optional pam_oddjob_mkhomedir.so umask=0022 debug #新增行,authconfig自动配置时,家目录umas为0077,手动改的0022 session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so debug session optional pam_ldap.so debug
/etc/sysconfig/authconfig:
#authconfig软件安装后所带的配置文件,配置文件用来跟踪LDAP身份认证机制是否正确启用,好比里面就配置了关闭sssd认证采用ldap认证,并配置家目录等等。 修改后的内容以下:(no-->yes) USESHADOW=yes USELDAPAUTH=yes USELOCAUTHORIZE=yes USELDAP=yes FORCELEGACY为yes
/etc/openldap/ldap.conf:
#主要用于客户端查询OpenLDAP服务器条目信息。 新增以下: TLS_CACERTDIR /etc/openldap/cacerts URI ldap://admin.lianjia.com BASE dc=lianjia,dc=com #以上内容除了/etc/nsswitch.conf配置文件的新增行sudoers: files ldap外,所有经过authconfig命令实现批量配置,操做前作了初始化的备份,不指定备份,authconfig也将上一次的配置备份。备份目录在/var/lib/authconfig/。
变动过程当中涉及到的配置文件有:
/etc/nsswitch.conf #配置认证顺序,好比认证时先走file仍是ldap仍是nis等等 /etc/nslcd.conf #这里是经过nslcd方式与OpenLDAP服务端进行交互。nslcd进程由nss-pam-ldapd软件包提供, 根据nslcd.conf配置信息, 与后端的认证服务器进行交互。 /etc/pam_ldap.conf #实现ldapclient与ldapserver的交互 /etc/openldap/ldap.conf #主要用于查询OpenLDAP服务器全部条目信息。 /etc/pam.d/system-auth #加入了pam_ldap.so的模块,主要用于系统自己的一些认证如:su - user /etc/pam.d/password-auth #各类密码的认证走的一个配置文件,其中sshd会include这个模块,因此sshd认证的相关参数配置在此 /etc/sysconfig/authconfig #authconfig软件安装后所带的配置文件,配置文件用来跟踪LDAP身份认证机制是否正确启用,好比里面就配置了关闭sssd认证采用ldap认证,并配置家目录等等。
有测试过程当中出现安装完nslcd软件(nslcd用于与后端的ldap认证服务器进行交互),可是却没有自动建立nslcd的帐户,本来应建立以下两个帐户:
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin nslcd:x:65:55:LDAP Client User:/:/sbin/nologin
解决方案:yum reinstall -y nss-pam-ldapd
从新安装此软件
问题描述:
ldap初始化的机器以及两台ldap服务端登录缓慢,将近一分钟才能登录上,watch -n 1 'netstat -apn | grep slapd'
发现ldap服务器的slapd
与客户端nslcd
创建的ESTABLISHED
很是之多,而且链接数一直在增加。
问题缘由:
链接数太高时候(超过默认1024),slapd
就会hang死,而且此时打开的文件数也异常之高。服务端一直保持与客户端创建长链接,不主动释放链接,同时客户端默认与服务端是紧耦合的链接方式,会一直尝试链接服务端。
问题解决:
更改客户端与服务端的ESTABLISH POLICY
,将客户端/etc/pam_ldap.conf
中bind_policy hard
改成bind_policy soft
。/etc/pam_ldap.conf
与/etc/nslcd.conf
中的idle_timelimit timelimit bind_timelimit
(分别为不须要链接服务端时的链接断开时间,查询服务器数据的超时断开时间,链接服务器超时的链接断开时间)调整为5秒。将服务端idletimeout
调整为5秒,这样客户端在不须要ldap认证时,服务端会在5秒断开链接。这样,服务端只在客户端请求ldap认证时才与客户端创建链接,而且闲置时间为5秒即断开链接,这样链接数不会过高,而且打开的文件数也不会过高,同时客户端也不会由于服务端不响应而一直尝试链接服务端。