资讯专栏INFORMATION COLUMN

堡垒跳板机实现——ldap配置

Charles / 3028人阅读

摘要:进程由软件包提供,根据配置信息,与后端的认证服务器进行交互。

这是关于堡垒跳板机的第三篇文章,之前介绍了实现堡垒跳板机的整体三层架构 和 设计实现:
堡垒跳板机整体架构
堡垒跳板机架构实现

本篇介绍整个体系中的一个补充,对第三层ldap架构的实现的具体操作进行下记录。

整体目标

后端服务器数量日益增加,账号的数量也在不断增加,账号的统一管理变得尤为重要。结合堡垒机,主要针对服务器账号体系接入LDAP管理做如下主要工作:

ldap server主从的搭建,ldap主从考虑用同步复制(syncrepl)实现,大致为slave到master以拉的模式同步目录树,master负责读写,slave只读。另外主从都需接入负载均衡提供读服务;

服务器账号接入ldap,客户端可以ssh远程连接服务器用户名和密码登录;

ldap管理客户端的公钥,使客户端可以ssh服务器免密码登录;

ldap管理服务器用户的sudo权限

ldap主从 syncrepl同步机制说明

openldap有自带的几种同步模式,也可以采用inotify+rsync或者rsync加入定时任务等方法。这里采用的是syncrepl同步机制,syncrepl是OpenLDAP服务器之间同步所使用的协议, 且属于slapd的一个模块。在它基本的refreshOnly同步模式下, 提供者使用基于拉模式的同步, 在拉模式同步下, 消费者定期拉取提供者( master) 服务器的内容来更新本地目录树并应用。

从库写入数据将出现此提示:

Enter LDAP Password:
adding new entry "uid=test4,ou=people,dc=lianjia,dc=com"
ldap_add: Server is unwilling to perform (53)
OpenLDAP的同步模式要求

1) OpenLDAP服务器之间需要保持时间同步。
2) OpenLDAP软件包版本保持一致。
3) OpenLDAP节点之间域名可以互相解析。
4) 配置OpenLDAP同步复制, 需要提供完全一样的配置及目录树信息。
5) 数据条目保持一致。
6) 额外的schema文件保持一致。

syncrepl同步机制的优缺点

此种模式的优势就是简单,仅slave定期从master拉取数据就行,并且能够完全同步,缺点是面对上万条的大量数据,并且写操作较多时,压力就会产生,鉴于ldap本身的优势就是提供读的服务为主,可能一天的写进数据量都不会太大,此种模式理论上是可行的。

在slapd.conf中的配置

主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=*****************                    #密码
Ldapclient(部署于服务器端)配置变更 相关package

openldap

oddjob

oddjob-mkhomedir

nss-pam-ldapd

openldap-clients

authconfig

openssh-ldap

开机自启动

messagebus

oddjobd

nslcd

sshd

服务器接入ldap的配置命令
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软件(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 重新安装此软件

服务端slapd与客户端nslcd连接问题

问题描述:
ldap初始化的机器以及两台ldap服务端登陆缓慢,将近一分钟才能登陆上,watch -n 1 "netstat -apn | grep slapd" 发现ldap服务器的slapd与客户端nslcd建立的ESTABLISHED非常之多,并且连接数一直在增长。

问题原因:
连接数过高时候(超过默认1024),slapd就会hang死,并且此时打开的文件数也异常之高。服务端一直保持与客户端建立长连接,不主动释放连接,同时客户端默认与服务端是紧耦合的连接方式,会一直尝试连接服务端。

问题解决:
更改客户端与服务端的ESTABLISH POLICY,将客户端/etc/pam_ldap.confbind_policy hard改为bind_policy soft
/etc/pam_ldap.conf/etc/nslcd.conf中的idle_timelimit timelimit bind_timelimit(分别为不需要连接服务端时的连接断开时间,查询服务器数据的超时断开时间,连接服务器超时的连接断开时间)调整为5秒。将服务端idletimeout调整为5秒,这样客户端在不需要ldap认证时,服务端会在5秒断开连接。
这样,服务端只在客户端请求ldap认证时才与客户端建立连接,并且闲置时间为5秒即断开连接,这样连接数不会太高,并且打开的文件数也不会太高,同时客户端也不会因为服务端不响应而一直尝试连接服务端。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/9481.html

相关文章

  • 堡垒跳板实现——整体架构

    摘要:背景介绍最近,笔者接手公司的一项任务建造服务器的堡垒跳板机。关于跳板机的实现,其实简单版本网上一大堆,甚至更有开源堡垒机可供选择,方案很多。目标规模使用两台服务器做主从集群,所有实体服务器对接此集群,从而统一进行验证。 背景介绍 最近,笔者接手公司的一项任务:建造服务器的堡垒跳板机。 关于跳板机的实现,其实简单版本网上一大堆,甚至更有开源堡垒机Jumpserver可供选择,方案很多。接...

    JinB 评论0 收藏0
  • 堡垒跳板实现——架构实现

    摘要:关于堡垒机三层架构可以参见前一篇堡垒跳板机实现整体架构登录入口先说第一层,这层的主要功能为检测用户是否有使用堡垒机的权限。 总述 这是关于堡垒机实现的第二篇文章,主要阐述三层架构分别如何实现,包括第一层&第二层的设计与实现,即用户登录堡垒机的入口 & 授权验证, 第三层,如何通过ldap来统一管理服务器账号权限。 关于堡垒机三层架构可以参见前一篇blog:堡垒跳板机实现——整体架构 登...

    hyuan 评论0 收藏0
  • ssh登录自动填充密码

    摘要:问题要通过一个跳板机登录其他主机,每次使用再输入密码的方式太耗时,想要进行密码自动填充解决使用在脚本中封装的登录自动填充密码功能使用的自动填充密码功能交互功能将写入配置文本或者直接在脚本作为字典读取用户输入,匹配出,调用进行登录,相关操作 问题 要通过一个跳板机ssh登录其他主机,每次使用ssh hostIp -l username再输入密码的方式太耗时,想要进行密码自动填充 解决 使...

    姘搁『 评论0 收藏0
  • iTerm2 结合 Linux expect 实现 ssh 自动登陆, 通过跳板登录服务器内网功能

    摘要:解决方法脚本通过跳板机登录内网服务器,如果只登陆有外网的服务器,把有关内网的部分删掉就可以啦,例如跳板机就是有外网的服务器。执行完成后保持交互状态,把控制权交给控制台。 痛点 一般情况下,公司所有的服务器都在内网,公网访问、管理服务器都要先通过登录一台跳板机,然后再由跳板机登录到相应的服务器进行操作,跳板机与服务器的连接都是内网地址。我们经常看到的现象就是下图这样(博主 Mac 自带的...

    williamwen1986 评论0 收藏0
  • 打赢数据安全攻坚战,从Hadoop-security治理说起!

    摘要:整个集群的所有数据,或者至少是公司级的敏感数据,需要加密应该有统一的密钥管理中心管理着每一类数据的访问密钥。全数据中心的所有数据都是加密的,而且密钥管理中心做到了高可用。服务器端网络不安全,被攻破,被拖库。 作者介绍汪涉洋,来自美国视频网站hulu的工程师,毕业于北京理工大学计算机专业,目前从事大数据基础架构方面的工作,个人知乎专栏大数据SRE的总结:http://dwz.cn/7ygSgc...

    CoXie 评论0 收藏0

发表评论

0条评论

Charles

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<