user-func
user-func
Роль user-func предназначена для настройки пользователей функциональным образом: конфигурация пользователя будет точно такой же, как описано в конфигурации, и гарантированно не будет иметь побочных эффектов.
Описание
Роль написана с предположением, что основная точка входа в конфигурацию — это не машина, а пользователь. То есть мы не хотим создавать пользователя на машине, а хотим предоставить пользователю доступ к определенным машинам.
Вы можете:
- управлять своей базой данных публичных ключей пользователей
- установить несколько ключей для одного пользователя
- удалять пользователей (домашние директории не удаляются)
- блокировать/разблокировать аутентификацию по паролю
- устанавливать локальную конфигурацию для каждого хоста или группы хостов Ansible
Переменные роли
Параметры делятся на глобальные и локальные. Если параметр описан локально для хоста (в словаре хостов), то используется глобальный параметр. Если глобальный параметр не описан, то берется значение по умолчанию.
username: Обязательный параметр, указывает имя пользователя на машине.
hosts: Обязательный параметр, определяет список хостов, к которым пользователь будет иметь доступ, и их локальную конфигурацию.
give_sudo: группа sudo/wheel вынесена в отдельный параметр из-за исключительной важности. Этот параметр определяет, имеет ли пользователь право начинать sudo или нет. Может использоваться в локальной конфигурации хоста. По умолчанию - нет.
password: устанавливает пароль для пользователя. Может использоваться в локальной конфигурации.
lock_password: устанавливает блокировку пароля. Если установлено в "да", то для пользователя не разрешается вводить пароль (в shadow устанавливается '*'). Может использоваться локально. По умолчанию - нет.
disable_user: блокирует вход для пользователя. Если установлено в "да", то вход под данным пользователем невозможен, включая ssh (в качестве оболочки устанавливается nologin). Может использоваться локально. По умолчанию - нет.
delete_user: удаляет пользователя (но не его домашнюю директорию). Может использоваться локально. По умолчанию - нет. Используйте с осторожностью, и лучше вообще не использовать - disable_user является более предпочтительным вариантом.
shell: Указывает оболочку для пользователя. Может использоваться локально. По умолчанию - /bin/bash.
ssh_public_keys: список объектов с полями name и fullname (по желанию) и key. Это база данных всех известных ключей, чтобы можно было использовать их по имени.
authorized_keys: список имен из базы данных ssh_public_keys. С этим именем в поле name объекта в базе данных его ключ добавляется в .ssh/authorized_keys. Может использоваться локально. По умолчанию - [].
common_groups: исключительно глобальный параметр. Указывает группы, которые общие для всех хостов, на которых будет создан пользователь. Рекомендуется устанавливать ["users"], по умолчанию - []. Не добавляйте sudo в него. Для этого есть give_sudo.
groups: исключительно локальный параметр. Указывает группы, которые будут добавлены к common_groups на этом конкретном хосте. Не добавляйте сюда sudo. Для этого есть give_sudo.
Пример 1 (короткий)
manage-users.yml
- hosts:
- all
become: yes
become_user: root
vars_files:
- vars/ssh_public_keys.yml
vars:
common_groups: [ users ]
roles:
- tags: [ admins, freehck ]
role: user-func
username: freehck
give_sudo: yes
authorized_keys: [ freehck ]
hosts:
- host: all
- tags: [ special, jenkins ]
role: user-func
username: jenkins
authorized_keys: [ jenkins, jenkins-slave01, jenkins-slave02 ]
hosts:
- host: all
- host: jenkins-slave01
groups: [ docker ]
- tags: [ testers, tester ]
role: user-func
username: tester
authorized_keys: [ tester ]
hosts:
- host: stand01
- host: stand02
- host: db01
vars/ssh_public_keys.yml
ssh_public_keys:
- name: freehck
fullname: Дмитрий Кашин
key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPSD4/7GDGnHuFr/p/ZmDoW0RZ/3bHvoI/s5WwOpARJuqgnzj2CyfiPxkKzvCuncUq8O8FfjnAyyj7pEIV2MSEQnxzoFDfcJHRH4sw68TLlGENUvQjtTqrZQ2fyZ6Nu7dktq4A3aOxV0rVZa2oJMA1V1LFj5y9u9B4Sj1pSuY0HkAF1XHJDyBQUs8ncrBkwakqCw0wKI7aLC6tph4whFzJqs8LSnwrR6kMMyVC2xjaw8vczM1wcYVfc6lPN7tWJTH3GrjQRdEYEJo3VqInoiQ9OKb171fMrp9N1u6a88ffTDdX3Jlgm8MRSItuGkdJ9tNXke/hq7GuKmavx7sMf34d freehck
- name: jenkins
key: ...
- name: jenkins-slave01
key: ...
- name: jenkins-slave02
key: ...
Пример 2 (со всеми возможными опциями)
- role: user-func
username: freehck # обязательно
give_sudo: no
password: "mysecret"
lock_password: no
disable_user: no
delete_user: no
shell: "/bin/bash"
common_groups: [ "users" ]
authorized_keys: [ key_name, ... ]
ssh_public_keys:
- name: freehck
fullname: Дмитрий Кашин
key: <public-key>
hosts: # обязательно
- host: host-or-inventory-group # обязательно
give_sudo: yes
password: "mysecret"
lock_password: no
disable_user: no
delete_user: no
shell: "/bin/zsh"
groups: [ "vboxusers" ]
authorized_keys: [ key_name, ... ]
- host: host-or-inventory-group
...
Лицензия
GPLv3+
Информация об авторе
Эту роль написал Дмитрий Кашин, также известный как freehck.
ansible-galaxy install freehck/ansible-role-user-func