users

Пользователи

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

Он используется для развертывания одного или нескольких приложений на сервере. Поддерживает создание учетных записей для развертывания и запуска приложения, а также для системных администраторов и разработчиков.

По сути, это обертка вокруг модуля пользователя Ansible.

Типы пользователей

Роль поддерживает создание следующих типов учетных записей пользователей:

  • Глобальные системные администраторы / команда операций

Эти пользователи имеют собственные логины на сервере с правами sudo. Мы добавляем их в группу wheel или admin, а затем разрешаем выполнять sudo без пароля.

ПриProvisioning сервера автоматически создаются учетные записи для нашей команды системных администраторов, независимо от проекта.

  • Администраторы проектов / продвинутые пользователи

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

  • Учетная запись развертывания

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

Учетные записи приложения и развертывания не имеют прав sudo, хотя мы можем создать правило в /etc/sudoers.d/, чтобы разрешить им выполнять команды, например, перезапускать приложение с помощью systemctl. Это обрабатывается ролью, которая устанавливает и настраивает приложение, а не этой ролью.

Например, создайте файл, например, /etc/sudoers.d/deploy-foo:

deploy ALL=(ALL) NOPASSWD: /bin/systemctl start foo, /bin/systemctl stop foo, /bin/systemctl restart foo, /bin/systemctl status foo
  • Учетная запись приложения

Приложение работает под этой учетной записью пользователя.

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

  • Разработчики

Разработчики могут потребовать доступа к учетной записи развертывания или приложения, чтобы посмотреть журналы и отладить их. Мы добавляем ssh ключи для разработчиков к учетным записям, позволяя им входить через ssh.

  • Пользователи проектов

Эти пользователи похожи на администраторов, но не имеют прав sudo. Примером может служить учетная запись для клиента, чтобы он мог войти и выполнять запросы к базе данных, но им не нужны административные права. Вы можете предоставить им права, например, доступ к журналам приложения, добавив их в группу приложения и установив разрешения на файлы.

Конфигурация

По умолчанию эта роль ничего не делает. Вам нужно добавить переменные конфигурации, чтобы она что-то выполняла. Обычно это делается с помощью переменных группы, например, в inventory/group_vars/app_servers, секции vars в плейбуке или их комбинации.

Вы можете настроить разные параметры на уровне хоста или группы, чтобы, например, дать разработчикам доступ к входу в dev-среду, но не в prod.

Учетные записи приложения

Учетная запись, которая развертывает приложение. Необязательно, если не указана, учетная запись развертывания не будет создана.

users_deploy_user: deploy
users_deploy_group: deploy

Учетная запись, которая запускает приложение. Необязательно, если не указана, учетная запись приложения не будет создана.

users_app_user: foo
users_app_group: foo

Учетные записи пользователей

Переменная users_users определяет имена учетных записей Unix и ssh ключи для пользователей.

Это список словарей с четырьмя полями:

  • user: Имя учетной записи Unix
  • name: Имя пользователя. Необязательно, для документации.
  • key: файл ssh публичного ключа. Поместите их, например, в директорию files вашего плейбука.
  • github - это идентификатор пользователя на GitHub. Роль получает ключи пользователей с https://github.com/{{ github }}.keys

Пример:

users_users:
  - user: jake
    name: "Джейк Моррисон"
    github: reachfh
  - user: ci
    name: "CI сервер"
    key: ci.pub

Списки пользователей

После определения учетных записей пользователей в users_users необходимо настроить списки пользователей, указав идентификатор, используемый в ключе user. По умолчанию эти списки пустые, поэтому, если вы не укажете пользователей, они не будут созданы.

Глобальные пользователи-администраторы с отдельной учетной записью Unix и правами sudo.

users_global_admin_users:
 - jake

Администраторы на уровне проекта с отдельной учетной записью Unix и правами sudo.

users_admin_users:
 - fred

Пользователи проекта с отдельной учетной записью Unix, но без прав sudo.

users_regular_users:
 - bob

Пользователи (ssh ключи), которые могут получить доступ к учетной записи развертывания.

users_deploy_users:
 - ci

Пользователи (ssh ключи), которые могут получить доступ к учетной записи приложения.

users_app_users:
 - fred

Конфигурация группы

Вы можете указать дополнительные группы, которые будут иметь разные типы пользователей. По умолчанию эти списки пусты, но вы можете использовать их для тонкой настройки доступа к приложению.

