本文目录导读:

是的,完全可以通过脚本自动配置LDAP服务(如OpenLDAP),以下是一个基于 Debian/Ubuntu 系统的实用Shell脚本示例,用于自动安装和配置OpenLDAP服务器,并创建基础目录结构。
脚本功能
- 安装
slapd和ldap-utils - 设置管理员密码
- 配置基础域名(DC)
- 添加组织单元(OU)和示例用户/组
自动配置OpenLDAP的Shell脚本
#!/bin/bash
# ========== 用户自定义变量 ==========
LDAP_DOMAIN="example.com"
LDAP_ADMIN_PASSWORD="admin123"
LDAP_ORG="Example Corp"
# ===================================
# 检查root权限
if [ "$(id -u)" != "0" ]; then
echo "此脚本需要root权限,请使用sudo执行"
exit 1
fi
echo "=== 开始自动配置LDAP服务 ==="
# 安装OpenLDAP服务
apt-get update -qq
apt-get install -y -qq slapd ldap-utils
# 生成管理员密码哈希(SSHA)
ADMIN_HASH=$(slappasswd -s "$LDAP_ADMIN_PASSWORD")
# 停止slapd服务进行配置
systemctl stop slapd
# 删除默认配置,重新初始化
rm -rf /etc/ldap/slapd.d/*
# 创建基础LDIF配置文件
cat > /etc/ldap/slapd.conf <<EOF
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
database mdb
suffix "dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}"
rootdn "cn=admin,dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}"
rootpw $ADMIN_HASH
directory /var/lib/ldap
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
access to attrs=userPassword
by dn="cn=admin,dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}" write
by anonymous auth
by self write
by * none
access to *
by dn="cn=admin,dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}" write
by * read
EOF
# 将配置转换为slapd.d格式
mkdir -p /etc/ldap/slapd.d
slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d
chown -R openldap:openldap /etc/ldap/slapd.d
chown -R openldap:openldap /var/lib/ldap
# 启动slapd
systemctl start slapd
systemctl enable slapd
echo "=== LDAP服务已启动 ==="
# 导入基础目录结构
cat > /tmp/base.ldif <<EOF
dn: dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}
dc: ${LDAP_DOMAIN%.*}
objectClass: top
objectClass: dcObject
objectClass: organization
o: $LDAP_ORG
dn: cn=admin,dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
dn: ou=People,dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Groups,dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}
ou: Groups
objectClass: top
objectClass: organizationalUnit
EOF
ldapadd -x -D "cn=admin,dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}" -w "$LDAP_ADMIN_PASSWORD" -f /tmp/base.ldif
if [ $? -eq 0 ]; then
echo "基础目录结构已创建成功!"
else
echo "基础目录结构创建失败,请检查配置"
exit 1
fi
# 可选:添加一个示例用户和组
cat > /tmp/testuser.ldif <<EOF
dn: uid=testuser,ou=People,dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}
uid: testuser
cn: Test User
sn: User
mail: testuser@${LDAP_DOMAIN}
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
userPassword: {SSHA}${ADMIN_HASH#*SSHA}
dn: cn=testgroup,ou=Groups,dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}
cn: testgroup
objectClass: top
objectClass: groupOfUniqueNames
uniqueMember: uid=testuser,ou=People,dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}
EOF
ldapadd -x -D "cn=admin,dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}" -w "$LDAP_ADMIN_PASSWORD" -f /tmp/testuser.ldif
echo "示例用户和组已添加"
echo "=== LDAP配置完成 ==="
echo "LDAP地址: ldap://127.0.0.1"
echo "管理DN: cn=admin,dc=${LDAP_DOMAIN%.*},dc=${LDAP_DOMAIN#*.}"
echo "管理员密码: $LDAP_ADMIN_PASSWORD"
使用方法
- 将脚本保存为
ldap-setup.sh - 修改变量(根据需要):
LDAP_DOMAIN:你的域名(如example.com)LDAP_ADMIN_PASSWORD:管理员密码(生产环境建议使用强密码)LDAP_ORG:组织名称
- 赋予执行权限并运行:
chmod +x ldap-setup.sh sudo ./ldap-setup.sh
验证LDAP服务是否正常
# 检查服务状态 systemctl status slapd # 查询基础目录 ldapsearch -x -D "cn=admin,dc=example,dc=com" -w "admin123" -b "dc=example,dc=com"
注意事项与扩展建议
| 注意点 | 说明 |
|---|---|
| 仅适用于初次安装 | 如果已存在LDAP配置,请先备份 /etc/ldap 和 /var/lib/ldap |
| 密码安全 | 实际生产环境应将密码存储在外部安全变量或Pass |
| 防火墙 | 确保开放端口389(LDAP)或636(LDAPS) |
| TLS/SSL | 如需加密传输,建议后续添加证书配置 |
如果需要支持 Red Hat/CentOS/Rocky Linux,只需将 apt-get 改为 yum 或 dnf,并调整路径(如 /etc/openldap/slapd.d),需要其他扩展(如ACL、复制、Schema定制)的版本,请随时告知!