Ansible教程:Ad-hoc 命令用法-group模块详解 作者:马育民 • 2026-09-23 10:25 • 阅读:10001 # 介绍 `group`模块用于**远程主机管理系统用户组**(新增/修改/删除组) ### 作用 管理远程Linux系统`/etc/group`用户组,对应底层`groupadd/groupmod/groupdel`命令 **提示:**只操作**系统组** ### 常用参数 | 参数 | 说明 | |---|---| | **`name`** | 【必选】组名称 | | `state` | `present`(默认,创建/更新组);`absent`(删除组) | | `gid` | 指定组ID(gid),不填自动分配 | | `system` | `yes/no` 是否为系统组(系统组gid一般 `<1000`) | ### 幂等特性 Ad-hoc多次执行相同命令不会重复报错,状态不变时返回`changed: false` # 例子 ### 1. 创建普通用户组 ```bash ansible all -m group -a "name=appgroup state=present" -b -i ansible_client.ini ``` **解释:** - `-b`:提权,创建组需要root权限 - `state=present`:组不存在则创建;已存在则不改动,可不写 执行结果: [](https://www.malaoshi.top/upload/0/3/1GW46DvzkFAp.png) ### 2. 创建组,并指定GID=2001 ```bash ansible all -m group -a "name=appgroup gid=2001 state=present" -b -i ansible_client.ini ``` **提示:**`state=present` 可省略 **注意:**如果主机上已有其他组占用2001,会报错;组已存在但gid不一致,会修改原有组gid ### 3. 创建系统组 sysgroup ```bash ansible all -m group -a "name=sysgroup system=yes " -b -i ansible_client.ini ``` ### 4. 删除用户组 appgroup ```bash ansible all -m group -a "name=appgroup state=absent" -b -i ansible_client.ini ``` **注意:**如果组内还有用户,默认依然可以删除组(仅删 `/etc/group` 条目,用户保留) # 返回结果字段说明 ```json changed: true # true=发生变更;false=状态已经符合,无操作 gid: 2001 name: appgroup state: present system: false ``` # 常见坑 1. **忘记加 `-b` 提权**:创建/删除组必须root,否则权限拒绝报错 2. **区分 Ansible inventory 主机组 和 系统group** - inventory `[web]`:ansible管理的一批主机 - group模块操作的:远程服务器操作系统里的用户组 3. gid冲突:指定gid前最好先用Ad-hoc提前检查 ```bash # ad-hoc shell模块查看远程gid占用 ansible web -m shell -a "getent group | grep 2001" -b ``` 4. 不支持组内成员管理:**group模块不能添加用户到组**,添加用户进组要用`user`模块的`groups`参数 原文出处:/show_1GW46Dw602oq.html