Skip to content

Commit 9ba7b5b

Browse files
committed
feat: add users role
1 parent 0106191 commit 9ba7b5b

File tree

6 files changed

+144
-5
lines changed

6 files changed

+144
-5
lines changed

README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ This Ansible collection provides a set of roles designed for configuring Kubuntu
66

77
### Roles
88

9-
| Role | Description | Dependencies |
10-
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------- |
11-
| [xebis.ansible.apt](roles/apt/README.md) | Deb package updates and upgrades using the apt package manager. Can optionally clean up unused packages and reboot the system if required. | `xebis.ansible.system` |
12-
| `xebis.ansible.openssh_server` | Installs OpenSSH server installation and provides `Restart ssh` handler. | `xebis.ansible.apt` |
13-
| [xebis.ansible.system](roles/system/README.md) | System-related tasks such as reboot handler or reboot when required handler. | |
9+
| Role | Description | Dependencies |
10+
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------ |
11+
| [xebis.ansible.apt](roles/apt/README.md) | Deb package updates and upgrades using the apt package manager. Can optionally clean up unused packages and reboot the system if required. | `xebis.ansible.system` |
12+
| `xebis.ansible.openssh_server` | Installs OpenSSH server installation and provides `Restart ssh` handler. | `xebis.ansible.apt` |
13+
| [xebis.ansible.system](roles/system/README.md) | System-related tasks such as reboot handler or reboot when required handler. | |
14+
| [`xebis.ansible.users`](roles/users/README.md) | Ansible role for managing system users. | `xebis.ansible.openssh_server` |
1415

1516
## Contributing
1617

roles/users/README.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Xebis.Ansible.Users
2+
3+
Ansible role for managing system users.
4+
5+
## Tasks
6+
7+
- Create users and user groups
8+
- Grant admin (sudo) access
9+
- Manage SSH keys
10+
- Fine tune SSH authentication settings
11+
12+
```yaml
13+
---
14+
- hosts: all
15+
roles:
16+
- role: xebis.ansible.users
17+
vars:
18+
passwordless_sudo: true
19+
ssh_password_login: false
20+
users:
21+
- user: example
22+
admin: true
23+
ssh_keys_urls:
24+
- https://github.com/example.keys
25+
```
26+
27+
## Variables
28+
29+
- `ssh_password_login` [boolean]
30+
- Enables or disables password-based SSH authentication.
31+
- Default `true`
32+
- `passwordless_sudo` [boolean]
33+
- Grants sudo privileges without a password when set to true.
34+
- Default `false`
35+
- `users` [list]
36+
- List of users to be created. See structure below.
37+
- Default `[]`.
38+
- The structure:
39+
- `user` [string]
40+
- Username.
41+
- Required parameter.
42+
- `admin` [boolean]
43+
- Adds user to the `sudo` group.
44+
- Default `false`
45+
- `ssh_keys` [list]
46+
- List of SSH public keys for the user.
47+
- Default `[]`
48+
- `ssh_keys_urls` [list]
49+
- URLs pointing to SSH public keys (e.g., GitHub keys).
50+
- Default `[]`
51+
52+
## Handlers
53+
54+
- `Disable password SSH login`
55+
- When `ssh_password_login` is set to `false` disables password SSH login, only SSH keys are allowed.

roles/users/handlers/main.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
- name: Disable password SSH login
3+
become: true
4+
ansible.builtin.lineinfile:
5+
dest: /etc/ssh/sshd_config
6+
regexp: ^(#\s*)?PasswordAuthentication
7+
line: PasswordAuthentication no
8+
when: ssh_password_login | default(true)
9+
listen: Disable password SSH login
10+
notify: Restart ssh

roles/users/meta/main.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
---
2+
dependencies:
3+
- role: xebis.ansible.openssh_server # Uses "Restart ssh" handler

roles/users/tasks/main.yaml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
---
2+
- name: Add user groups
3+
become: true
4+
ansible.builtin.group:
5+
name: "{{ item.user }}"
6+
state: present
7+
loop: "{{ users }}"
8+
9+
- name: Add sudo group as passwordless sudoer
10+
become: true
11+
ansible.builtin.lineinfile:
12+
dest: /etc/sudoers.d/xebis-ansible-users
13+
create: true
14+
regexp: ^%sudo
15+
line: "%sudo ALL=(ALL) NOPASSWD: ALL"
16+
state: present
17+
validate: visudo -cf %s
18+
when: passwordless_sudo | default(false)
19+
20+
- name: Add admins
21+
become: true
22+
ansible.builtin.user:
23+
name: "{{ item.user }}"
24+
group: "{{ item.user }}"
25+
groups:
26+
- sudo
27+
- users
28+
shell: /bin/bash
29+
state: present
30+
loop: "{{ users }}"
31+
when: item.admin
32+
33+
- name: Add users
34+
become: true
35+
ansible.builtin.user:
36+
name: "{{ item.user }}"
37+
group: "{{ item.user }}"
38+
groups:
39+
- users
40+
shell: /bin/bash
41+
state: present
42+
loop: "{{ users }}"
43+
when: not item.admin
44+
45+
- name: Add SSH authorized key lists
46+
become: true
47+
ansible.posix.authorized_key:
48+
user: "{{ item.0.user }}"
49+
key: "{{ lookup('url', item.1, split_lines=False) }}"
50+
state: present
51+
loop: "{{ users | subelements('ssh_keys_urls', skip_missing=true) }}"
52+
notify: Disable password SSH login
53+
54+
- name: Add SSH authorized keys
55+
become: true
56+
ansible.posix.authorized_key:
57+
user: "{{ item.0.user }}"
58+
key: "{{ item.1 }}"
59+
state: present
60+
loop: "{{ users | subelements('ssh_keys', skip_missing=true) }}"
61+
notify: Disable password SSH login

test.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,12 @@
99
purge: true
1010
upgrade: "full"
1111
- role: xebis.ansible.openssh_server
12+
- role: xebis.ansible.users
13+
vars:
14+
passwordless_sudo: true
15+
ssh_password_login: false
16+
users:
17+
- user: mb
18+
admin: true
19+
ssh_keys_urls:
20+
- https://github.com/bruzina.keys

0 commit comments

Comments
 (0)