📜 Управление пользователями и группами в Linux с помощью Ansible — Information Security Squad
📜  Управление пользователями и группами в Linux с помощью Ansible

В Linux каждый процесс выполняется от отдельного пользователя, а каждый файл и папка принадлежат определенному пользователю.

Кроме того, доступ к этим файлам и папкам ограничен пользователями.

Это показывает, насколько важно узнать, как осуществляется управление пользователями в Linux для обычного пользователя или администратора.

Информацию о локальных пользователях можно найти в etc/passwd:

 tail -9 /etc/passwd
colord:x:121:126:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
geoclue:x:122:127::/var/lib/geoclue:/usr/sbin/nologin
pulse:x:123:128:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin
gnome-initial-setup:x:124:65534::/run/gnome-initial-setup/:/bin/false
gdm:x:125:130:Gnome Display Manager:/var/lib/gdm3:/bin/false
eugene:x:1000:1000:Eugene,,,:/home/eugene:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
mysql:x:126:133:MySQL Server,,,:/nonexistent:/bin/false
redis:x:127:134::/var/lib/redis:/usr/sbin/nologin

Формат интерпретируется следующим образом:

username:password:uid:gid:gecos:home/dir:shell

У групп также есть ID, и каждый пользователь принадлежит к группе по умолчанию, User Private Group (UPG).

Пользователи могут иметь дополнительные группы.

Эти дополнительные группы помогают пользователям получить доступ к  другим файлам и процессам.

Информация о группах обычно находится в etc/group:

$ tail -9 /etc/group
gdm:x:130:
lxd:x:131:eugene
eugene:x:1000:
sambashare:x:132:eugene
systemd-coredump:x:999:
mysql:x:133:
redis:x:134:
vboxusers:x:135:

Формат интерпретируется следующим образом:

groupname:password:GID:<list of users>

Вы конечно слышали о пользователе root.

Пользователь root является суперпользователем, он обладает всеми полномочиями в системе.

Root может переопределить все полномочия файлов и используется для управления системой.

Как правило мы входим в систему как непривилегированный пользователь, а затем используем команду sudo для получения привилегий root.

Как администратор Linux, перед нами стоят различные задачи по управлению учетными записями пользователей, такие как добавление пользователей, их удаление и т. д.

Этими задачами легко управлять с помощью Ansible.

Мы пройдемся по ним, используя Ansible плейбук.

В Ansible модули user и group помогают нам выполнять задачи управления пользователями. 

Общие параметры модуля Ansible Group

  • name — название группы
  • state — (absent/present) гарантирует, что группа присутствует или отсутствует
  • gid — указать идентификатор группы
  • system (yes / no), является ли созданная группа системной группой или нет

Общие параметры модуля Ansible User

  • nameимя пользователя
  • passwordзашифрованный пароль пользователя. Обратите внимание, что пароль уже должен быть зашифрован или использовать шифрование в плейбуке Ansible, но скрывать пароль в  Ansible vault
  • update_password – (always/on_create) обновить ли пароль или просто добавить его один раз при создании пользователя
  • uid идентификатор пользователя
  • groupуказать основную группу пользователей
  • groupsдобавить пользователя в дополнительные группы
  • append – (no/yes) при добавлении пользователя в дополнительную группу не переопредея основную группу
  • comment – назначить GECOS
  • shell установить оболочку по умолчанию
  • removeудалить связанные с пользователем каталоги и файлы

Создать / Добавить пользователя и группу, используя Ansible

Плейбук, user.yml:

