# 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,` - `部门 OU=RnD/tm_hardware` -> 用户 DN 路径包含 `OU=tm_hardware,OU=RnD,` - `项目组`、`资源组` 支持逗号分隔,可空 ## Linux 属性映射 创建用户时会写入: - `uid = sAMAccountName` - `uidNumber = state/uid_state.json` 自增分配(起始 2106) - `unixHomeDirectory = /home/` - `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` 运行后将先显示菜单供选择模式。