目 录CONTENT

文章目录

OpenLDAP配置

简中仙
2023-05-25 / 0 评论 / 0 点赞 / 151 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2024-02-01,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

一、openLDAP 初始化

1、设置openLDAP的管理密码

# slappasswd
New password:			# 密码为 123456
Re-enter new password:
{SSHA}3qqYRnslkZG0Da5ePYLqpxPDEfu9ucZk

2、初始化配置

# vim changepwd.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}3qqYRnslkZG0Da5ePYLqpxPDEfu9ucZk
# ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif

3、导入schema

其中core.ldif是默认已经加载了的,不用导入

# ls /etc/openldap/schema/*.ldif | while read f; do if [[ $f != */core.ldif ]]; then ldapadd -Y EXTERNAL -H ldapi:/// -f $f; fi; done
# ls /etc/openldap/schema/
collective.ldif    corba.ldif   cosine.ldif    duaconf.ldif    dyngroup.ldif    inetorgperson.ldif    java.ldif    misc.ldif    nis.ldif    openldap.ldif    pmi.ldif    ppolicy.ldif
schema作用
collective.ldif定义了集体属性的schema
corba.ldif定义了与CORBA相关的属性。
core.ldif这是OpenLDAP的核心schema,它定义了许多基本的属性,如cn, ou, uid
cosine.ldif定义了与Cosine协议相关的属性
duaconf.ldif定义了与Dua配置文件相关的属性
dyngroup.ldif定义了动态组的属性
inetorgperson.ldif这是一个非常流行的schema,用于表示Internet风格的用户。它通常包括sn, givenname, mail, ou, cn等属性
java.ldif定义了与Java相关的属性
misc.ldif包含一些杂项属性
nis.ldif定义了与NIS (Network Information Service) 相关的属性
openldap.ldif定义了一些OpenLDAP特有的属性
pmi.ldif定义了与PMI (Public Key Infrastructure) 相关的属性
ppolicy.ldif定义了密码策略相关的属性

4、设定默认域

1、编写RootDN的ldif文件

# vim changedomain.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=admin,dc=gaoyufu,dc=net" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=gaoyufu,dc=net

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=gaoyufu,dc=net

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}3qqYRnslkZG0Da5ePYLqpxPDEfu9ucZk

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=gaoyufu,dc=net" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=gaoyufu,dc=net" write by * read
# ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.ldif

2、启用memberof功能

开启memberof支持,新增用户支持memberof配置

# vim add-memberof.ldif
dn: cn=module{0},cn=config
cn: modulle{0}
objectClass: olcModuleList
objectclass: top
olcModuleload: memberof.la
olcModulePath: /usr/lib64/openldap

dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf

新增refint1.ldif文件

# vim refint1.ldif
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint

新增refint2.ldif文件

# vim refint2.ldif
dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof uniqueMember  manager owner

加载配置,顺序不能错

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add-memberof.ldif
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif

3、创建组

# vim base.ldif
dn: dc=gaoyufu,dc=net
objectClass: top
objectClass: dcObject
objectclass: organization
o: gaoyufu com
dc: gaoyufu

dn: cn=admin,dc=gaoyufu,dc=net
objectClass: organizationalRole
cn: admin
description: Directory admin

dn: ou=People,dc=gaoyufu,dc=net
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=gaoyufu,dc=net
objectClass: organizationalUnit
ou: Group
# ldapadd -x -D cn=admin,dc=gaoyufu,dc=net -W -f base.ldif

二、openldap 优化

1、开启日志

# vim log_config.ldif
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f log_config.ldif
# grep 'olcLogLevel' /etc/openldap/slapd.d/cn\=config.ldif
olcLogLevel: Stats

openldap日志级别一览表:

LevelKeywordDescription
-1any启用所有调试
0无调试
1(0x1 trace)跟踪函数调用
2(0x2 packets)调试数据包处理
4(0x4 args)重跟踪调试
8(0x8 conns)连接管理
16(0x10 BER)打印发送和接收的数据包
32(0x20 filter)搜索筛选器处理
64(0x40 config)配置处理
128(0x80 ACL)访问控制列表处理
256(0x100 stats)stats记录连接/操作/结果
512(0x200 stats2)已发送统计日志条目
1024(0x400 shell)使用shell后端打印通信
2048(0x800 parse)打印条目解析调试
16384(0x4000 sync)syncrepl消费者处理
32768(0x8000 none)仅记录任何日志级别的消息

