182 lines
4.3 KiB
Markdown
182 lines
4.3 KiB
Markdown
# AD User Creator
|
||
|
||
用于 AD 用户自动化创建的 Python 脚本集,支持交互式与批量模式(CSV/XLSX),并提供菜单式单入口程序。
|
||
|
||
## Python 环境
|
||
|
||
- 解释器:`/opt/homebrew/Caskroom/miniconda/base/bin/python`
|
||
|
||
## 安装依赖
|
||
|
||
```bash
|
||
/opt/homebrew/Caskroom/miniconda/base/bin/python -m pip install -r requirements.txt
|
||
```
|
||
|
||
## 配置
|
||
|
||
1. 修改 `config/config.yaml`(所有配置均在此文件中维护)。
|
||
|
||
配置优先级:命令行参数(如 `--config`)> `config.yaml`。
|
||
|
||
关键字段:
|
||
|
||
- `ldap.people_base_dn`: 例如 `OU=People,DC=example,DC=com`
|
||
- `ldap.groups_base_dn`: 例如 `OU=linux,OU=Groups,DC=example,DC=com`
|
||
- `defaults.initial_uid_number`: 默认为 `2106`
|
||
- `defaults.initial_password`: 默认初始密码 `"1234.com"`
|
||
- `paths.uid_state_file`: uidNumber 持久化文件
|
||
- `paths.group_gid_map_file`: 组与 gidNumber 映射文件(默认 `staff: 3000`)
|
||
- `behavior.require_ldaps_for_password`: 密码设置要求 LDAPS(建议保持 `true`)
|
||
|
||
## 初始化状态文件
|
||
|
||
```bash
|
||
/opt/homebrew/Caskroom/miniconda/base/bin/python -m ad_user_creator.main init-state
|
||
```
|
||
|
||
## 菜单式入口(推荐)
|
||
|
||
新增菜单入口:
|
||
|
||
```bash
|
||
/opt/homebrew/Caskroom/miniconda/base/bin/python -m ad_user_creator.entry
|
||
```
|
||
|
||
启动后会先选择模式:
|
||
|
||
- `1` 交互式创建
|
||
- `2` 批量导入
|
||
- `3` 修改配置文件路径
|
||
- `q` 退出
|
||
|
||
## 交互式创建(命令行直达)
|
||
|
||
```bash
|
||
/opt/homebrew/Caskroom/miniconda/base/bin/python -m ad_user_creator.main interactive --config config/config.yaml
|
||
```
|
||
|
||
或直接运行根目录脚本(默认交互式):
|
||
|
||
```bash
|
||
./run.sh
|
||
```
|
||
|
||
dry-run:
|
||
|
||
```bash
|
||
/opt/homebrew/Caskroom/miniconda/base/bin/python -m ad_user_creator.main interactive --dry-run
|
||
```
|
||
|
||
## 批量创建(正式支持 CSV/XLSX)
|
||
|
||
CSV:
|
||
|
||
```bash
|
||
/opt/homebrew/Caskroom/miniconda/base/bin/python -m ad_user_creator.main batch --input users.csv --continue-on-error true
|
||
```
|
||
|
||
```bash
|
||
./run.sh -f users.csv
|
||
```
|
||
|
||
XLSX:
|
||
|
||
```bash
|
||
/opt/homebrew/Caskroom/miniconda/base/bin/python -m ad_user_creator.main batch --input users.xlsx --continue-on-error true
|
||
```
|
||
|
||
```bash
|
||
./run.sh -f users.xlsx
|
||
```
|
||
|
||
dry-run 示例:
|
||
|
||
```bash
|
||
./run.sh -f users.xlsx --dry-run
|
||
```
|
||
|
||
仅支持 `.csv` 与 `.xlsx`。
|
||
|
||
## 输入表头格式
|
||
|
||
必须包含以下列:
|
||
|
||
- `姓名`
|
||
- `用户名`
|
||
- `邮箱`
|
||
- `部门 OU`
|
||
- `基础组`
|
||
- `项目组`
|
||
- `资源组`
|
||
|
||
示例:
|
||
|
||
```csv
|
||
姓名,用户名,邮箱,部门 OU,基础组,项目组,资源组
|
||
杨滨,yangbin,tony.yang@aflowx.com,CEO,staff,,
|
||
孙彤,sunt,sun.tong@aflowx.com,CTO,staff,,
|
||
矫渊培,jiaoyp,jiao.yp@aflowx.com,RnD/tm_hardware,staff,"prj_r3xx_hw,prj_demo",
|
||
```
|
||
|
||
规则:
|
||
|
||
- `部门 OU=CEO` -> 用户 DN 路径包含 `OU=CEO,<people_base_dn>`
|
||
- `部门 OU=RnD/tm_hardware` -> 用户 DN 路径包含 `OU=tm_hardware,OU=RnD,<people_base_dn>`
|
||
- `项目组`、`资源组` 支持逗号分隔,可空
|
||
|
||
## Linux 属性映射
|
||
|
||
创建用户时会写入:
|
||
|
||
- `uid = sAMAccountName`
|
||
- `uidNumber = state/uid_state.json` 自增分配(起始 2106)
|
||
- `unixHomeDirectory = /home/<sAMAccountName>`
|
||
- `gidNumber = 基础组 gidNumber`(来自 `state/group_gid_map.yaml`)
|
||
- `mail = 邮箱`
|
||
|
||
## 账号启用与初始密码
|
||
|
||
用户创建流程为:
|
||
|
||
1. 先以禁用状态创建用户(`userAccountControl=514`)
|
||
2. 设置初始密码(默认 `"1234.com"`)
|
||
3. 启用用户(`userAccountControl=512`)
|
||
4. 添加基础组与可选组
|
||
|
||
## 输出与日志
|
||
|
||
- 批量结果:`state/last_batch_result.csv`
|
||
- 运行日志:`state/run.log`
|
||
- 批量状态:
|
||
- `CREATED`:新建用户成功
|
||
- `UPDATED`:已存在用户,属性或组关系发生更新
|
||
- `SKIPPED_NO_CHANGE`:已存在用户且无任何变化
|
||
- `FAILED`:处理失败
|
||
|
||
## 常见问题
|
||
|
||
- LDAP 连接失败:检查 host/port/use_ssl/bind_dn/bind_password
|
||
- 基础组缺失或未映射 gid:检查 AD 组是否存在,以及 `state/group_gid_map.yaml`
|
||
- 文件格式报错:确认输入文件后缀是 `.csv` 或 `.xlsx`
|
||
- `WILL_NOT_PERFORM`:通常是未使用 LDAPS、密码策略不满足、或权限不足
|
||
|
||
## 打包为单文件二进制
|
||
|
||
安装 PyInstaller:
|
||
|
||
```bash
|
||
/opt/homebrew/Caskroom/miniconda/base/bin/python -m pip install pyinstaller
|
||
```
|
||
|
||
使用 spec 构建:
|
||
|
||
```bash
|
||
pyinstaller build/ad_user_creator.spec
|
||
```
|
||
|
||
构建完成后,可执行文件位于:
|
||
|
||
- `dist/ad-user-creator`
|
||
|
||
运行后将先显示菜单供选择模式。
|