Skip to content

Commit 8e60ee7

Browse files
author
pptfz
committed
更新ldap笔记 gitea笔记
1 parent 9ef484e commit 8e60ee7

4 files changed

Lines changed: 541 additions & 75 deletions

File tree

docs/Linux/Linux服务/ldap/openldap/ldap批量操作.md

Lines changed: 165 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,176 @@ EOF
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
38193
LDAP_HOST="localhost"
39194
LDAP_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"
94249
AAA
95250
```
96251

252+
</TabItem>
253+
</Tabs>
254+
97255

98256

99257
#### 批量删除组

0 commit comments

Comments
 (0)