2424
2525#### 批量增加组
2626
27+ import Tabs from '@theme/Tabs ';
28+ import TabItem from '@theme/TabItem ';
29+
30+ <Tabs >
31+ <TabItem value =" ou " label =" ou " default >
32+
33+ :::tip 说明
34+
35+ - ** 全称** :` Organizational Unit `
36+
37+ - ** 用途** :表示一个组织单元(相当于文件夹 / 部门目录),主要用来分组
38+
39+ - ** 例子** :
40+
41+ ``` shell
42+ ou=People,dc=example,dc=com
43+ ou=Groups,dc=example,dc=com
44+ ```
45+
46+ - ` People ` 可以存放用户对象
47+ - ` Groups ` 可以存放组对象
48+
49+ - 基本配置文件
50+
51+ :::tip 说明
52+
53+ | 参数 | 说明 |
54+ | --------------------------------- | ----------------------------------------------- |
55+ | ` dn: ou=People,dc=example,dc=com ` | 完整路径(OU=People 在 dc=example,dc=com 下面) |
56+ | ` objectClass: top ` | 所有结构类(structural objectClass)的 ** 基类** |
57+ | ` objectClass: organizationalUnit ` | 表示这是一个 OU |
58+ | ` ou: People ` | OU 的名字 |
59+
60+ :::
61+
62+ ``` shell
63+ dn: ou=People,dc=example,dc=com
64+ objectClass: top
65+ objectClass: organizationalUnit
66+ ou: People
67+ ```
68+
69+ :::
70+
2771``` shell
28- cat > add-groups .sh << 'AAA '
72+ cat > add-ous .sh << 'AAA '
2973#!/bin/bash
3074
3175# ========================
3276# 配置部分
3377# ========================
34- BASE_DN="dc=ops,dc=com" # LDAP 根
35- BIND_DN="cn=admin,dc=ops,dc=com" # 管理员账号
36- BIND_PWD="admin" # 管理员密码
37- GID_START=1000 # 起始 GID
78+ BASE_DN="dc=ops,dc=com" # LDAP 根
79+ BIND_DN="cn=admin,dc=ops,dc=com" # 管理员账号
80+ BIND_PWD="admin" # 管理员密码
81+ LDAP_HOST="localhost"
82+ LDAP_HOST_PORT="389"
83+
84+ OU_FILE="ous.txt" # OU 文件,每行一个 OU 名
85+
86+ # ========================
87+ # DN 转义函数(RFC4514)
88+ # ========================
89+ escape_dn() {
90+ local dn="$1"
91+ dn="${dn//\\/\\\\}" # \ 转义
92+ dn="${dn//+/\\+}" # + 转义
93+ dn="${dn//#/\\#}" # # 转义
94+ dn="${dn//,/\\,}" # , 转义
95+ dn="${dn//=/\\=}" # = 转义
96+ dn="${dn//;/\\;}" # ; 转义
97+ dn="${dn//</\\<}" # < 转义
98+ dn="${dn//>/\\>}" # > 转义
99+ dn="${dn//\"/\\\"}" # " 转义
100+ echo "$dn"
101+ }
102+
103+ # ========================
104+ # 批量创建 OU
105+ # ========================
106+ while read -r OUNAME
107+ do
108+ # 跳过空行或注释
109+ [[ -z "$OUNAME" || "$OUNAME" =~ ^# ]] && continue
110+
111+ ESCAPED_OUNAME=$(escape_dn "$OUNAME")
112+ DN="ou=${ESCAPED_OUNAME},${BASE_DN}"
113+
114+ # 检查是否已存在
115+ if ldapsearch -x -H ldap://${LDAP_HOST}:${LDAP_HOST_PORT} -D "${BIND_DN}" -w "${BIND_PWD}" -b "${DN}" ou | grep -q "^ou:"; then
116+ echo "[$OUNAME] already exists, skip."
117+ else
118+ # 创建 OU
119+ ldapadd -x -H ldap://${LDAP_HOST}:${LDAP_HOST_PORT} -D "${BIND_DN}" -w "${BIND_PWD}" <<EOF
120+ dn: ${DN}
121+ objectClass: top
122+ objectClass: organizationalUnit
123+ ou: ${OUNAME}
124+ EOF
125+ if [ $? -eq 0 ]; then
126+ echo "[$OUNAME] created successfully."
127+ else
128+ echo "[$OUNAME] failed to create!"
129+ fi
130+ fi
131+
132+ done < "$OU_FILE"
133+ AAA
134+
135+ ```
136+
137+ </TabItem >
138+ <TabItem value =" cn " label =" cn " >
139+
140+ :::tip 说明
141+
142+ - ** 全称** :` Common Name `
143+
144+ - ** 用途** :表示某个具体条目的名字(相当于文件名 / 实体对象名)
145+
146+ - ** 例子** :
147+
148+ ``` shell
149+ cn=John Doe,ou=People,dc=example,dc=com
150+ cn=admins,ou=Groups,dc=example,dc=com
151+ ```
152+
153+ - ` cn=John Doe ` 就是某个用户对象
154+ - ` cn=admins ` 就是某个组对象
155+
156+ - 基本配置文件
157+
158+ :::tip 说明
159+
160+ | 参数 | 说明 |
161+ | ------------------------------------------- | ------------------------------------------------------ |
162+ | ` dn: cn=devops,ou=Groups,dc=example,dc=com ` | 这条记录在 LDAP 树中的绝对路径 |
163+ | ` objectClass: top ` | 所有结构类(structural objectClass)的 ** 基类** |
164+ | ` objectClass: posixGroup ` | 表明这是个 ** POSIX 组对象** |
165+ | ` cn: devops ` | ** POSIX 组对象** 的名字, ** POSIX 组** 必须有 ` cn ` 属性 |
166+ | ` gidNumber: 1001 ` | 组id号 |
167+
168+ :::
169+
170+ ``` shell
171+ dn: cn=devops,ou=Groups,dc=example,dc=com
172+ objectClass: top
173+ objectClass: posixGroup
174+ cn: devops
175+ gidNumber: 1001
176+ ```
177+
178+
179+
180+ :::
181+
182+ ``` shell
183+ cat > add-cns.sh << 'AAA '
184+ #!/bin/bash
185+
186+ # ========================
187+ # 配置部分
188+ # ========================
189+ BASE_DN="dc=ops,dc=com" # LDAP 根
190+ BIND_DN="cn=admin,dc=ops,dc=com" # 管理员账号
191+ BIND_PWD="admin" # 管理员密码
192+ GID_START=1000 # 起始 GID
38193LDAP_HOST="localhost"
39194LDAP_HOST_PORT="389"
40195
41- GROUP_FILE="groups.txt" # 组名文件,每行一个组
196+ GROUP_FILE="groups.txt" # 组名文件,每行一个组
42197
43198# ========================
44199# DN 转义函数(RFC4514)
@@ -53,7 +208,7 @@ escape_dn() {
53208 dn="${dn//;/\\;}" # ; 转义
54209 dn="${dn//</\\<}" # < 转义
55210 dn="${dn//>/\\>}" # > 转义
56- dn="${dn//\"/\\\"}" # " 转义
211+ dn="${dn//\"/\\\"}" # " 转义
57212 echo "$dn"
58213}
59214
@@ -94,6 +249,9 @@ done < "$GROUP_FILE"
94249AAA
95250```
96251
252+ </TabItem >
253+ </Tabs >
254+
97255
98256
99257#### 批量删除组
0 commit comments