ad-user-creator/README.md

182 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`
运行后将先显示菜单供选择模式。