2、配置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产生的日志了。

3、禁止匿名访问

# vim disable_anon.ldif
dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon

dn: cn=config
changetype: modify
add: olcRequires
olcRequires: authc

dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcRequires
olcRequires: authc
# ldapadd -Y EXTERNAL -H ldapi:/// -f disable_anon.ldif

三、备份的三种方法

1、slapcat备份

cat >/data/openldap/init/backup/backup.sh <<EOF
#!/bin/bash
echo '准备开始备份ldap'
DATEFORMATTYPE=\$(date +%Y-%m-%d)
echo \$DATEFORMATTYPE

LDAPSCAT=/usr/sbin/slapcat
#备份目录
BACKDIR=/init/backup

slapcat -v -l \${BACKDIR}/backup_\${DATEFORMATTYPE}.ldif

#删除10天前的备份
find ${BACKDIR} -mtime +10 -name "*.ldif" -exec rm -rf {} \; >& /dev/null
EOF
chmod +x /data/openldap/init/backup/backup.sh
sh /data/openldap/init/backup/backup.sh
参数说明
-v启用verbose模式,输出更详细的备份信息
-c启用continue模式,会忽略错误,继续执行备份
-g禁用subordinate gluing,不备份子数据库
-d level开启debug模式,输出debug信息
-b suffix使用指定的后缀来决定哪个数据库需要备份。这个参数不能与-n一起使用
-n dbnum为指定的第dbnum个数据库生成备份。这个参数不能与-b一起使用
-a filter过滤条件,比如 slapcat -a "(!(entryDN:dnSubtreeMatch:=ou=People,dc=example,dc=com))" 会备份所有dc=example,dc=com下的不包含ou=People,dc=example,dc=com子树的数据
-f slapd.conf指定slapd.conf配置文件
-F confdir指定slapd配置文件目录,比如CentOS下的/etc/openldap/slapd.d。如果-f和-F同时被指定,则使用-f的配置,如果两者都没有被指定,则使用默认配置
-l ldif-file需要生成的ldif文件名称

删除所有数据的操作

ldapdelete -x -D "cn=admin,dc=example,dc=com" -w 123456 -r "dc=example,dc=com"		# -r 递归删除指定条目的所有子条目

恢复数据

slapadd -l /root/openldap.ldif
ldapadd -x -D "cn=admin,dc=example,dc=com" -H ldap://192.168.1.10:389 -W -f slapdata.ldif

2、ldapsearch 备份

ldapsearch -x -b 'dc=example,dc=com' -H ldap://192.168.1.10:389 -D 'cn=admin,dc=example,dc=com' -W > backup.ldif

3、整目录备份

cd /data/openldap
tar zcvf backup.tar.gz  data config init certs

四、openldap 启用 lts

1、升级 openssl

CentOS 7默认安装的OpenSSL版本可能较旧,因此可能不包含最新的安全更新和漏洞修复。升级OpenSSL版本可以提供更好的安全性,因为新版本通常包含对最新安全漏洞的修复和改进的加密算法。

如果您对安全性有较高要求,或者您的应用程序或服务需要较新版本的OpenSSL提供的特定功能或加密算法,那么升级OpenSSL版本可能是必要的。升级过程通常包括下载和安装较新版本的OpenSSL软件包,并确保与您的系统和应用程序兼容。

另一方面,如果您对当前OpenSSL版本满意,并且您的应用程序或服务不需要新版本提供的特定功能或加密算法,那么您可以选择不升级。在任何情况下,保持系统和应用程序的更新和补丁是非常重要的,以确保安全性和稳定性。

1、检查当前版本

# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

2、安装依赖

# yum -y install zlib-devel zlib gcc gcc-c++ perl-CPAN perl-IPC-Cmd

3、下载并安装软件

