create_users

ansible-role-create-users

CI

Роль для управления пользователями в 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 сервера в группе Ansible webserver 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
О проекте

Role to manage users on linux

Установить
ansible-galaxy install ryandaniels/ansible-role-create-users
Лицензия
mit
Загрузки
166500
Владелец
Ansible all the things