---
- hosts: localhost #change to your hosts
  become: yes

  vars:
    # NOTICE!!!:
    # DO NOT PUT PLAIN TEXT PASSWORDS HERE!
    # use encrypted passwords or put them in Ansible vault
    # but this is just a demo
    vaulted_password: mySecret.

  tasks:
    - name: Add a simple user called janedoe
      user:
        name: janedoe
        comment: Jane Doe

    - name: Add user anita with a password
      user:
        name: anita
        password: "{{ vaulted_password | password_hash('sha512') }}"
        update_password: on_create

    - name: Add a group called developer
      group:
        name: developer
        state: present

    - name: Add a user johndoe and add them to a group developer
      user:
        name: johndoe
        groups: developer
        append: yes

    - name: Add user jSmith and generate for them an SSH key
      user:
        name: jSmith
        generate_ssh_key: yes
        ssh_key_bits: 2048
        ssh_key_file: .ssh/id_rsa

    - name: Add user noHome with no home and set account to expire on certain date
      user:
        name: noHome
        create_home: no
        expires: 1590155615

Запуская плейбук, не беспокойтесь о предупреждении, поскольку я запускаю playbook для своей master ноды в качестве узла:

$ ansible-playbook user.yml -K
BECOME password: 
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [localhost] *************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************
ok: [localhost]

TASK [Add a simple user called janedoe] **************************************************************************************************************
changed: [localhost]

TASK [Add user anita with a password] ****************************************************************************************************************
changed: [localhost]

TASK [Add a group called developer] ******************************************************************************************************************
changed: [localhost]

TASK [Add a user johndoe and add them to a group developer] ******************************************************************************************
changed: [localhost]

TASK [Add user jSmith and generate for them an SSH key] **********************************************************************************************
changed: [localhost]

TASK [Add user noHome with no home and set account to expire on certain date] ************************************************************************
changed: [localhost]

PLAY RECAP *******************************************************************************************************************************************
localhost                  : ok=7    changed=6    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Проверьте пользователей и группы:

:~/Projects/Ansible/users$ tail -9 /etc/passwd
eugene:x:1000:1000:Eugene,,,:/home/eugene:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
mysql:x:126:133:MySQL Server,,,:/nonexistent:/bin/false
redis:x:127:134::/var/lib/redis:/usr/sbin/nologin
janedoe:x:1001:1001:Jane Doe:/home/janedoe:/bin/sh
anita:x:1002:1002::/home/anita:/bin/sh
johndoe:x:1003:1004::/home/johndoe:/bin/sh
jSmith:x:1004:1005::/home/jSmith:/bin/sh
noHome:x:1005:1006::/home/noHome:/bin/sh

eugene@jCheredi:~/Projects/Ansible/users$ tail -9 /etc/group
redis:x:134:
vboxusers:x:135:
docker:x:136:
janedoe:x:1001:
anita:x:1002:
developer:x:1003:johndoe
johndoe:x:1004:
jSmith:x:1005:
noHome:x:1006:

Удалить пользователей с помощью Ansible

Плейбук user_delete.yml:

---
- hosts: localhost
  become: yes
  tasks:
    - name: Remove janedoe
      user:
        name: janedoe
        state: absent
        remove: yes

    - name: Remove anita
      user:
        name: anita
        state: absent
        remove: yes

    - name: Remove developer group
      group:
        name: developer
        state: absent

    - name: Remove johndoe
      user:
        name: johndoe
        state: absent
        remove: yes

    - name: Remove jSmith
      user:
        name: jSmith
        state: absent
        remove: yes

    - name: Remove noHome
      user:
        name: noHome
        state: absent
        remove: yes

Запуск плейбука:

~/Projects/Ansible/users$ ansible-playbook user_delete.yml -K
BECOME password: 
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [localhost] *************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************
ok: [localhost]

TASK [Remove janedoe] **************************************************************************************************************
changed: [localhost]

TASK [Remove anita] ****************************************************************************************************************
changed: [localhost]

TASK [Remove developer group] ******************************************************************************************************************
changed: [localhost]

TASK [Remove johndoe] ******************************************************************************************
changed: [localhost]

TASK [Remove jSmith] **********************************************************************************************
changed: [localhost]

TASK [Remove noHome] ************************************************************************
changed: [localhost]

PLAY RECAP *******************************************************************************************************************************************
localhost                  : ok=7    changed=6    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
В Ansible есть гараздно больше возможностей для управления пользователями.
Вы можете ознакомиться с оффициальной документацией.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *