updates
This commit is contained in:
parent
68e7a6596b
commit
2dbde310c7
8 changed files with 130 additions and 16 deletions
|
|
@ -9,23 +9,16 @@
|
||||||
|
|
||||||
users_admin_groups:
|
users_admin_groups:
|
||||||
super_admin:
|
super_admin:
|
||||||
- username: s.lebed
|
- username: mrwho
|
||||||
ssh_key: >-
|
ssh_key: >-
|
||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQChuu3tibT89C77sjX19kqqfr3qqM1eknqipnvZzd23cZTn8ULyWLLmOSYiEuOP5fcz55PVOpe8k8eBC+JvCu+/W1XdPH/q7GCL00b0ANcMKMZHvi/zjFSZj7NoFeypVF4/dutTWudpftFdmfJdHt5wyFs37cVNc4WWbNSASQBHhzR3GSdq7h5H5Ed0ua6AIFNR9Mt0rFI5JYbMaU/mO5WvvrlIq4T1X1zpHUDPloFXmnWd+WPuGPR7ecHP0mmXYSoWDCjEBexCUiAPb9BhR7dbe9lDjWwDB3J9daKXQ9rFpZ6f91DyD6sImarJSmTYXHnAn3u/Hj3IW5TYW4XMypob+NIRa3o7Zuu0rZ2uqwFdSxe9sOJHkgxTxwnJpBxRsQCpAl4uyGGOmTUiYDY7rK86zk1e4xetwt7DS16WOqdrBSNw6sKmvAtkcxacmbOO68+ixmWERpbFXuJtuCQodOtgf+vGUbXASJ1RQtmrBP0qKbV+MYqMOLP1RPA6UUeYssA/lG0uO4u7xxAW30MExZjeETgzGONbSBshqwFt09aXYs57Esp+kn4cFYcYkhvbPeicFiaCwQ4RWd+iAryd6KFNFrc0o0TuqbwE+3Dba2dU3P2KQ+nVIYGeDs62OyYV0yCN0ZEHDzkJAsbqNMDVpwCv4YdZdg0iB40aednRzNYv3Q== s.lebed@gigacoms.ru
|
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAlQz8IhTEQ0utmWmwOC7FijieQULbeyXLDkjmYwSyptqj+7u0qyPPStQzN9leIISSKJ1/eJ5UbETTvc1R1Jg1tdTg5xZTMoz0jwruDP73vYIxLdeO4cZvjJIGyzS2PemUM+016uf4DLZ3jmK4hwEi2mF6UX+NYRPNIuPpr96gP1kYb1vrlG7P0cEk7EbGO6Deda3S64L0lDherSqc/Z7cn8nr6iemTdsBfl303vqFgXf/aWijuvVPUSpSiI3fR0NwvX/RW7oDIFls1dVU5CPkcwaX25Fu3voJ6e3lmduW+1s/vL1nMd5ourET+1Std3S75jqzkVsV3R74Xkgq5avn7w==
|
||||||
|
|
||||||
- username: a.kazantsev
|
middle_admin: []
|
||||||
# Note: key comment says a.kazantsev — verify the key owner if needed
|
|
||||||
ssh_key: >-
|
|
||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClB+roxcr/POfhJVq3jFIzZD36nRVhfYq9WaQBr6o2RvMHM+B/2yRM8OeN6jhhYYFB8z7X5o8j1/ZC2u/80LLJtEQ0s8DCb4l4Ie7IY3POBYlmwtvlnhNFsGlKoAoQr0jpPUwMiV7wdBtHYCqHJM69+VpWCnqOkI+hrdj5oxSm26g6AKL0lm9AJO8KnbIpUCHgnQ3EcPcfQE7OpspVP6nbp4SwipJbnG4yYeKB6l77ESUdCkgwwLCv4DCpxJ846J9aN39Bu273hmEoO6+Bw0wAPRruLp5/AzPni7frcncdGuPfOmi+RAoOsRqoO/c122soAbQn3074QtEKwuC+zFKH a.kazantsev@gigacoms.ru
|
|
||||||
|
|
||||||
middle_admin:
|
|
||||||
[]
|
|
||||||
# Example:
|
# Example:
|
||||||
# - username: m.ivanov
|
# - username: m.ivanov
|
||||||
# ssh_key: "ssh-rsa AAAA..."
|
# ssh_key: "ssh-rsa AAAA..."
|
||||||
|
|
||||||
junior_admin:
|
junior_admin: []
|
||||||
[]
|
|
||||||
# Example:
|
# Example:
|
||||||
# - username: j.petrov
|
# - username: j.petrov
|
||||||
# ssh_key: "ssh-rsa AAAA..."
|
# ssh_key: "ssh-rsa AAAA..."
|
||||||
|
|
|
||||||
|
|
@ -12,5 +12,6 @@
|
||||||
reboot_system: false
|
reboot_system: false
|
||||||
#hostname: rocky9-template.local.mrwho.ru
|
#hostname: rocky9-template.local.mrwho.ru
|
||||||
roles:
|
roles:
|
||||||
|
- users
|
||||||
- rocky9
|
- rocky9
|
||||||
- root-cert
|
- root-cert
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,18 @@
|
||||||
value: 0
|
value: 0
|
||||||
state: present
|
state: present
|
||||||
sysctl_file: /etc/sysctl.d/ip_bridge.conf
|
sysctl_file: /etc/sysctl.d/ip_bridge.conf
|
||||||
|
ignore_errors: true
|
||||||
- name: net.bridge.bridge-nf-call-iptables
|
- name: net.bridge.bridge-nf-call-iptables
|
||||||
ansible.posix.sysctl:
|
ansible.posix.sysctl:
|
||||||
name: net.bridge.bridge-nf-call-iptables
|
name: net.bridge.bridge-nf-call-iptables
|
||||||
value: 0
|
value: 0
|
||||||
state: present
|
state: present
|
||||||
sysctl_file: /etc/sysctl.d/ip_bridge.conf
|
sysctl_file: /etc/sysctl.d/ip_bridge.conf
|
||||||
|
ignore_errors: true
|
||||||
- name: net.bridge.bridge-nf-call-arptables
|
- name: net.bridge.bridge-nf-call-arptables
|
||||||
ansible.posix.sysctl:
|
ansible.posix.sysctl:
|
||||||
name: net.bridge.bridge-nf-call-arptables
|
name: net.bridge.bridge-nf-call-arptables
|
||||||
value: 0
|
value: 0
|
||||||
state: present
|
state: present
|
||||||
sysctl_file: /etc/sysctl.d/ip_bridge.conf
|
sysctl_file: /etc/sysctl.d/ip_bridge.conf
|
||||||
|
ignore_errors: true
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,11 @@
|
||||||
group: root
|
group: root
|
||||||
mode: "0644"
|
mode: "0644"
|
||||||
|
|
||||||
- name: Create users
|
#- name: Create users
|
||||||
ansible.builtin.include_tasks:
|
# ansible.builtin.include_tasks: create_users.yml
|
||||||
file: create_users.yml
|
|
||||||
|
|
||||||
- name: Syctl tuning
|
- name: Syctl tuning
|
||||||
ansible.builtin.include_tasks:
|
ansible.builtin.include_tasks: sysctl_tuning.yml
|
||||||
file: sysctl_tuning.yml
|
|
||||||
|
|
||||||
# - name: Setup NIC to eth0
|
# - name: Setup NIC to eth0
|
||||||
# ansible.builtin.include_tasks:
|
# ansible.builtin.include_tasks:
|
||||||
|
|
|
||||||
2
roles/root-cert/defaults/main.yml
Normal file
2
roles/root-cert/defaults/main.yml
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
---
|
||||||
|
install_root_cert_pem: root_ca.crt
|
||||||
15
roles/users/defaults/main.yml
Normal file
15
roles/users/defaults/main.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
# Группа sudo по умолчанию — переопределяется в group_vars для конкретной ОС
|
||||||
|
users_sudo_group: sudo
|
||||||
|
|
||||||
|
# По умолчанию разрешены все группы администраторов (переопределяется для конкретного хоста/группы)
|
||||||
|
users_allowed_admin_groups:
|
||||||
|
- super_admin
|
||||||
|
- middle_admin
|
||||||
|
- junior_admin
|
||||||
|
|
||||||
|
# Все группы администраторов — заполняются из inventory/group_vars
|
||||||
|
users_admin_groups:
|
||||||
|
super_admin: []
|
||||||
|
middle_admin: []
|
||||||
|
junior_admin: []
|
||||||
15
roles/users/meta/main.yml
Normal file
15
roles/users/meta/main.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
galaxy_info:
|
||||||
|
role_name: users
|
||||||
|
author: ops
|
||||||
|
description: Provision admin user accounts with SSH keys and passwordless sudo
|
||||||
|
license: MIT
|
||||||
|
min_ansible_version: "2.14"
|
||||||
|
platforms:
|
||||||
|
- name: Debian
|
||||||
|
versions:
|
||||||
|
- bookworm
|
||||||
|
- name: EL
|
||||||
|
versions:
|
||||||
|
- "7"
|
||||||
|
dependencies: []
|
||||||
87
roles/users/tasks/main.yml
Normal file
87
roles/users/tasks/main.yml
Normal file
|
|
@ -0,0 +1,87 @@
|
||||||
|
---
|
||||||
|
# Формирование плоского списка пользователей, которые должны существовать на ЭТОМ хосте,
|
||||||
|
# путём выборки только тех групп администраторов, что указаны в `users_allowed_admin_groups`.
|
||||||
|
- name: Build list of users to manage on this host
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
users_managed_users: >-
|
||||||
|
{{
|
||||||
|
users_allowed_admin_groups
|
||||||
|
| map('extract', users_admin_groups)
|
||||||
|
| flatten
|
||||||
|
| unique
|
||||||
|
}}
|
||||||
|
|
||||||
|
- name: Show managed users for this host
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "Managing users: {{ users_managed_users | map(attribute='username') | list }}"
|
||||||
|
|
||||||
|
# ── Необходимые пакеты ────────────────────────────────────────────────────────
|
||||||
|
- name: Update apt cache (Debian/Ubuntu)
|
||||||
|
ansible.builtin.apt:
|
||||||
|
update_cache: true
|
||||||
|
cache_valid_time: 3600
|
||||||
|
when: ansible_os_family == "Debian"
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Ensure sudo package is present (Debian/Ubuntu)
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name: sudo
|
||||||
|
state: present
|
||||||
|
when: ansible_os_family == "Debian"
|
||||||
|
|
||||||
|
# ── Учётные записи пользователей ──────────────────────────────────────────────
|
||||||
|
- name: Ensure user accounts exist
|
||||||
|
ansible.builtin.user:
|
||||||
|
name: "{{ item.username }}"
|
||||||
|
state: present
|
||||||
|
shell: /bin/bash
|
||||||
|
create_home: true
|
||||||
|
loop: "{{ users_managed_users }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.username }}"
|
||||||
|
|
||||||
|
# ── Членство в группах ────────────────────────────────────────────────────────
|
||||||
|
- name: Add users to privileged group ({{ users_sudo_group }})
|
||||||
|
ansible.builtin.user:
|
||||||
|
name: "{{ item.username }}"
|
||||||
|
groups: "{{ users_sudo_group }}"
|
||||||
|
append: true
|
||||||
|
loop: "{{ users_managed_users }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.username }}"
|
||||||
|
|
||||||
|
# ── Sudo без пароля ───────────────────────────────────────────────────────────
|
||||||
|
- name: Remove legacy sudoers files with dots in name
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /etc/sudoers.d/{{ item.username }}
|
||||||
|
state: absent
|
||||||
|
loop: "{{ users_managed_users }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.username }}"
|
||||||
|
when: "'.' in item.username"
|
||||||
|
|
||||||
|
- name: Configure passwordless sudo via sudoers.d
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: "{{ item.username }} ALL=(ALL) NOPASSWD:ALL\n"
|
||||||
|
dest: /etc/sudoers.d/{{ item.username | replace('.', '_') }}
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0440"
|
||||||
|
validate: visudo -cf %s
|
||||||
|
loop: "{{ users_managed_users }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.username }}"
|
||||||
|
|
||||||
|
# ── SSH-ключи ─────────────────────────────────────────────────────────────────
|
||||||
|
- name: Deploy SSH authorized keys
|
||||||
|
ansible.posix.authorized_key:
|
||||||
|
user: "{{ item.username }}"
|
||||||
|
key: "{{ item.ssh_key }}"
|
||||||
|
state: present
|
||||||
|
exclusive: false
|
||||||
|
loop: "{{ users_managed_users }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.username }}"
|
||||||
|
when:
|
||||||
|
- item.ssh_key is defined
|
||||||
|
- item.ssh_key | length > 0
|
||||||
Loading…
Reference in a new issue