rembik.users
Ansible 角色:用户
该角色用于管理系统上的用户及其组。
要求
- 访问包含包的仓库,通常在互联网上。
- 最新版本的 Ansible(已测试最后两个稳定版本)。
可以安装以下角色以确保满足所有要求,使用 ansible-galaxy install -r requirements.yml
:
---
- rembik.bootstrap
角色变量
这些默认值在 defaults/main.yml
中设置:
---
# 用户的默认设置
# 默认值,是否为每个用户创建一个组
# 并将其设为主要组
users_group_per_user: yes
# 如果没有为每个用户创建组,则这是所有用户所属的默认主要
# 组
users_group: users
# 默认值,是否在创建账户时为用户创建主目录
# 或在主目录不存在时
users_create_home: yes
# 当 sudo 设置为 yes 时,用户的默认 sudo 选项,
# 但未指定其它选项
users_sudo_options: "ALL=(ALL) NOPASSWD: ALL"
# 用户的默认 shell,当未指定时
users_shell: /bin/bash
# 查找/存储生成的 ssh 密钥的本地目录
users_ssh_key_dir: ssh_keys
# 要创建、删除或修改的用户列表
users: []
# 要创建或删除的用户组列表
users_groups: []
如果只希望在特定机器上定义用户和组,可以将这些变量的替换放在 group_vars/all
或 group_vars/group_name
中。
users
变量包含要创建、删除或修改的用户列表。
列表中的每个用户都定义为字典。
每个用户字典可用的参数如下:
用户参数 | 选项 / 默认值 | 备注 |
---|---|---|
name 必填 |
要创建、删除或修改的用户的名称。 | |
state |
选项:
|
账户是否应该存在,如果状态与声明的不一致则采取行动。 |
comment |
可选地设置用户账户的描述(即 GECOS)。 | |
uid |
可选地设置用户的 UID。 | |
group |
默认: user.name |
可选地覆盖从 users_group_per_user=yes 或 users_group 获取的用户主要组(接受组名)。 |
gid |
此设置仅影响 users_group_per_user=yes 。可选地设置用户主要组的不同 GID。否则将使用 UID。 |
|
groups |
用户将被添加到的组列表。当设置为空字符串时,用户从所有组中移除,除了主要组。 | |
append |
选项:
|
如果 yes,将用户添加到 groups 中指定的组。如果 no,则用户仅被添加到 groups 中指定的组,从所有其他组中移除。 |
password |
默认: ! | 可选地将用户的密码设置为此加密值。否则用户账户将被锁定。 |
update_password |
选项:
|
always 将更新不同的密码。on_create 仅为新创建的用户设置密码。 |
create_home |
选项:
|
可选地覆盖从 users_create_home 获取的值。除非设置为 no,否则在创建账户时或主目录不存在时,将为用户创建主目录。 |
home |
默认: /home/user.name |
可选地设置用户的主目录。 |
shell |
默认: /bin/bash | 可选地覆盖从 users_shell 获取的用户 shell。 |
profile |
可选地在用户的配置文件中设置自定义块。 需要 user.create_home=yes ! |
|
cron |
选项:
|
如果 yes,允许用户创建、编辑、显示或删除 crontab 文件。否则,不允许修改 crontab 文件。 |
sudo |
选项:
|
如果 yes,设置用户的 sudo 选项,取自 user.sudo_options 。否则,移除用户的 sudo 选项。 |
sudo_options |
默认: ALL=(ALL) NOPASSWD: ALL | 可选地覆盖从 users_sudo_options 获取的用户 sudo 选项。 |
ssh_key |
用户授权的 SSH 密钥列表(接受公钥;直接包含且不带换行符)。当设置为空列表或字符串时,移除所有用户授权的 SSH 密钥。 需要 user.create_home=yes ! |
|
generate_ssh_key |
选项:
|
除非设置为 no,如果本地目录 users_ssh_key_dir 中不存在 SSH 密钥,则生成用户的 SSH 密钥对。之后,将其添加到用户的授权 SSH 密钥并将密钥对部署到用户。 需要 user.create_home=yes ! |
remove |
选项:
|
仅影响 user.state=absent ,它尝试移除与用户关联的目录。行为与 userdel --remove 相同,检查手册页以获取详细信息和支持。 |
force |
选项:
|
仅影响 user.state=absent ,它在受支持的平台上强制移除用户和关联目录。行为与 userdel --force 相同,检查手册页以获取详细信息和支持。 |
users_groups
变量包含要创建或删除的用户组列表。列表中的每个组都定义为字典。
每个组字典可用的参数如下:
组参数 | 选项 / 默认值 | 备注 |
---|---|---|
name 必填 |
要管理的组的名称。 | |
state |
选项:
|
该组是否应该存在于远程主机上。 |
gid |
可选 GID 设置给组。 |
依赖关系
一般而言,该角色没有依赖关系。结合推荐的角色 rembik.bootstrap
,该角色在必要时使用定义的 bootstrap_user
连接到远程主机并执行角色任务。
示例剧本
此示例取自 molecule/playbook.yml
:
---
- name: Converge
hosts: all
gather_facts: no
become: yes
roles:
- role: rembik.bootstrap
- role: rembik.users
vars:
users_ssh_key_dir: "{{ lookup('env', 'MOLECULE_EPHEMERAL_DIRECTORY') }}/ssh_key"
users_groups:
- name: users
- name: bin
users:
- name: nouser
comment: 无用户
create_home: no
- name: molecule
comment: Ansible 测试用户
uid: 2001
home: /home/test
cron: yes
sudo: yes
generate_ssh_key: yes
- name: administrator
comment: 管理员
uid: 2002
groups: [users]
cron: yes
sudo: yes
profile: |
alias ll='ls -lah'
alias cp='cp -iv'
ssh_key:
- "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABWBILQeRSYYmGea/WIf6kd... [email protected]"
- name: user
comment: 用户
uid: 2003
groups: [users]
shell: /bin/sh
generate_ssh_key: yes
角色测试
该角色定期在以下 Linux 发行版上测试:
星号意味着构建允许失败,标记为实验构建。
贡献
如果您发现问题,请在此 GitHub 项目问题页面 注册,或者考虑按照此 指导 贡献代码。
许可证
Apache-2.0