create_users
ansible-role-create-users
Роль для управления пользователями в Linux.
Управление пользователями осуществляется через конфигурационный файл списка пользователей (список находится в файле vars/secret).
Добавление пользователей (с определенным uid), изменение паролей, блокировка/разблокировка учетных записей пользователей, управление доступом через sudo (для каждого пользователя), добавление ssh ключей для аутентификации по ssh-ключу, установка основной группы и gid пользователя, добавление пользователя (дополнение) в группы (группа будет создана, если не существует).
Это выполняется на основе "группы" (переменные групп Ansible), как указано в конфигурационном файле. Группа берется из группы Ansible, установленной для сервера в инвентарном файле. Поддерживается также all
, чтобы применить ко всем хостам в инвентарном файле.
Более подробный пример можно найти в блоге: Управление пользователями с помощью Ansible
Примечание: Удаление пользователей не выполняется специально.
Протестированные дистрибутивы
- Ubuntu 22.04, 20.04, 18.04, 16.04
- CentOS / RHEL: 9.1, 8.x, 7.x, 6.5, 5.9
Зависимости
Требуется Ansible 2.6 (из-за предыдущей ошибки 20096 с неистекающими пользователями)
ansible-vault
Используйте ansible-vault для шифрования конфиденциальной информации от git.
cat vars/secret
#шифрование, если в открытом виде (до git commit/push)
ansible-vault encrypt vars/secret
#Редактировать зашифрованный файл:
ansible-vault edit vars/secret
vi .vaultpass
-Введите пароль для Ansible Vault из хранилища паролей
chmod 600 .vaultpass
vi ansible.cfg
#Вставьте следующие строки
[defaults]
vault_password_file = ./.vaultpass
.gitignore
vi .gitignore
#Вставьте следующие строки
.vaultpass
.retry
secret
*.secret
Как сгенерировать пароль
- на Ubuntu - Установите пакет "whois"
mkpasswd --method=SHA-512
- на RedHat - Используйте Python
python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'
Настройки по умолчанию
---
# Примечание: 'debug_enabled_default: true' выведет хэшированные пароли в вывод.
debug_enabled_default: false
default_update_password: on_create
default_shell: /bin/bash
default_generate_ssh_key_comment: "{{ item.username }}@{{ ansible_hostname }}"
Настройки пользователя
Расположение файла: vars/secret
- username: имя пользователя - без пробелов (обязательно)
- uid: Числовое значение ID пользователя (необязательно)
- user_state: present|lock (обязательно)
- password: зашифрованный пароль sha512 (необязательно). Если не установлен, пароль будет установлен на "!"
- update_password: always|on_create (необязательно, по умолчанию on_create для безопасности).
ПРЕДУПРЕЖДЕНИЕ: при 'always' пароль изменится на значение пароля.
Если вы используете 'always' для существующих пользователей, убедитесь, что установлен пароль. - comment: Полное имя и отдел или описание приложения (необязательно) (Но вы должны это установить!)
- primarygroup: Имя основной группы (необязательно).
- primarygid: ID основной группы (необязательно). Если тот же gid используется на сервере, плейбук завершит работу с ошибкой. Если указана такая же дублирующая группа с другим gid, будет использоваться последний настроенный. ПРЕДУПРЕЖДЕНИЕ: изменение primarygroup и/или primarygid для существующих пользователей не изменит права на существующие файлы, принадлежащие этому пользователю. Также старые записи будут оставаться в /etc/group. Использовать с осторожностью.
- groups: Список групп, в которые будет добавлен пользователь (дополнение). Если группа не существует, она будет создана на конкретном сервере. Это не основная группа (основная группа не изменяется)
- shell: путь к оболочке (необязательно, по умолчанию /bin/bash)
- ssh_key: Добавить разрешенный ssh-ключ для аутентификации по ssh-ключу (необязательно)
ПРИМЕЧАНИЕ: 1 ключ может находиться на одной строке, но если несколько ключей, используйте форматирование ниже из первого примера. - exclusive_ssh_key: yes|no (необязательно, по умолчанию: no)
ПРЕДУПРЕЖДЕНИЕ: exclusive_ssh_key: yes - удалит любые ssh-ключи, не указанные здесь! no - добавит любые ключи, указанные. - generate_ssh_key: Генерировать ли SSH-ключ для данного пользователя. (необязательно, по умолчанию 'no')
ПРИМЕЧАНИЕ: Это не перезапишет существующий SSH-ключ - ssh_key_bits: Опционально укажите количество бит в создаваемом SSH-ключе. (необязательно, по умолчанию задается ssh-keygen)
- ssh_key_passphrase: Установите парольную фразу для SSH-ключа. Если парольная фраза не указана, SSH-ключ будет по умолчанию без парольной фразы.
- generate_ssh_key_comment: Укажите комментарий для сгенерированного SSH-ключа (необязательно). Если не указано, будет использовано default_generate_ssh_key_comment из yaml по умолчанию.
- use_sudo: yes|no (необязательно, по умолчанию no)
- use_sudo_nopass: yes|no (необязательно, по умолчанию no). yes = sudo без пароля.
- system: yes|no (необязательно, по умолчанию no). yes = создать системную учетную запись (uid < 1000). Не работает для существующих пользователей.
- servers: подэлемент списка серверов, на которых вносятся изменения. (обязательно)
Это группы Ansible из вашего инвентарного файла Ansible. В приведенных ниже примерахwebserver
будет означать 3 сервера в группе Ansiblewebserver
webserver1
,webserver2
иwebserver3
.
Примечание:
У вас могут быть дублирующие имена пользователей на разных серверах, если вы хотите иметь различные настройки. См. ниже пример testuser102 имеет sudo на серверах, определенных как группа webserver
в инвентаре, но без sudo на группе database
.
Пример инвентарного файла Ansible
[webserver]
webserver1
webserver2
webserver3
[database]
db1
db2
db3
[monitoring]
monitor1
Пример конфигурационного файла (vars/secret)
---
users:
- username: testuser101
password: $6$/y5RGZnFaD3f$96xVdOAnldEtSxivDY02h.DwPTrJgGQl8/MTRRrFAwKTYbFymeKH/1Rxd3k.RQfpgebM6amLK3xAaycybdc.60
update_password: on_create
comment: Test User 100
shell: /bin/bash
ssh_key: |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8crAHG/a9QBD4zO0ZHIjdRXy+ySKviXVCMIJ3/NMIAAzDyIsPKToUJmIApHHHF1/hBllqzBSkPEMwgFbXjyqTeVPHF8V0iq41n0kgbulJG testuser101@server1
ssh-rsa AAAA.... testuser101@server2
exclusive_ssh_key: yes
use_sudo: no
use_sudo_nopass: no
user_state: present
servers:
- webserver
- database
- monitoring
- username: testuser102
password: $6$F/KXFzMa$ZIDqtYtM6sOC3UmRntVsTcy1rnsvw.6tBquOhX7Sb26jxskXpve8l6DYsQyI1FT8N5I5cL0YkzW7bLbSCMtUw1
update_password: always
comment: Test User 101
groups: testcommon, testgroup102web
shell: /bin/sh
use_sudo: yes
user_state: present
servers:
- webserver
- all
- username: testuser102
password: $6$F/KXFzMa$ZIDqtYtM6sOC3UmRntVsTcy1rnsvw.6tBquOhX7Sb26jxskXpve8l6DYsQyI1FT8N5I5cL0YkzW7bLbSCMtUw1
update_password: always
comment: Test User 101
groups: testcommon, testgroup102db
shell: /bin/sh
user_state: present
servers:
- database
- username: testuser103
password: $6$wBxBAqRmG6O$gPbg9hYShkuIe3YKMFujwiKsPKZHNFwoK4yCyTOlploljz53YSoPdCn9P5k8Qm0z062Q.8hvJ6DnnQQjwtrnS0
user_state: present
servers:
- webserver
- username: testuser104
primarygroup: testgroup104primary
ssh_key: ssh-rsa AAAB.... test103@server
exclusive_ssh_key: no
generate_ssh_key: yes
generate_ssh_key_comment: пользовательский комментарий для сгенерированного ssh-ключа
use_sudo: no
user_state: present
servers:
- webserver
- monitoring
- username: testuser105
uid: 1099
password: $6$XEnyI5UYSw$Rlc6tXtECtqdJ3uFitrbBlec1/8Fx2obfgFST419ntJqaX8sfPQ9xR7vj7dGhQsfX8zcSX3tumzR7/vwlIH6p/
primarygroup: testgroup105primary
primarygid: 2222
ssh_key: ssh-rsa AAAB.... test107@server
generate_ssh_key: yes
ssh_key_bits: 4096
use_sudo: no
user_state: lock
servers:
- webserver
- database
Пример плейбука create-users.yml
---
- hosts: '{{inventory}}'
vars_files:
- vars/secret
become: yes
roles:
- create-users
Подготовка
- установите ansible
- создайте ключи
- подключитесь по ssh к клиенту, чтобы добавить запись в файл known_hosts
- настройте authorized_keys на клиентском сервере
- выполните команды ansible
Использование
Создайте всех пользователей
ansible-playbook create-users.yml --ask-vault-pass --extra-vars "inventory=all-dev" -i hosts
ansible-galaxy install ryandaniels/ansible-role-create-users