# wget https://www.openssl.org/source/openssl-3.0.12.tar.gz
# tar -zxf openssl-3.0.12.tar.gz
# cd openssl-3.0.12
# ./config --prefix=/usr/local/openssl-3.0 --openssldir=/usr/local/openssl-3.0 --shared zlib
# make && make install
参数说明
--prefix用于设置lib、include、bin等目录的前缀
--openssldir用于指定OpenSSL的安装目录,默认是/usr/local/ssl,建议不用默认目录
--shared是否生成动态连接库
zlib使用静态的zlib压缩库

备份和配置软链接

mv /usr/bin/openssl /usr/bin/openssl.OFF
mv /usr/include/openssl /usr/include/openssl.OFF
mv /usr/local/bin/openssl /usr/local/bin/openssl.OFF
ln -s /usr/local/openssl-3.0/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl-3.0/include/openssl /usr/include/openssl
ln -s /usr/local/openssl-3.0/bin/openssl /usr/local/bin/openssl
ln -s /usr/openssl-3.0/lib/libcrypto.so.1.1.1 /lib/libcrypto.so.6
mv /usr/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1-bak
ln -s /usr/local/openssl-3.0/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
mv /usr/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1-bak
ln -s /usr/local/openssl-3.0/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
ln -s /usr/local/openssl-3.0/lib64/libssl.so.3  /usr/lib64/libssl.so.3
ln -s /usr/local/openssl-3.0/lib64/libcrypto.so.3  /usr/lib64/libcrypto.so.3
chmod -R 755 /usr/local/openssl-3.0/
echo "/usr/local/openssl-3.0/lib" >> /etc/ld.so.conf
ldconfig -v

4、查看升级后版本信息

# openssl version
OpenSSL 3.0.12 24 Oct 2023 (Library: OpenSSL 3.0.12 24 Oct 2023)

2、配置 lts 证书

1、编写根证书配置文件

# vim ca.conf
[ req ]
distinguished_name  = req_distinguished_name
string_mask         = utf8only
x509_extensions     = v3_ca
prompt              = no

[ req_distinguished_name ]
countryName                     = CN
stateOrProvinceName             = Shanxi
localityName                    = Shanxi
organizationName                = gaoyufu
organizationalUnitName          = gaoyufu
commonName                      = gaoyufu Certificate Authority
emailAddress                    = admin@gaoyufu.org

[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, keyCertSign

生成根证书的 4096 位 RSA 私钥,并签发 20 年的根证书

# openssl genrsa -out ca.key 4096
# openssl req -x509 -new -sha512 -nodes -key ca.key -days 7307 -out ca.crt -config ca.conf

2、编写服务器证书配置

注意:commonName 和 sans 部分应与服务器的主机名一致

# vim server.conf
[ req ]
prompt              = no
days                = 365
default_md          = sha256
distinguished_name  = req_distinguished_name
x509_extensions      = v3_server

[ req_distinguished_name ]
countryName                     = CN
stateOrProvinceName             = Shanxi
localityName                    = Shanxi
organizationName                = gaoyufu
organizationalUnitName          = gaoyufu
commonName                      = fabric01-test_aliyun
emailAddress                    = admin@gaoyufu.org

[ v3_server ]
basicConstraints = CA:false
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @sans

[ sans ]
DNS.0 = fabric01-test_aliyun

签发服务器证书请求,再用根证书签发服务器证书

# openssl genrsa -out server.key 2048
# openssl req -config server.conf -key server.key -new -out server.csr
# openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -out server.crt -extfile server.conf -extensions v3_server -CAcreateserial

验证服务器证书

# openssl verify -CAfile ca.crt server.crt
server.crt: OK

3、openldap 配置 lts

# 指定 DH 参数
# wget -O server.key https://ssl-config.mozilla.org/ffdhe2048.txt	
# vim tls.ldif
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /path/to/ca.crt
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /path/to/server.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /path/to/server.key
-
add: olcTLSCipherSuite
olcTLSCipherSuite: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
-
add: olcTLSDHParamFile
olcTLSDHParamFile: /path/to/server.key

更新配置

# slapmodify -n 0 -F /usr/local/etc/slapd.d -l certs.ldif

禁用明文操作

# vim ssf.ldif
dn: cn=config
changetype: modify
add: olcSecurity
olcSecurity: ssf=128
# slapmodify -n 0 -F /usr/local/etc/slapd.d -l ssf.ldif
0

评论区