生产环境下OpenLDAP常见运维管理操作

准备工作

VMware17Pro:https://download3.vmware.com/software/WKST-1750-WIN/VMware-workstation-full-17.5.0-22583795.exe

Ubuntu22.04.3:https://releases.ubuntu.com/22.04.3/ubuntu-22.04.3-desktop-amd64.iso

设置root密码:sudo passwd root

启用vmware tools:sudo apt install open-vm-tools-desktop

安装标版vim:sudo apt install vim

拍摄快照(不知道要失败多少次,做好心理准备)

1.服务端节点安装配置

(建议先安装LAM管理工具,这样出现问题可以多一条排错通道)

安装LDAP包

(1)设置hostname(vim /etc/hosts)

 127.0.0.1 ldap.test.com Ubuntu01

(2)安装服务端所需包

apt install slapd ldap-utils

(3)修改配置文件内容(vim /etc/ldap/ldap.conf)       

BASE dc=ldap,dc=test,dc=com
URI ldap://ldap.test.com
# TLS certificates (needed for GnuTLS)
TLS_CACERT /etc/ssl/certs/ca-certificates.crt
TLS_REQCERT demand

(3)设置slapd

dpkg-reconfigure slapd

当提示设置DNS domain name(设置DNS域名)时,输入: ldap.test..com 当提示Organization name(设置组织名)时,输入::test

(4)测试服务端认证是否成功 ldapwhoami -x -D cn=admin,dc=ldap,dc=test,dc=com -W 在输入密码后显示dn:cn=admin,dc=ldap,dc=test,dc=com,则表示成功 ldapwhoami –x 输出anonymous,则表示成功

用户信息的增删改查


(1)创建用户信息ldif文件
(vim /etc/ldap/slapd.d/add_content.ldif )
• People节点(存储用户)
• Groups节点(存储用户组)
• ldap用户组
• liming用户

dn: uid=liming,ou=People,dc=ldap,dc=test,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: liming
sn: Li
givenName: Ming
cn: liming
displayName: 李明
uidNumber: 1001
gidNumber: 500
userPassword: {CRYPT}x
gecos: liming
mail: [email protected]
loginShell: /bin/bash
homeDirectory: /home/liming


(2)执行命令添加用户组、用户等等
ldapadd -x -D cn=admin,dc=ldap,dc=test,dc=com -W -f add_content.ldif
(3)设置用户liming的密码
ldappasswd -x -D cn=admin,dc=ldap,dc=test,dc=com -W -S 
uid=liming,ou=People,dc=ldap,dc=test,dc=com
(4)利用ldapsearch命令查看上述信息
ldapsearch -x -LLL -b dc=ldap,dc=test,dc=com uid=liming cn gidNumber uidNumber
(5)使用ldapmodify修改信息(vim /etc/ldap/slapd.d/mod_content.ldif)
(6)执行命令修改信息
ldapmodify -x -D cn=admin,dc=ldap,dc=test,dc=com
-W -f mod_content.ldif
 

dn: cn=ldap,ou=Groups,dc=ldap,dc=test,dc=com
changetype: modify
replace: description
description: this is a ldap

dn: uid=liming,ou=People,dc=ldap,dc=test,dc=com
changetype: modify
replace: displayName
displayName: liming
-
replace: mail
mail: [email protected]
 修改root DN密码


(1)获取新密码的哈希值
slappasswd   -x   密码
(2)生成修改root DN密码的文件(vim /etc/ldap/slapd.d/changerootpw.ldif)

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: 生成的密码哈希字符串


(3)执行命令修改信息
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f changerootpw.ldif
(4)判断密码是否修改
ldapwhoami -x -D cn=admin,dc=ldap,dc=test,dc=com –w 密码

访问控制


• 访问控制变更(新增只读账户readonly)
为了安全,采用客户端通过只读账户获取服务端LDAP用户信息进行认证,为此在LDAP服务端设置所需要的LDAP账户readonly。
(1)生成ldif文件(vim /etc/ldap/slapd.d/add_readonly.ldif)

dn: cn=readonly,dc=ldap,dc=test,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: readonly
description: for sssd, readonly user
userPassword: {CRYPT}x


(2)执行命令提交修改
ldapadd -x -D cn=admin,dc=ldap,dc=test,dc=com -W -f add_readonly.ldif
(3)设置readonly用户密码
ldappasswd -x -D cn=admin,dc=ldap,dc=test,dc=com -W -S cn=readonly,dc=ldap,dc=test,dc=com

