一、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日志级别一览表:
Level | Keyword | Description |
---|---|---|
-1 | any | 启用所有调试 |
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
评论区