1. 背景
ldap默认是可以匿名访问的,优化修复,加鉴权认证
2. 修复方案
- 生成一个guest租户账号,减小账号泄露暴露风险
- 混淆客户端配置在sssd.conf中的密码,避免明文密码暴露问题
3. 实施方案
3.1. 参数定义
{{guest-password}} , 是代指访客租户密码,包括大括号一起替换
3.2. guest租户密码生成
下面需要设置guest租户密码,需要提前生成,生成16位强密码
下面是一段生成强密码的参考脚本,也可以通过其他一些工具生成
#!/bin/bash
set -e
# 生成4个随机的小写字母
lower_char="$(tr -dc '[:lower:]' < /dev/urandom | fold -w 4 | head -n 1)"
# 生成4个随机的大写字母
upper_char="$(tr -dc '[:upper:]' < /dev/urandom | fold -w 4 | head -n 1)"
# 生成4个随机的特殊符号
symbol="$(tr -dc '!#^*()' < /dev/urandom | fold -w 4 | head -n 1)"
# 生成5个随机的数字
digit="$(tr -dc '0-9' < /dev/urandom | fold -w 4 | head -n 1)"
# 根据生成的随机字符拼接打乱
pwd=$(echo ${lower_char}${upper_char}${symbol}${digit} | fold -w1 | shuf | tr -d '\n')
# 检查密码长度是否为16
if [ ${#pwd} -eq 16 ]; then
echo -n "$pwd"
else
echo "$pwd length is not 16."
exit 1
fi
3.3. 创建访客租户
功能: 创建房租ldap租户
执行位置:ldap服务器两台任意一台,注意,创建文件不要放到openldap本身的配置目录
vi guest.ldif
内容如下,注意替换下面的客户端密码
dn:cn=guest,dc=telecom,dc=cn
cn:guest
objectclass:simpleSecurityObject
objectclass:organizationalRole
description:ldap read only user
userPassword: {{guest-password}}
执行创建,注意替换执行命令中的管理密码,随后根据提示输入ldap管理员admin的密码
ldapadd -x -D "cn=master,dc=telecom,dc=cn" -W -f guest.ldif
查询是否新建成功,输入下面命令后,根据提示输入ldap管理员master的密码:
ldapsearch -x -LLL -b 'dc=telecom,dc=cn' -H ldap:// -D "cn=master,dc=telecom,dc=cn" -W cn uid |grep guest
3.4. 设置访客租户权限
功能: ldap访问权限设置,保证guest租户只有查询权限,不能进行修改新增等权限
执行位置:ldap服务器两台任意一台,注意,创建文件不要放到openldap本身的配置目录
vi replace-olcAccess.ldif
内容如下:
注意这里指定修改的数据库序号是2,和上面第一步查询的一致
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace:olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=master,dc=telecom,dc=cn" write by anonymous auth by self write by dn="cn=guest,dc=telecom,dc=cn" read by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=master,dc=telecom,dc=cn" write by * read
执行更新:
ldapmodify -H ldapi:/// -Y EXTERNAL -f replace-olcAccess.ldif
3.5. 客户端sssd设置
执行位置:翼MR部署的DataNode节点主机
编辑/etc/sssd/sssd.conf
更新配置,注意替换下面的租户guest密码:
ldap_default_bind_dn = cn=guest,dc=telecom,dc=cn
ldap_default_authtok_type = password
ldap_default_authtok = {{guest-password}}
重启sssd
systemctl stop sssd
sss_cache -E
systemctl start sssd
3.6. 混淆密码
执行位置:翼MR部署的DataNode节点主机
执行命令:
sss_obfuscate -d 'hadoop.bigdata.telecom.cn'
随后根据提示,连续两次输入租户guest的密码
systemctl stop sssd
sss_cache -E
systemctl start sssd
执行完成后,/etc/sssd/sssd.conf中配置如下,可以看到,原来的明文密码已经被混淆了
3.7. 验证guest租户可用性
新建一个工作域下的test200租户
新建完成后,在已经实施变更的任意一台datanode主机上使用id查询
id test200
如果查询成功,表示guest租户可用
执行完测试后,删除test200租户