(4)设置readonly ACL只读权限(vim /etc/ldap/slapd.d/readonly-user_access.ldif)

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=ldap,dc=test,dc=com" write
by dn="cn=readonly,dc=ldap,dc=test,dc=com" read
by self write
by anonymous auth
by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to *
by dn="cn=admin,dc=ldap,dc=test,dc=com" write
by dn="cn=readonly,dc=ldap,dc=test,dc=com" read
by self write
by anonymous auth
by * none


(5)执行命令提交修改
ldapmodify -Y EXTERNAL -H ldapi:/// -D cn=admin,dc=ldap,dc=test,dc=com -W -f readonlyuser_access.ldif
(6)验证操作:
ldapsearch -x -LLL -b dc=ldap,dc=test,dc=com uid=liming gidNumber uidNumber
ldapsearch -x -LLL -D cn=readonly,dc=ldap,dc=test,dc=com -w 密码 -b dc=ldap,dc=test,dc=com 
uid=liming gidNumber uidNumber

启用TLS认证

(1)安装所需包
apt install gnutls-bin ssl-cert

(2)生成CA( Certificate Authority )的私钥
certtool --generate-privkey --bits 4096 --outfile /etc/ssl/private/mycakey.pem
(3)在 /etc/ssl/下创建ca.info文件,定义CA的模板文件(vim /etc/ssl/ca.info):

cn = test ldap
ca
cert_signing_key
expiration_days = 3650


• 生成TLS加密证书
(4)生成自签名 CA 证书存为文件/usr/local/share/ca-certificates/mycacert.crt
certtool --generate-self-signed \
--load-privkey /etc/ssl/private/mycakey.pem \
--template /etc/ssl/ca.info \
--outfile /usr/local/share/ca-certificates/mycacert.crt
(5)执行update-ca-certificates将新的CA认证加入可信任的CA列表中
update-ca-certificates
(6)生成服务端的私钥文件
certtool --generate-privkey --bits 2048 --outfile /etc/ldap/Ubuntu01_slapd_key.pem
• 生成TLS加密证书
(7)在/etc/ssl/下创建服务端认证证书的模板(vim /etc/ssl/Ubuntu01.info)

organization = test ldap
cn = ldap.test.com
tls_www_server
encryption_key
signing_key
expiration_days = 3650


(8)生成服务端认证证书
certtool --generate-certificate \
--load-privkey /etc/ldap/Ubuntu01_slapd_key.pem \
--load-ca-certificate /etc/ssl/certs/mycacert.pem \
--load-ca-privkey /etc/ssl/private/mycakey.pem \
--template /etc/ssl/Ubuntu01.info \
--outfile /etc/ldap/Ubuntu01_slapd_cert.pem


(9)创建证书相关信息ldif文件(vim /etc/ldap/slapd.d/certinfo.ldif)

dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/mycacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/Ubuntu01_slapd_cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/Ubuntu01_slapd_key.pem


(10)将上述信息加入LDAP配置
ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/ldap/slapd.d/certinfo.ldif
(11)测试是否成功启用TLS
ldapwhoami -x -ZZ -H ldap://ldap.test.com
如输出如下,则表示正常:
anonymous


如何设置密码策略


ppolicy + pqchecker


ppolicy配置及使用


• 加载ppolicy模块
(1)生成配置文件(vim /etc/ldap/slapd.d/policy_module.ldif),并执行命令

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: ppolicy

ldapmodify -Y EXTERNAL -H ldapi:/// -f policy_module.ldif
(2)验证模块是否成功加载
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=module{0},cn=config

• 创建OpenLDAP密码策略覆盖(Password Policy Overlay)DN
在openLDAP配置中添加密码策略覆盖层,设置使用特定的DN作为默认密码策略,然后将密码策略覆
盖添加到LDAP数据库后端。
(3)查看数据库
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcDatabase | grep mdb
(4)将ppolicy覆盖DN以及配置选项添加到mdb数据库中,即在mdb数据库中启用密码策略覆盖层,并设置
默认的密码策略条目DN
vim /etc/ldap/slapd.d/pwpolicyoverlay.ldif

dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=default,ou=Policies,dc=ldap,dc=test,dc=com

• 创建OpenLDAP密码策略覆盖(Password Policy Overlay)DN
在openLDAP配置中添加密码策略覆盖层,设置使用特定的DN作为默认密码策略,然后将密码策略覆
盖添加到LDAP数据库后端。
(5)添加密码策略覆盖层
ldapadd -Y EXTERNAL -H ldapi:/// -f pwpolicyoverlay.ldif
(6)查看密码策略
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}mdb,cn=config