Мы обычно настраиваем ssh так, чтобы учетная запись пользователя должна быть членом группы sshusers, иначе ssh не позволит никому войти.

Добавьте это в /etc/ssh/sshd_config

AllowGroups sshusers sftpusers

Затем добавьте sshusers в users_admin_groups, например,

users_admin_groups:
  - sshusers

Unix группы, к которым должны принадлежать администраторы.

Роль всегда добавляется в группу wheel или admin, в зависимости от платформы. Если определены администраторы, тогда эта роль настраивает sudo с файлом /etc/sudoers.d/00-admin, чтобы администраторы могли выполнять sudo без пароля.

users_admin_groups:
  - sshusers

Unix группы, к которым должны принадлежать обычные пользователи:

users_regular_groups:
  - sshusers

Unix группы, к которым должна принадлежать учетная запись развертывания:

users_deploy_groups:
  - sshusers

Unix группы, к которым должна принадлежать учетная запись приложения:

users_app_groups:
  - sshusers

Удаление пользователей

Эта роль определяет пользователей, которых она создает с "ansible-" в комментарии. Это позволяет отслеживать, когда пользователи добавляются или удаляются из списков, и удалять учетные записи.

Вы также можете указать учетные записи в списке users_delete_users, и они будут удалены. Это полезно для очистки устаревших учетных записей.

Вы можете контролировать, следует ли удалять домашний каталог пользователя при удалении учетной записи с помощью переменных users_delete_remove и users_delete_force. См. документацию Ansible для подробностей. Для безопасности эти переменные по умолчанию равны no, но если вы управляете системными пользователями с помощью этой роли, вам, вероятно, следует установить их на yes.

users_delete_remove: yes
users_delete_force: yes

Роль может дополнительно удалить авторизованные ключи от системных пользователей, таких как 'root' или 'ubuntu'. Это полезно для безопасности, чтобы избежать резервной копии корневых ключей, как только вы настроили именованных администраторов.

users_remove_system_authorized_keys: true

Настройка

Обычная последовательность - выполнить эту роль в первую очередь на новом экземпляре. Это создает учетные записи администраторов и настраивает их ключи, чтобы они могли запускать другие роли, которые настраивают сервер. Роль, специфичная для проекта, отвечает за подготовку сервера к приложению, например, создание каталогов и установку зависимостей. Обычно мы развертываем приложение с сервера сборки или CI, без sudo, используя учетную запись deploy.

Вот типичный плейбук:

- name: Управление пользователями
  hosts: '*'
  vars:
    users_app_user: foo
    users_app_group: foo
    users_deploy_user: deploy
    users_deploy_group: deploy
    users_users:
      - user: jake
        name: "Джейк Моррисон"
        github: reachfh
    users_app_users:
      - jake
    users_deploy_users:
      - jake
  roles:
    - { role: cogini.users, become: true }

Добавьте хост в файл inventory/hosts.

[web-servers]
web-server-01

Добавьте хост в .ssh/config или проектный файл ssh.config.

Host web-server-01
    HostName 123.45.67.89

На физическом сервере, где мы начинаем с учетной записи root и без ssh ключей, нам нужно настроить сервер в первый раз, указав пароль с помощью -k.

ansible-playbook -k -u root -v -l web-server-01 playbooks/manage-users.yml --extra-vars "ansible_host=123.45.67.89"

На macOS команда -k требует утилиты askpass, которая не установлена по умолчанию, поэтому она использует параметикo, который не понимает .ssh/config, поэтому мы указываем ansible_host вручную.

На последующих запусках, после создания учетных записей администраторов, используйте:

ansible-playbook -u $USER -v -l web-server-01 playbooks/manage-users.yml

Удаление устаревших пользователей

Определите устаревшие учетные записи пользователей для удаления в списке users_delete_users, например:

ansible-playbook -u $USER -v -l web-servers playbooks/manage-users.yml --extra-vars "users_delete_users=[fred] users_delete_remove=yes users_delete_force=yes"

Лицензия

MIT

Информация об авторе

Джейк Моррисон из Cogini

О проекте

Manage user accounts and control access to them with ssh keys

Установить
ansible-galaxy install cogini/ansible-role-users
Лицензия
mit
Загрузки
335
Владелец
Product development services for ambitious innovators