users
Ansible Роль: users
Роль для управления несколькими пользователями в Linux.
Добавляйте пользователей, изменяйте пароли, блокируйте/разблокируйте учетные записи, управляйте доступом sudo (по каждому пользователю), добавляйте ssh-ключи для аутентификации на основе ssh.
Операционные системы
Проверено на
- Arch Linux
- Debian и его производные:
- Debian 10 / 11 / 12
- Ubuntu 20.04 / 22.04
Системы на основе RedHat больше не поддерживаются официально! Могут работать, но это не гарантировано.
Как сгенерировать пароль
- на Ubuntu - Установите пакет
whois
mkpasswd --method=SHA-512
- на RedHat - Используйте Python
python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'
# MD5 (УСТАРЕЛ!)
openssl passwd -1 -salt 5RPVAd clear-text-passwd43
# SHA-256
openssl passwd -5 -salt 5RPVAd clear-text-passwd43
# SHA-512
openssl passwd -6 -salt 5RPVAd clear-text-passwd43
# blowfish
python -c 'import bcrypt; print(bcrypt.hashpw(b"clear-text-passwd43", bcrypt.gensalt(rounds=15)).decode("ascii"))'
Настройки по умолчанию
---
users_output: "compact" # или: 'full' для более подробного вывода
users: []
Настройки пользователей
параметр | по умолчанию | описание | |
---|---|---|---|
username |
обязательно | имя пользователя - без пробелов | |
uid |
необязательно | Числовое значение идентификатора пользователя | |
state |
обязательно | present / absent / lock |
|
password |
необязательно | пароль, зашифрованный при помощи sha512. Если не установлен, пароль будет установлен на ! |
|
update_password |
always |
необязательно | always / on_create .ПРИМЕЧАНИЕ: при выборе always пароль будет изменен на значение пароля.Если вы используете always для существующих пользователей, убедитесь, что пароль установлен. |
comment |
необязательно | Полное имя и отдел или описание приложения (Но вы должны установить это!) | |
groups |
необязательно | Список групп, через запятую, к которым будет добавлен пользователь (дополняется). Если группа не существует, она будет создана на конкретном сервере. Это не основная группа (основная группа не изменяется) |
|
shell |
/bin/bash |
необязательно | путь к оболочке для входа |
authorized_key_directory |
- |
необязательно | путь для центрального хранения ssh ключа, например, /etc/ssh/authorized_key |
authorized_keys |
[] |
необязательно | список с authorized_keys. хранится в $HOME/.ssh/authorized_keys или в authorized_key_directory |
ssh_keys |
необязательно | словарь с различными ssh_keys. Вы можете использовать это для развертывания статических файлов общедоступных или частных ключей | |
sudo |
{} |
необязательно | словарь с настройками sudo. (см. ниже) |
remove |
False |
необязательно | Это касается только state=absent , он пытается удалить каталоги, связанные с пользователем. |
ssh_keys
Если вам нужно развернуть статические публичные или приватные SSH-ключи через Ansible, вы можете определить их здесь. Данные могут быть доступны в виде открытого текста или в виде закодированных строк base64.
(Если кто-то думает, что я использую реальные существующие SSH-ключи здесь ... извините, вы не правы!)
users:
- username: foo-bar
ssh_keys:
id_ed25519: |
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABAXYpRZio
BDw+o+oic9MwrqAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIK6jjUFopFO9kV4G
WIkR0gNzpoaOgpwFFRLWKcpeG8THAAAAkHtt03xiYPgAEc7T0nEtnCjt67sN6msNP2Nxgv
+Fd8BANdzbYFzsMoQ45Ldja2gsOt1KAecwO+xY+5BRCA0huWCTHwbd7Y6BqCKLEpHwXWG1
UI4GzDt6+hD1LZSbYTFpi+LhiQ1PlrmG5eRQOXzlEAY6AziN7gajlQRsOxkmTW98DuVzWw
S/KVZZ/wwzyaIPYQ==
-----END OPENSSH PRIVATE KEY-----
id_ed25519.pub: ssh-ed25519 AAAAC3NzaC1lYDI1NTE5AAAAIL+LmfwIhn8kxZcyusbcITtwsAOnI1I/d/c40XnGBg7J bar.foo <[email protected]>
id_rsa: "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KaCtmZVZZQVg1Sm1EM2QvdEx6UkxUbTBmUm5CL1NVTDFFQ21jK1gwZ3dLL3UvUG4zU2RJOE0zVk9aMUJkUWJNNjkrU2oyYgozLzRRN1NsbUZObEVXaG43M2VHUFhTTTBLU1VUcGk5bFk0dVJndEhDdGYrejhsaVNBNFlvRlJKcTcxYi9JWHZ1SkUxVks1Ck5jQ3dSUFZRSGRUc0VEdG52M09lNDdFbW9XWFgzOUdFazRoQWNqV1BoeVRvZWFvSWNYTXZDbkVTMXp6SS8wQ2RsVUo2TGEKU1p4Njk2aFE0a1dPZ2k5UE0vVERHdytBRDZGbGVNTUtTK0FtalNuWHBYTjMwTzVacTFuMEhEWGd4ak55VVZ4SjdEVUNDMgpwZ2p1RHpPdDF3QUFBOGhNeC9oMlRNZjRkZ0FBQUFkemMyZ3Rjbk5oQUFBQkFRQytDRGdQYzllZnhvcWZQKzNoc0FBOFMvCm1Kb04wR2xwc2haNEZNNnVrWFdWc3RTQS9ONmJPSDU5NVZnQmZrbVlQZDMrMHZORXRPYlI5R2NIOUpRdlVRS1p6NWZTREEKcis3OCtmZEowand6ZFU1blVGMUJzenIzNUtQWnZmL2hEdEtXWVUyVVJhR2Z2ZDRZOWRJelFwSlJPbUwyVmppNUdDMGNLMQovN1B5V0pJRGhpZ1ZFbXJ2VnY4aGUrNGtUVlVyazF3TEJFOVZBZDFPd1FPMmUvYzU3anNTYWhaZGZmMFlTVGlFQnlOWStICklqNTlnck8ydldDa3JSTTd1Vk9sTUEzSnQ2ZDVkSDE4RDN5Vk5HWHB5dnVROUxXWUxWUGdvMlVUV0lVV3VHR2djVXNydVYKVm8xYm1HUTBsSnlQTkpVUmdUTnJ4dGd0emdEdUdoWWZGMzU2QVJkaHVUeXhBQUFBZ1FDT2hlMHF1bzhlakphalM0dUxydApqTkg2b1FNaWF3NGxMMkJtTWlMc3I5STdVWE5BMXZhRzl6R2J6Ym5wS3pSV0VKMWIxRExUWm42bnRMR2l1UVlCaGNuRUx5CnF3aVdrUDlqNnFZd2NtNlJ3b2tkTGMzWHkvdzdrZXluUVU5SlR4YlVtSGpLQnNKRW9YaGUyS1JVNlhDK0pLYm16cHF3M1QKbkpKcXdodVFNWjBXN3lBMzdheWtYenpLejV2Qlpac1pvekY4MEpXc3FITHBXMTh4ZCtoM1JxWDB3c1dUcjVLcUxWdEN6bgp0UzBKYTl6TXppTWp6S2Z2RDRlT0wwR3NWTXdFc042SUM1bGhkYjdBcGRHTkwyVVpzQUFBQ0JBTVZIc2EwaEFTYW01MVdUCkJkRW5HNjNJZkhwcjhFWjFBQUFBRDJKdlpITmphRUJrWVhKclkybDBlUUVDQXc9PQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K"
authorized_keys
Чтобы развернуть authorized_keys, соответствующая директория .ssh будет создана в $HOME и сохранена там.
Если требуется, чтобы пользователи не управляли своими SSH-ключами самостоятельно, они могут также храниться в недоступной директории (например, /etc/ssh/authorized_key
).
Тем не менее, sshd должен быть настроен соответствующим образом до того, как это будет сделано!
Следующая строка конфигурации имеет смысл: AuthorizedKeysFile: /etc/ssh/authorized_keys/%u .ssh/authorized_keys
.
sudo
Для каждого пользователя можно настроить простое правило sudo. Упор сделан на простоту!
Следующая конфигурация
- username: foo-bar
sudo:
nopassword: true
runas: "ALL"
commands: ALL
приведет к следующему файлу sudoers
foo-bar ALL=(ALL)NOPASSWD: ALL
Доступные параметры настройки:
параметр | по умолчанию | тип | описание |
---|---|---|---|
nopassword |
False |
bool |
Требуется ли ввод пароля для выполнения команды sudo. |
runas |
- |
string |
Укажите целевого пользователя, от имени которого будут выполняться команды. |
commands |
- |
string или list |
Команды, разрешенные по правилам sudoers. Можно добавлять несколько, передавая список команд. |
group |
- |
string |
Имя группы для правила sudoers. |
Использование
см. тесты молекулы
- hosts: all
any_errors_fatal: false
vars:
users:
- username: foo-bar
update_password: always
comment: Foo Bar
# password: foo-barbar
shell: /bin/bash
ssh_keys:
id_ed25519: |
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABAXYpRZio
BDw+o+oic9MwrqAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIK6jjUFopFO9kV4G
WIkR0gNzpoaOgpwFFRLWKcpeG8THAAAAkHtt03xiYPgAEc7T0nEtnCjt67sN6msNP2Nxgv
+Fd8BANdzbYFzsMoQ45Ldja2gsOt1KAecwO+xY+5BRCA0huWCTHwbd7Y6BqCKLEpHwXWG1
UI4GzDt6+hD1LZSbYTFpi+LhiQ1PlrmG5eRQOXzlEAY6AziN7gajlQRsOxkmTW98DuVzWw
S/KVZZ/wwzyaIPYQ==
-----END OPENSSH PRIVATE KEY-----
id_ed25519.pub: ssh-ed25519 AAAAC3NzaC1lYDI1NTE5AAAAIL+LmfwIhn8kxZcyusbcITtwsAOnI1I/d/c40XnGBg7J bar.foo <[email protected]>
id_rsa: "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KaCtmZVZZQVg1Sm1EM2QvdEx6UkxUbTBmUm5CL1NVTDFFQ21jK1gwZ3dLL3UvUG4zU2RJOE0zVk9aMUJkUWJNNjkrU2oyYgozLzRRN1NsbUZObEVXaG43M2VHUFhTTTBLU1VUcGk5bFk0dVJndEhDdGYrejhsaVNBNFlvRlJKcTcxYi9JWHZ1SkUxVks1Ck5jQ3dSUFZRSGRUc0VEdG52M09lNDdFbW9XWFgzOUdFazRoQWNqV1BoeVRvZWFvSWNYTXZDbkVTMXp6SS8wQ2RsVUo2TGEKU1p4Njk2aFE0a1dPZ2k5UE0vVERHdytBRDZGbGVNTUtTK0FtalNuWHBYTjMwTzVacTFuMEhEWGd4ak55VVZ4SjdEVUNDMgpwZ2p1RHpPdDF3QUFBOGhNeC9oMlRNZjRkZ0FBQUFkemMyZ3Rjbk5oQUFBQkFRQytDRGdQYzllZnhvcWZQKzNoc0FBOFMvCm1Kb04wR2xwc2haNEZNNnVrWFdWc3RTQS9ONmJPSDU5NVZnQmZrbVlQZDMrMHZORXRPYlI5R2NIOUpRdlVRS1p6NWZTREEKcis3OCtmZEowand6ZFU1blVGMUJzenIzNUtQWnZmL2hEdEtXWVUyVVJhR2Z2ZDRZOWRJelFwSlJPbUwyVmppNUdDMGNLMQovN1B5V0pJRGhpZ1ZFbXJ2VnY4aGUrNGtUVlVyazF3TEJFOVZBZDFPd1FPMmUvYzU3anNTYWhaZGZmMFlTVGlFQnlOWStICklqNTlnck8ydldDa3JSTTd1Vk9sTUEzSnQ2ZDVkSDE4RDN5Vk5HWHB5dnVROUxXWUxWUGdvMlVUV0lVV3VHR2djVXNydVYKVm8xYm1HUTBsSnlQTkpVUmdUTnJ4dGd0emdEdUdoWWZGMzU2QVJkaHVUeXhBQUFBZ1FDT2hlMHF1bzhlakphalM0dUxydApqTkg2b1FNaWF3NGxMMkJtTWlMc3I5STdVWE5BMXZhRzl6R2J6Ym5wS3pSV0VKMWIxRExUWm42bnRMR2l1UVlCaGNuRUx5CnF3aVdrUDlqNnFZd2NtNlJ3b2tkTGMzWHkvdzdrZXluUVU5SlR4YlVtSGpLQnNKRW9YaGUyS1JVNlhDK0pLYm16cHF3M1QKbkpKcXdodVFNWjBXN3lBMzdheWtYenpLejV2Qlpac1pvekY4MEpXc3FITHBXMTh4ZCtoM1JxWDB3c1dUcjVLcUxWdEN6bgp0UzBKYTl6TXppTWp6S2Z2RDRlT0wwR3NWTXdFc042SUM1bGhkYjdBcGRHTkwyVVpzQUFBQ0JBTVZIc2EwaEFTYW01MVdUCkJkRW5HNjNJZkhwcjhFWjFBQUFBRDJKdlpITmphRUJrWVhKclkybDBlUUVDQXc9PQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K"
sudo:
nopassword: true
runas: "ALL"
commands:
- ALL
- /bin/systemctl restart my-service
- /bin/systemctl reload my-service
group: wheel
state: present
roles:
- role: ansible-users
Автор и лицензия
- Бодо Шульц
Лицензия
БЕСПЛАТНОЕ ПО, УРА!
ansible-galaxy install bodsch/ansible-users