• 应用密码策略的方法
• 方法1:创建默认密码策略
• 方法2:对每个条目设置密码策略
• 方法3:设置多个密码策略,选择不同的策略应用于条目

• 方法1:创建默认密码策略


(1)创建用于存储默认密码策略的LDAP OU容器
vim /etc/ldap/slapd.d/PoliciesOU.ldif

dn: ou=Policies,dc=ldap,dc=test,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Policies

ldapadd -x -D cn=admin,dc=ldap,dc=test,dc=com -W -f PoliciesOU.ldif

(2)创建OpenLDAP默认密码策略(vim /etc/ldap/slapd.d/defaultPolicy.ldif)

dn: cn=default,ou=Policies,dc=ldap,dc=test,dc=com
objectClass: organizationalRole
objectClass: pwdPolicy
cn: default
pwdAttribute: userPassword
pwdInHistory: 5
pwdCheckQuality: 2
pwdMinLength: 10
pwdMaxFailure: 3
pwdLockout: TRUE
pwdLockoutDuration: 600
pwdReset: TRUE
pwdMustChange: TRUE
pwdAllowUserChange: TRUE
pwdSafeModify: FALSE

ldapadd -x -D cn=admin,dc=ldap,dc=test,dc=com -W -f /etc/ldap/slapd.d/defaultPolicy.ldif
(3)测试
注意:rootDN(通常是LDAP管理员)被授予对整个 LDAP 目录的完全访问权限,包括绕过密码策略的能力。
密码策略对该修改密码操作不生效:
ldappasswd -x -ZZ -D cn=admin,dc=ldap,dc=test,dc=com -w root@123 
uid=liming,ou=People,dc=ldap,dc=test,dc=com -s 012345
正确测试方法:
ssh liming@Ubuntu02
passwd
tyhdxk436(9位)
tyhdxk436j(10位,成功)


• 方法2:对每个条目设置密码策略


(1)设置策略( vim mod-liming.ldif)

dn: uid=liming,ou=People,dc=ldap,dc=test,dc=com
changetype: modify
add: objectClass
objectClass: pwdPolicy
-
add: pwdAttribute
pwdAttribute: userPassword
-
add: pwdMinLength
pwdMinLength: 13
-
add: pwdCheckQuality
pwdCheckQuality: 2
-
add: pwdPolicySubentry
pwdPolicySubentry: uid=liming,ou=People,dc=ldap,dc=test,dc=com

ldapmodify -x -D cn=admin,dc=ldap,dc=test,dc=com -W -f mod-liming.ldif

• 方法3:设置多个策略


(1)设置策略( vim pwexample.ldif)

dn: cn=example1,ou=Policies,dc=ldap,dc=test,dc=com
cn: example1
objectClass: organizationalRole
objectClass: pwdPolicy
pwdAttribute: userPassword
pwdMinLength: 9
pwdCheckQuality: 2
dn: cn=example2,ou=Policies,dc=ldap,dc=test,dc=com
cn: example2
objectClass: organizationalRole
objectClass: pwdPolicy
pwdAttribute: userPassword
pwdMinLength: 11
pwdCheckQuality: 2

ldapadd -x -D cn=admin,dc=ldap,dc=test,dc=com -W -f /etc/ldap/slapd.d/pwexample.ldif
(2)添加用户( vim zhangsan.ldif)

dn: uid=zhangsan,ou=People,dc=ldap,dc=test,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: zhangsan
sn: Zhang
givenName: San
cn: zhangsan
displayName: zhangsan
uidNumber: 1002
gidNumber: 500
userPassword: 123456
gecos: zhangsan
mail: [email protected]
loginShell: /bin/bash
homeDirectory: /home/zhangsan

ldapadd -x -D cn=admin,dc=ldap,dc=test,dc=com -W -f zhangsan.ldif
(3)应用策略( vim applypw.ldif)

dn: uid=liming,ou=People,dc=ldap,dc=test,dc=com
changetype: modify
replace: pwdPolicySubentry
pwdPolicySubentry: cn=example1,ou=Policies,dc=ldap,dc=test,dc=com
dn: uid=zhangsan,ou=People,dc=ldap,dc=test,dc=com
changetype: modify
add: pwdPolicySubentry
pwdPolicySubentry: cn=example2,ou=Policies,dc=ldap,dc=test,dc=com

ldapmodify -x -D cn=admin,dc=ldap,dc=test,dc=com -W -f applypw.ldif
(4)查看策略信息
ldapsearch -x -LLL -D cn=readonly,dc=ldap,dc=test,dc=com -w 123456 -b dc=ldap,dc=test,dc=com 
uid=* pwdPolicySubentry

(5)测试
ssh liming@Ubuntu02
passwd
67cguxt8(8位)
67cguxt8x(9位,成功)
注意:尽管uid=liming有自己的策略属性,但pwdPolicySubentry引用的条目是强制执行的。



pqchecker的安装及使用


• pqchecker的安装
(1)下载安装包
wget https://www.meddeb.net/pub/pqchecker/deb/8/pqchecker_2.0.0_amd64.deb
(2)安装pqchecker
dpkg -i pqchecker_2.0.0_amd64.deb
(3)配置文件
配置文件: /etc/ldap/pqchecker/pqparams.dat
作用:用于设置密码复杂度规则
数据格式: 0|UULLDDSS@)..
说明:
# 第1个字符:修改密码广播标志。1表示广播,0表示不广播
# 第2个字符:分隔符
#从第 3 个字符到第 10 个字符:U:大写,L:小写,D:数字,S:特殊字符。
# 从第 11 个字符开始:禁止字符列表
举例: 01010201(编辑配置文件: 1个大写字母,1个小写字母,2个数字,1个特殊字符)
(4)添加pwdcheckmodule属性pqchecker
vim addExample2.ldif

dn: cn=example2,ou=Policies,dc=ldap,dc=test,dc=com
changetype: modify
add: objectclass
objectclass: pwdPolicyChecker
-
add: pwdcheckmodule
pwdcheckmodule: pqchecker.so


ldapmodify -x -D cn=admin,dc=ldap,dc=test,dc=com -W -f addExample2.ldif
(5)测试(zhangsan)
ssh zhangsan@Ubuntu02
passwd
qwewe233wert
qwewe233wertA
qwewe233wertA@(成功)

(6)为了方便,可以给default设置密码复杂度检查插件
vim addDefaultpw.ldif

dn: cn=default,ou=Policies,dc=ldap,dc=test,dc=com
changetype: modify
add: objectclass
objectclass: pwdPolicyChecker
-
add: pwdcheckmodule
pwdcheckmodule: pqchecker.so


ldapmodify -x -D cn=admin,dc=ldap,dc=test,dc=com -W -f addDefaultpw.ldif
 

安装LAM管理工具

(1)安装apache2
• 安装包:apt install apache2 -y
• 设置开机自启动:systemctl enable apache2
• 启动apache2:systemctl restart apache2
(2)在主节点安装LAM
• 安装包:apt install ldap-account-manager
• 修改配置文件(/var/lib/ldap-account-manager/config/lam.conf ):

Admins: cn=admin,dc=ldap,dc=test,dc=com
tools: treeViewSuffix: dc=ldap,dc=test,dc=com
defaultLanguage: zh_CN.utf8
types: suffix_user: ou=People,dc=ldap,dc=test,dc=com
types: suffix_group: ou=Groups,dc=ldap,dc=test,dc=com


• 重启apache2:systemctl restart apache2
(3)Web访问地址
http://192.168.0.3/lam/
编辑通用设置:LDAP用户密码复杂度等,对应配置文件 /etc/ldap-account-manager/config.cfg等
编辑服务器设置:服务器本身设置,访问LDAP服务等设置,对应配置文件/var/lib/ldap-accountmanager/config/lam.conf 等
配置导入导出:导入导出配置文件


2.客户端节点配置

SSSD安装配置


(1)修改hosts文件(vim /etc/hosts)
192.168.0.3 ldap.test.com Ubuntu01
(2)安装所需要的包
apt install sssd libpam-sss libnss-sss sssd-tools
(3)设置SSSD的配置文件
(vim /etc/sssd/sssd.conf)
(4)复制服务端证书
scp 192.168.0.3:/usr/local/share/cacertificates/mycacert.crt /usr/local/share/cacertificates/mycacert.crt
(5)将新的CA认证加入可信任的CA列表中
 

update-ca-certificates
[sssd]
services = nss, pam, autofs
config_file_version = 2
domains = default
[nss]
[pam]
offline_credentials_expiration = 60
[domain/default]
ldap_id_use_start_tls = True
cache_credentials = True
ldap_search_base = dc=ldap,dc=test,dc=com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
#access_provider = ldap
ldap_uri = ldap://ldap.test.com
ldap_default_bind_dn = cn=readonly,dc=ldap,dc=test,dc=com
ldap_default_authtok_type = password
ldap_default_authtok = 123456
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/ssl/certs/mycacert.pem
ldap_tls_cacertdir = /etc/ssl/certs
ldap_search_timeout = 50
ldap_network_timeout = 60
ldap_access_order = filter

你可能感兴趣的:(服务器,运维)