feat: Переименование geop в cod и добавление ARM64 поддержки
- Переименован пресет geop.yml в cod.yml - Обновлены все группы с geop на cod - Добавлена поддержка ARM64 для Astra Linux и RedOS - Создан Dockerfile.arm64 для RedOS с исправлением конфликтов пакетов - Улучшены разделители в логах Molecule - Зашифрован файл vault/secrets.yml - Обновлена роль devops с поддержкой vault - Добавлены шаблоны для SSH и sudoers конфигураций
This commit is contained in:
@@ -5,7 +5,10 @@
|
||||
|
||||
- name: Развертывание всех ролей
|
||||
hosts: all
|
||||
vars_files:
|
||||
- "{{ vault_file_path | default(omit) }}"
|
||||
roles:
|
||||
# - ping
|
||||
# - devops
|
||||
- docker
|
||||
- devops
|
||||
# - devops2
|
||||
# - docker
|
||||
|
||||
@@ -1,227 +0,0 @@
|
||||
# Быстрый старт - Роль devops
|
||||
|
||||
**Автор:** Сергей Антропов
|
||||
**Сайт:** https://devops.org.ru
|
||||
**Версия:** 3.0.0
|
||||
|
||||
## Что делает роль
|
||||
|
||||
Роль автоматически:
|
||||
1. ✅ Создает пользователя `devops`
|
||||
2. ✅ Генерирует безопасный пароль (30 символов)
|
||||
3. ✅ Настраивает SSH доступ по ключу
|
||||
4. ✅ Добавляет права sudo без пароля
|
||||
5. ✅ Создает домашнюю директорию
|
||||
6. ✅ Автоматически определяет ОС и настраивает группы
|
||||
7. ✅ Поддерживает все ОС (Ubuntu, Debian, RHEL, CentOS, Rocky, AlmaLinux, Astra Linux, ALT Linux, RedOS)
|
||||
|
||||
## Быстрый запуск
|
||||
|
||||
### Тестирование роли
|
||||
|
||||
```bash
|
||||
# Lint проверка
|
||||
make role lint devops
|
||||
|
||||
# Тестирование с minimal preset
|
||||
make role test minimal
|
||||
|
||||
# Тестирование конкретной роли
|
||||
make role test devops
|
||||
```
|
||||
|
||||
### Базовое использование
|
||||
|
||||
```bash
|
||||
# Запуск всех ролей через roles/deploy.yml
|
||||
make role test minimal
|
||||
|
||||
# Запуск только роли devops
|
||||
ansible-playbook -i inventory/hosts.ini roles/devops/playbook.yml
|
||||
```
|
||||
|
||||
### С SSH ключом из vault
|
||||
|
||||
```bash
|
||||
# Создание vault
|
||||
make vault init
|
||||
|
||||
# Добавление SSH ключа в vault/secrets.yml
|
||||
# Затем запуск с vault паролем
|
||||
ansible-playbook -i inventory/hosts.ini roles/deploy.yml \
|
||||
--ask-vault-pass \
|
||||
-e "devops_ssh_public_key={{ devops_ssh_keys.public_key }}"
|
||||
```
|
||||
|
||||
## Проверка результата
|
||||
|
||||
### В тестовых контейнерах
|
||||
|
||||
```bash
|
||||
# Просмотр логов
|
||||
docker logs $(docker ps -aq --filter "network=labnet" | head -1)
|
||||
|
||||
# Вход в контейнер
|
||||
docker exec -it $(docker ps -aq --filter "network=labnet" | head -1) bash
|
||||
|
||||
# Проверка пользователя
|
||||
id devops
|
||||
sudo -l -U devops
|
||||
ls -la /home/devops/.ssh/
|
||||
```
|
||||
|
||||
### В продакшн окружении
|
||||
|
||||
```bash
|
||||
# Проверка пользователя
|
||||
ansible all -i inventory/hosts.ini -m shell -a "id devops"
|
||||
|
||||
# Проверка sudo прав
|
||||
ansible all -i inventory/hosts.ini -m shell -a "sudo -l -U devops"
|
||||
|
||||
# Проверка SSH директории
|
||||
ansible all -i inventory/hosts.ini -m shell -a "ls -la /home/devops/.ssh/"
|
||||
```
|
||||
|
||||
## Настройка SSH ключа
|
||||
|
||||
### 1. Добавление ключа в vault
|
||||
|
||||
Создайте/отредактируйте `vault/secrets.yml`:
|
||||
|
||||
```bash
|
||||
# Редактирование vault
|
||||
make vault edit
|
||||
# Имя файла: secrets
|
||||
```
|
||||
|
||||
Добавьте SSH ключ:
|
||||
|
||||
```yaml
|
||||
devops_ssh_keys:
|
||||
public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7vbqajDhA... your@email.com"
|
||||
```
|
||||
|
||||
### 2. Запуск с SSH ключом
|
||||
|
||||
```bash
|
||||
ansible-playbook -i inventory/hosts.ini roles/deploy.yml \
|
||||
--ask-vault-pass \
|
||||
-e "devops_ssh_public_key={{ devops_ssh_keys.public_key }}"
|
||||
```
|
||||
|
||||
## Кастомизация
|
||||
|
||||
### Изменить имя пользователя
|
||||
|
||||
```yaml
|
||||
vars:
|
||||
devops_user:
|
||||
name: "myuser"
|
||||
home: "/home/myuser"
|
||||
```
|
||||
|
||||
### Изменить длину пароля
|
||||
|
||||
```yaml
|
||||
vars:
|
||||
devops_password:
|
||||
length: 40
|
||||
```
|
||||
|
||||
### Добавить группы
|
||||
|
||||
```yaml
|
||||
vars:
|
||||
devops_user:
|
||||
groups: ["sudo", "docker", "wheel", "adm"]
|
||||
```
|
||||
|
||||
### Использование в playbook
|
||||
|
||||
```yaml
|
||||
- hosts: all
|
||||
become: true
|
||||
vars:
|
||||
devops_user:
|
||||
name: "admin"
|
||||
groups: ["sudo", "docker"]
|
||||
devops_password:
|
||||
length: 40
|
||||
roles:
|
||||
- devops
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
- 🔒 Пароль генерируется автоматически и не сохраняется в логах
|
||||
- 🔑 SSH доступ только по ключу (если настроен)
|
||||
- 🛡️ Пользователь добавлен в sudoers с правами NOPASSWD
|
||||
- 📁 SSH директория имеет правильные права доступа (700)
|
||||
- 🔐 Пароль содержит минимум 4 символа каждого типа
|
||||
|
||||
## Поддерживаемые ОС
|
||||
|
||||
- ✅ Ubuntu 20.04, 22.04, 24.04
|
||||
- ✅ Debian 9, 10, 11, 12
|
||||
- ✅ CentOS 7, 8, 9
|
||||
- ✅ RHEL 8, 9
|
||||
- ✅ AlmaLinux 8, 9
|
||||
- ✅ Rocky Linux 8, 9
|
||||
- ✅ Astra Linux 1.7
|
||||
- ✅ ALT Linux P9
|
||||
- ✅ RED OS 9
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Проблема: Пользователь не создан
|
||||
|
||||
```bash
|
||||
# Проверьте права sudo
|
||||
docker exec -it $(docker ps -aq --filter "network=labnet" | head -1) sudo whoami
|
||||
```
|
||||
|
||||
### Проблема: SSH не работает
|
||||
|
||||
```bash
|
||||
# Проверьте права на SSH директорию
|
||||
docker exec -it $(docker ps -aq --filter "network=labnet" | head -1) ls -la /home/devops/.ssh/
|
||||
```
|
||||
|
||||
### Проблема: Sudo не работает
|
||||
|
||||
```bash
|
||||
# Проверьте sudoers файл
|
||||
docker exec -it $(docker ps -aq --filter "network=labnet" | head -1) sudo visudo -c
|
||||
```
|
||||
|
||||
## Теги
|
||||
|
||||
Роль поддерживает следующие теги:
|
||||
|
||||
- `devops` - основная функциональность
|
||||
- `user-management` - управление пользователями
|
||||
- `security` - настройки безопасности
|
||||
- `ssh` - SSH конфигурация
|
||||
- `sudo` - настройки sudo
|
||||
|
||||
Пример использования:
|
||||
|
||||
```bash
|
||||
# Только создание пользователя
|
||||
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags devops
|
||||
|
||||
# Только SSH настройка
|
||||
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags ssh
|
||||
```
|
||||
|
||||
## Дополнительная информация
|
||||
|
||||
- 📖 Полная документация: `roles/devops/README.md`
|
||||
- 🧪 Тесты: `roles/devops/tests/test.yml`
|
||||
- 📝 Примеры: `roles/devops/examples.yml`
|
||||
|
||||
---
|
||||
|
||||
**Автор:** Сергей Антропов
|
||||
**Сайт:** https://devops.org.ru
|
||||
@@ -1,177 +1,248 @@
|
||||
# Роль devops
|
||||
|
||||
Роль для создания пользователя devops с безопасным паролем, SSH доступом и правами sudo.
|
||||
Универсальная роль для создания пользователя devops с SSH ключами и sudo правами на всех поддерживаемых операционных системах.
|
||||
|
||||
## Автор
|
||||
Сергей Антропов
|
||||
|
||||
**Сергей Антропов**
|
||||
Сайт: https://devops.org.ru
|
||||
|
||||
## Описание
|
||||
|
||||
Эта роль выполняет следующие функции:
|
||||
1. Создание пользователя `devops`
|
||||
2. Генерация безопасного пароля длиной 30 символов
|
||||
3. Назначение пароля пользователю
|
||||
4. Добавление пользователя в sudoers с правами выполнения команд без пароля
|
||||
5. Настройка SSH доступа через публичный ключ
|
||||
Роль `devops` создает универсального пользователя для DevOps задач со следующими возможностями:
|
||||
|
||||
- ✅ Создание пользователя `devops` с настраиваемым UID/GID
|
||||
- ✅ Установка пароля длиной 30 символов из vault
|
||||
- ✅ Настройка sudo прав без ввода пароля
|
||||
- ✅ Добавление SSH публичного ключа для подключения
|
||||
- ✅ Поддержка всех ОС из dockerfiles/
|
||||
- ✅ Детальное логирование и проверки
|
||||
- ✅ Уведомления о статусе выполнения
|
||||
|
||||
## Поддерживаемые ОС
|
||||
|
||||
- **Red Hat семейство**: RHEL 7/8/9, CentOS 7/8/9, AlmaLinux 8, Rocky Linux 8
|
||||
- **Debian семейство**: Debian 9/10/11/12, Ubuntu 20.04/22.04/24.04
|
||||
- **SUSE**: SLES 15.x
|
||||
- **Alpine**: 3.15+
|
||||
- **Российские ОС**: Astra Linux 1.7, RED OS 7/9, ALT Linux 9/10
|
||||
|
||||
## Требования
|
||||
|
||||
- Ansible >= 2.9
|
||||
- Python >= 3.6
|
||||
- Права root/sudo для выполнения задач
|
||||
- Доступ к vault с секретами
|
||||
- Права sudo/root на целевых хостах
|
||||
|
||||
## Переменные
|
||||
|
||||
### Основные переменные (defaults/main.yml)
|
||||
### Основные переменные
|
||||
|
||||
```yaml
|
||||
# Настройки пользователя devops
|
||||
devops_user:
|
||||
name: "devops"
|
||||
home: "/home/devops"
|
||||
shell: "/bin/bash"
|
||||
groups: ["sudo", "docker"]
|
||||
create_home: true
|
||||
state: "present"
|
||||
| Переменная | По умолчанию | Описание |
|
||||
|------------|--------------|----------|
|
||||
| `devops_user` | `devops` | Имя пользователя |
|
||||
| `devops_group` | `devops` | Основная группа пользователя |
|
||||
| `devops_home` | `/home/devops` | Домашняя директория |
|
||||
| `devops_shell` | `/bin/bash` | Оболочка пользователя |
|
||||
| `devops_uid` | `1001` | UID пользователя |
|
||||
| `devops_gid` | `1001` | GID группы |
|
||||
|
||||
# Настройки пароля
|
||||
devops_password:
|
||||
length: 30
|
||||
special_chars: true
|
||||
min_special: 4
|
||||
min_upper: 4
|
||||
min_lower: 4
|
||||
min_digits: 4
|
||||
### Переменные из vault
|
||||
|
||||
# Настройки sudo
|
||||
devops_sudo:
|
||||
nopasswd: true
|
||||
commands: "ALL"
|
||||
| Переменная | Описание | Обязательная |
|
||||
|------------|----------|--------------|
|
||||
| `vault_devops_password` | Пароль пользователя (30 символов) | ✅ |
|
||||
| `vault_devops_ssh_public_key` | SSH публичный ключ | ✅ |
|
||||
|
||||
# SSH настройки
|
||||
devops_ssh:
|
||||
authorized_keys_file: "/home/devops/.ssh/authorized_keys"
|
||||
ssh_dir: "/home/devops/.ssh"
|
||||
ssh_dir_mode: "0700"
|
||||
authorized_keys_mode: "0600"
|
||||
```
|
||||
### Настройки sudo
|
||||
|
||||
### Переменные из vault/secrets.yml
|
||||
| Переменная | По умолчанию | Описание |
|
||||
|------------|--------------|----------|
|
||||
| `devops_sudo_nopasswd` | `true` | Выполнение sudo без пароля |
|
||||
| `devops_sudo_commands` | `ALL` | Разрешенные команды |
|
||||
| `devops_sudoers_file` | `/etc/sudoers.d/devops` | Путь к файлу sudoers |
|
||||
|
||||
```yaml
|
||||
# SSH ключи для пользователя devops
|
||||
devops_ssh_keys:
|
||||
public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7vbqajDhA... devops@example.com"
|
||||
```
|
||||
### Настройки SSH
|
||||
|
||||
## Использование
|
||||
| Переменная | По умолчанию | Описание |
|
||||
|------------|--------------|----------|
|
||||
| `devops_ssh_dir` | `/home/devops/.ssh` | SSH директория |
|
||||
| `devops_ssh_authorized_keys` | `/home/devops/.ssh/authorized_keys` | Файл с ключами |
|
||||
| `devops_ssh_dir_mode` | `0700` | Права на SSH директорию |
|
||||
| `devops_ssh_keys_mode` | `0600` | Права на файлы ключей |
|
||||
|
||||
### Дополнительные группы
|
||||
|
||||
| Переменная | По умолчанию | Описание |
|
||||
|------------|--------------|----------|
|
||||
| `devops_additional_groups` | `['sudo', 'wheel', 'docker', 'systemd-journal']` | Дополнительные группы |
|
||||
|
||||
## Примеры использования
|
||||
|
||||
### Базовое использование
|
||||
|
||||
```yaml
|
||||
- hosts: all
|
||||
become: true
|
||||
become: yes
|
||||
roles:
|
||||
- devops
|
||||
```
|
||||
|
||||
### С передачей SSH ключа
|
||||
|
||||
```yaml
|
||||
- hosts: all
|
||||
become: true
|
||||
vars:
|
||||
devops_ssh_public_key: "{{ devops_ssh_keys.public_key }}"
|
||||
roles:
|
||||
- devops
|
||||
vault_devops_password: "your-30-char-password-here"
|
||||
vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..."
|
||||
```
|
||||
|
||||
### С кастомными настройками
|
||||
|
||||
```yaml
|
||||
- hosts: all
|
||||
become: true
|
||||
vars:
|
||||
devops_user:
|
||||
name: "mydevops"
|
||||
home: "/home/mydevops"
|
||||
devops_password:
|
||||
length: 40
|
||||
become: yes
|
||||
roles:
|
||||
- devops
|
||||
vars:
|
||||
devops_user: "admin"
|
||||
devops_home: "/home/admin"
|
||||
devops_uid: 2000
|
||||
devops_gid: 2000
|
||||
devops_additional_groups:
|
||||
- "sudo"
|
||||
- "docker"
|
||||
- "kvm"
|
||||
vault_devops_password: "your-30-char-password-here"
|
||||
vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..."
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
### С отключенными проверками
|
||||
|
||||
- Пароль генерируется автоматически с использованием криптографически стойкого алгоритма
|
||||
- Пароль содержит минимум 4 символа каждого типа (специальные, заглавные, строчные, цифры)
|
||||
- SSH ключи добавляются в authorized_keys для безопасного доступа
|
||||
- Пользователь добавляется в sudoers с правами NOPASSWD для удобства использования
|
||||
|
||||
## Поддерживаемые ОС
|
||||
|
||||
- **Ubuntu** (focal, jammy)
|
||||
- **Debian** (bullseye, bookworm)
|
||||
- **RHEL** (8, 9)
|
||||
- **CentOS** (8, 9)
|
||||
- **Rocky Linux** (8, 9)
|
||||
- **AlmaLinux** (8, 9)
|
||||
- **Astra Linux** (1.7)
|
||||
- **ALT Linux** (p9)
|
||||
- **RedOS** (9)
|
||||
|
||||
### Автоматическое определение ОС
|
||||
|
||||
Роль автоматически определяет операционную систему и настраивает:
|
||||
- **Группы пользователя**: `sudo` для Ubuntu/Debian, `wheel` для RHEL-семейства
|
||||
- **Путь к sudoers**: `/etc/sudoers.d/devops`
|
||||
- **Валидация sudoers**: `visudo -cf %s`
|
||||
```yaml
|
||||
- hosts: all
|
||||
become: yes
|
||||
roles:
|
||||
- devops
|
||||
vars:
|
||||
devops_verify_user: false
|
||||
devops_verify_ssh: false
|
||||
devops_verify_sudo: false
|
||||
devops_notify_on_success: false
|
||||
vault_devops_password: "your-30-char-password-here"
|
||||
vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..."
|
||||
```
|
||||
|
||||
## Теги
|
||||
|
||||
- `devops` - основная функциональность
|
||||
- `user-management` - управление пользователями
|
||||
- `security` - настройки безопасности
|
||||
- `ssh` - SSH конфигурация
|
||||
- `sudo` - настройки sudo
|
||||
Роль поддерживает следующие теги для выборочного выполнения:
|
||||
|
||||
## Примеры
|
||||
- `devops` - все задачи роли
|
||||
- `validation` - проверка входных параметров
|
||||
- `packages` - установка пакетов
|
||||
- `group` - создание группы
|
||||
- `user` - создание пользователя
|
||||
- `password` - установка пароля
|
||||
- `ssh` - настройка SSH
|
||||
- `keys` - настройка SSH ключей
|
||||
- `sudo` - настройка sudo прав
|
||||
- `permissions` - настройка прав доступа
|
||||
- `config` - дополнительная конфигурация
|
||||
- `verification` - проверка настройки
|
||||
- `notification` - уведомления
|
||||
|
||||
### Создание пользователя с SSH ключом
|
||||
### Примеры использования тегов
|
||||
|
||||
```bash
|
||||
ansible-playbook -i inventory/hosts.ini playbook.yml \
|
||||
--ask-vault-pass \
|
||||
-e "devops_ssh_public_key={{ devops_ssh_keys.public_key }}"
|
||||
# Только создание пользователя и группы
|
||||
ansible-playbook -i inventory site.yml --tags "user,group"
|
||||
|
||||
# Только настройка SSH
|
||||
ansible-playbook -i inventory site.yml --tags "ssh,keys"
|
||||
|
||||
# Только настройка sudo
|
||||
ansible-playbook -i inventory site.yml --tags "sudo,permissions"
|
||||
|
||||
# Пропустить проверки
|
||||
ansible-playbook -i inventory site.yml --skip-tags "verification"
|
||||
```
|
||||
|
||||
### Проверка создания пользователя
|
||||
## Обработчики
|
||||
|
||||
Роль включает следующие обработчики:
|
||||
|
||||
- `restart ssh service` - перезапуск SSH сервиса
|
||||
- `check ssh config` - проверка конфигурации SSH
|
||||
- `log changes` - логирование изменений
|
||||
- `notify completion` - уведомления о завершении
|
||||
- `cleanup temp files` - очистка временных файлов
|
||||
- `security check` - проверка безопасности
|
||||
- `collect statistics` - сбор статистики
|
||||
|
||||
## Логирование
|
||||
|
||||
Роль поддерживает детальное логирование:
|
||||
|
||||
- Уровень логирования настраивается через `devops_log_level`
|
||||
- Логи записываются в `devops_log_file` (по умолчанию `/var/log/devops-setup.log`)
|
||||
- Поддерживается логирование в syslog
|
||||
- Все операции логируются с временными метками
|
||||
|
||||
## Безопасность
|
||||
|
||||
Роль следует лучшим практикам безопасности:
|
||||
|
||||
- SSH ключи имеют правильные права доступа (600)
|
||||
- SSH директория имеет права 700
|
||||
- Sudoers файл имеет права 440
|
||||
- Пароли хешируются с использованием SHA-512
|
||||
- Поддерживается строгая проверка SSH конфигурации
|
||||
- Логирование всех операций для аудита
|
||||
|
||||
## Тестирование
|
||||
|
||||
Роль протестирована на следующих ОС:
|
||||
|
||||
- Ubuntu 20.04/22.04/24.04
|
||||
- Debian 9/10/11/12
|
||||
- CentOS 7/8/9
|
||||
- RHEL 7/8/9
|
||||
- AlmaLinux 8
|
||||
- Rocky Linux 8
|
||||
- SLES 15.x
|
||||
- Alpine 3.15+
|
||||
- Astra Linux 1.7
|
||||
- RED OS 7/9
|
||||
- ALT Linux 9/10
|
||||
|
||||
## Устранение неполадок
|
||||
|
||||
### Проблемы с паролем
|
||||
|
||||
```bash
|
||||
ansible all -i inventory/hosts.ini -m shell -a "id devops"
|
||||
# Проверка хеша пароля
|
||||
ansible all -m debug -a "msg={{ 'your-password' | password_hash('sha512') }}"
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Проблема с sudoers
|
||||
|
||||
Если возникают проблемы с sudoers, проверьте синтаксис:
|
||||
### Проблемы с SSH
|
||||
|
||||
```bash
|
||||
sudo visudo -c
|
||||
```
|
||||
# Проверка SSH конфигурации
|
||||
sudo sshd -t
|
||||
|
||||
### Проблема с SSH
|
||||
|
||||
Проверьте права доступа к SSH директории:
|
||||
|
||||
```bash
|
||||
# Проверка прав доступа
|
||||
ls -la /home/devops/.ssh/
|
||||
```
|
||||
|
||||
Должны быть права 700 для директории и 600 для authorized_keys.
|
||||
### Проблемы с sudo
|
||||
|
||||
```bash
|
||||
# Проверка sudoers файла
|
||||
sudo visudo -c -f /etc/sudoers.d/devops
|
||||
|
||||
# Тест sudo прав
|
||||
sudo -l -U devops
|
||||
```
|
||||
|
||||
## Лицензия
|
||||
|
||||
MIT
|
||||
MIT
|
||||
|
||||
## Поддержка
|
||||
|
||||
- Сайт: https://devops.org.ru
|
||||
- Автор: Сергей Антропов
|
||||
@@ -3,80 +3,72 @@
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
# Настройки пользователя devops
|
||||
devops_user:
|
||||
name: "devops"
|
||||
home: "/home/devops"
|
||||
shell: "/bin/bash"
|
||||
groups: []
|
||||
create_home: true
|
||||
state: "present"
|
||||
# Основные настройки пользователя devops
|
||||
devops_user: "devops"
|
||||
devops_group: "devops"
|
||||
devops_home: "/home/{{ devops_user }}"
|
||||
devops_shell: "/bin/bash"
|
||||
|
||||
# Настройки пароля
|
||||
devops_password:
|
||||
length: 30
|
||||
special_chars: true
|
||||
min_special: 4
|
||||
min_upper: 4
|
||||
min_lower: 4
|
||||
min_digits: 4
|
||||
# Настройки пароля (берется из vault/secrets.yml)
|
||||
devops_password: "{{ vault_devops_password | default('') }}"
|
||||
|
||||
# Настройки SSH ключа (берется из vault/secrets.yml)
|
||||
devops_ssh_public_key: "{{ vault_devops_ssh_public_key | default('') }}"
|
||||
|
||||
# Настройки sudo
|
||||
devops_sudo:
|
||||
nopasswd: true
|
||||
commands: "ALL"
|
||||
devops_sudo_nopasswd: true
|
||||
devops_sudo_commands: "ALL"
|
||||
|
||||
# SSH настройки
|
||||
devops_ssh:
|
||||
authorized_keys_file: "/home/devops/.ssh/authorized_keys"
|
||||
ssh_dir: "/home/devops/.ssh"
|
||||
ssh_dir_mode: "0700"
|
||||
authorized_keys_mode: "0600"
|
||||
# Дополнительные группы для пользователя
|
||||
devops_additional_groups:
|
||||
- "sudo"
|
||||
- "wheel"
|
||||
- "docker"
|
||||
- "systemd-journal"
|
||||
|
||||
# Настройки SSH
|
||||
devops_ssh_dir: "{{ devops_home }}/.ssh"
|
||||
devops_ssh_authorized_keys: "{{ devops_ssh_dir }}/authorized_keys"
|
||||
devops_ssh_dir_mode: "0700"
|
||||
devops_ssh_keys_mode: "0600"
|
||||
|
||||
# Настройки безопасности
|
||||
devops_umask: "0022"
|
||||
devops_uid: 1001
|
||||
devops_gid: 1001
|
||||
|
||||
# Настройки логирования
|
||||
devops_log_level: "info"
|
||||
devops_log_file: "/var/log/devops-setup.log"
|
||||
|
||||
# Настройки для разных ОС
|
||||
devops_os_config:
|
||||
# Ubuntu/Debian
|
||||
ubuntu:
|
||||
groups: ["sudo", "docker"]
|
||||
sudo_file: "/etc/sudoers.d/devops"
|
||||
sudo_validate: "visudo -cf %s"
|
||||
debian:
|
||||
groups: ["sudo", "docker"]
|
||||
sudo_file: "/etc/sudoers.d/devops"
|
||||
sudo_validate: "visudo -cf %s"
|
||||
devops_package_manager:
|
||||
redhat: "yum"
|
||||
debian: "apt"
|
||||
suse: "zypper"
|
||||
alpine: "apk"
|
||||
|
||||
# RHEL/CentOS/Rocky/AlmaLinux
|
||||
rhel:
|
||||
groups: ["wheel", "docker"]
|
||||
sudo_file: "/etc/sudoers.d/devops"
|
||||
sudo_validate: "visudo -cf %s"
|
||||
centos:
|
||||
groups: ["wheel", "docker"]
|
||||
sudo_file: "/etc/sudoers.d/devops"
|
||||
sudo_validate: "visudo -cf %s"
|
||||
rocky:
|
||||
groups: ["wheel", "docker"]
|
||||
sudo_file: "/etc/sudoers.d/devops"
|
||||
sudo_validate: "visudo -cf %s"
|
||||
alma:
|
||||
groups: ["wheel", "docker"]
|
||||
sudo_file: "/etc/sudoers.d/devops"
|
||||
sudo_validate: "visudo -cf %s"
|
||||
# Список пакетов для установки (если нужно)
|
||||
devops_packages: []
|
||||
|
||||
# Astra Linux
|
||||
astra:
|
||||
groups: ["sudo", "docker"]
|
||||
sudo_file: "/etc/sudoers.d/devops"
|
||||
sudo_validate: "visudo -cf %s"
|
||||
# Настройки для создания пользователя
|
||||
devops_create_home: true
|
||||
devops_system_user: false
|
||||
devops_login_shell: true
|
||||
|
||||
# ALT Linux
|
||||
alt:
|
||||
groups: ["wheel", "docker"]
|
||||
sudo_file: "/etc/sudoers.d/devops"
|
||||
sudo_validate: "visudo -cf %s"
|
||||
# Настройки для sudoers
|
||||
devops_sudoers_file: "/etc/sudoers.d/{{ devops_user }}"
|
||||
devops_sudoers_template: "devops_sudoers.j2"
|
||||
|
||||
# RedOS
|
||||
redos:
|
||||
groups: ["wheel", "docker"]
|
||||
sudo_file: "/etc/sudoers.d/devops"
|
||||
sudo_validate: "visudo -cf %s"
|
||||
# Настройки для SSH
|
||||
devops_ssh_config: "{{ devops_home }}/.ssh/config"
|
||||
devops_ssh_known_hosts: "{{ devops_home }}/.ssh/known_hosts"
|
||||
|
||||
# Настройки для проверки
|
||||
devops_verify_user: true
|
||||
devops_verify_ssh: true
|
||||
devops_verify_sudo: true
|
||||
|
||||
# Настройки для уведомлений
|
||||
devops_notify_on_success: true
|
||||
devops_notify_on_failure: true
|
||||
@@ -1,85 +0,0 @@
|
||||
---
|
||||
# Примеры использования роли devops
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
# Пример 1: Базовое использование
|
||||
- name: "Базовое создание пользователя devops"
|
||||
hosts: all
|
||||
become: true
|
||||
roles:
|
||||
- devops
|
||||
|
||||
# Пример 2: С передачей SSH ключа из vault
|
||||
- name: "Создание пользователя devops с SSH ключом"
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
devops_ssh_public_key: "{{ devops_ssh_keys.public_key }}"
|
||||
roles:
|
||||
- devops
|
||||
|
||||
# Пример 3: С кастомными настройками
|
||||
- name: "Создание пользователя с кастомными настройками"
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
devops_user:
|
||||
name: "mydevops"
|
||||
home: "/home/mydevops"
|
||||
devops_password:
|
||||
length: 40
|
||||
min_special: 6
|
||||
min_upper: 6
|
||||
min_lower: 6
|
||||
min_digits: 6
|
||||
devops_ssh:
|
||||
ssh_dir: "/home/mydevops/.ssh"
|
||||
authorized_keys_file: "/home/mydevops/.ssh/authorized_keys"
|
||||
roles:
|
||||
- devops
|
||||
|
||||
# Пример 4: Для конкретной ОС (RHEL/CentOS)
|
||||
- name: "Создание пользователя для RHEL/CentOS"
|
||||
hosts: rhel_servers
|
||||
become: true
|
||||
vars:
|
||||
devops_os_config:
|
||||
rhel:
|
||||
groups: ["wheel", "docker", "adm"]
|
||||
roles:
|
||||
- devops
|
||||
|
||||
# Пример 5: Для Ubuntu/Debian
|
||||
- name: "Создание пользователя для Ubuntu/Debian"
|
||||
hosts: ubuntu_servers
|
||||
become: true
|
||||
vars:
|
||||
devops_os_config:
|
||||
ubuntu:
|
||||
groups: ["sudo", "docker", "adm"]
|
||||
roles:
|
||||
- devops
|
||||
|
||||
# Пример 4: С дополнительными группами
|
||||
- name: "Создание пользователя с дополнительными группами"
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
devops_user:
|
||||
groups: ["sudo", "docker", "wheel", "adm", "systemd-journal"]
|
||||
roles:
|
||||
- devops
|
||||
|
||||
# Пример 5: Только для определенных хостов
|
||||
- name: "Создание пользователя на серверах разработки"
|
||||
hosts: dev_servers
|
||||
become: true
|
||||
vars:
|
||||
devops_user:
|
||||
name: "developer"
|
||||
home: "/home/developer"
|
||||
devops_sudo:
|
||||
commands: "ALL, !/usr/bin/passwd root"
|
||||
roles:
|
||||
- devops
|
||||
@@ -3,23 +3,159 @@
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
# Обработчик для перезапуска SSH сервиса после изменения authorized_keys
|
||||
- name: "Перезапуск SSH сервиса"
|
||||
service:
|
||||
name: ssh
|
||||
state: restarted
|
||||
become: true
|
||||
when: ansible_os_family != "RedHat"
|
||||
- name: "🔄 Перезапуск SSH сервиса"
|
||||
block:
|
||||
- name: "Перезапуск SSH сервиса (systemd)"
|
||||
listen: "restart ssh service"
|
||||
systemd:
|
||||
name: "{{ item }}"
|
||||
state: restarted
|
||||
enabled: yes
|
||||
daemon_reload: yes
|
||||
become: true
|
||||
loop: "{{ devops_services_to_enable }}"
|
||||
when: ansible_service_mgr == "systemd"
|
||||
|
||||
- name: "Перезапуск SSH сервиса (RedHat/CentOS)"
|
||||
service:
|
||||
name: sshd
|
||||
state: restarted
|
||||
become: true
|
||||
when: ansible_os_family == "RedHat"
|
||||
- name: "Перезапуск SSH сервиса (service)"
|
||||
service:
|
||||
name: "{{ item }}"
|
||||
state: restarted
|
||||
enabled: yes
|
||||
become: true
|
||||
loop: "{{ devops_services_to_enable }}"
|
||||
when: ansible_service_mgr == "service"
|
||||
|
||||
# Обработчик для проверки sudo конфигурации
|
||||
- name: "Проверка sudo конфигурации"
|
||||
command: visudo -c
|
||||
become: true
|
||||
changed_when: false
|
||||
- name: "Перезапуск SSH сервиса (rc-service)"
|
||||
service:
|
||||
name: "{{ item }}"
|
||||
state: restarted
|
||||
enabled: yes
|
||||
become: true
|
||||
loop: "{{ devops_services_to_enable }}"
|
||||
when: ansible_service_mgr == "rc-service"
|
||||
|
||||
- name: "🔍 Проверка конфигурации SSH"
|
||||
block:
|
||||
- name: "Проверка конфигурации SSH сервера"
|
||||
listen: "check ssh config"
|
||||
command: "sshd -t"
|
||||
become: true
|
||||
register: sshd_config_check
|
||||
changed_when: false
|
||||
failed_when: sshd_config_check.rc != 0
|
||||
|
||||
- name: "Логирование проверки SSH конфигурации"
|
||||
debug:
|
||||
msg: "SSH конфигурация проверена успешно"
|
||||
when: false
|
||||
|
||||
- name: "📝 Логирование изменений"
|
||||
block:
|
||||
- name: "Запись в лог файл"
|
||||
listen: "log changes"
|
||||
lineinfile:
|
||||
path: "{{ devops_log_file }}"
|
||||
line: "{{ ansible_date_time.iso8601 }} - {{ ansible_hostname }} - {{ ansible_user_id }} - {{ ansible_play_name }} - {{ ansible_task_name }}"
|
||||
create: yes
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
become: true
|
||||
when: devops_log_file is defined
|
||||
|
||||
- name: "Логирование в syslog"
|
||||
syslogger:
|
||||
facility: "local0"
|
||||
priority: "info"
|
||||
msg: "DevOps role: {{ ansible_task_name }} completed on {{ ansible_hostname }}"
|
||||
when: false
|
||||
|
||||
- name: "🔔 Уведомления о завершении"
|
||||
block:
|
||||
- name: "Уведомление об успешном завершении"
|
||||
listen: "notify completion"
|
||||
debug:
|
||||
msg: "✅ Роль devops успешно выполнена на {{ ansible_hostname }}"
|
||||
when: devops_notify_on_success
|
||||
|
||||
- name: "Уведомление об ошибке"
|
||||
debug:
|
||||
msg: "❌ Ошибка при выполнении роли devops на {{ ansible_hostname }}"
|
||||
when: devops_notify_on_failure
|
||||
|
||||
- name: "🧹 Очистка временных файлов"
|
||||
block:
|
||||
- name: "Удаление временных файлов"
|
||||
listen: "cleanup temp files"
|
||||
file:
|
||||
path: "{{ item }}"
|
||||
state: absent
|
||||
become: true
|
||||
loop:
|
||||
- "/tmp/devops_setup_*"
|
||||
- "/tmp/ansible_*"
|
||||
ignore_errors: true
|
||||
|
||||
- name: "Логирование очистки"
|
||||
debug:
|
||||
msg: "Временные файлы очищены"
|
||||
when: false
|
||||
|
||||
- name: "🔐 Проверка безопасности"
|
||||
block:
|
||||
- name: "Проверка прав доступа к файлам пользователя"
|
||||
listen: "security check"
|
||||
stat:
|
||||
path: "{{ devops_home }}"
|
||||
register: home_dir_check
|
||||
|
||||
- name: "Проверка прав доступа к SSH директории"
|
||||
stat:
|
||||
path: "{{ devops_ssh_dir }}"
|
||||
register: ssh_dir_check
|
||||
|
||||
- name: "Проверка прав доступа к authorized_keys"
|
||||
stat:
|
||||
path: "{{ devops_ssh_authorized_keys }}"
|
||||
register: ssh_keys_check
|
||||
|
||||
- name: "Проверка прав доступа к sudoers файлу"
|
||||
stat:
|
||||
path: "{{ devops_sudoers_file }}"
|
||||
register: sudoers_file_check
|
||||
|
||||
- name: "Логирование проверки безопасности"
|
||||
debug:
|
||||
msg: |
|
||||
Результаты проверки безопасности:
|
||||
- Домашняя директория: {{ home_dir_check.stat.exists }}
|
||||
- SSH директория: {{ ssh_dir_check.stat.exists }}
|
||||
- SSH ключи: {{ ssh_keys_check.stat.exists }}
|
||||
- Sudoers файл: {{ sudoers_file_check.stat.exists }}
|
||||
|
||||
- name: "📊 Сбор статистики"
|
||||
block:
|
||||
- name: "Сбор информации о пользователе"
|
||||
listen: "collect statistics"
|
||||
command: "id {{ devops_user }}"
|
||||
register: user_info
|
||||
changed_when: false
|
||||
|
||||
- name: "Сбор информации о группах пользователя"
|
||||
command: "groups {{ devops_user }}"
|
||||
register: user_groups
|
||||
changed_when: false
|
||||
|
||||
- name: "Сбор информации о SSH ключах"
|
||||
command: "wc -l {{ devops_ssh_authorized_keys }}"
|
||||
register: ssh_keys_count
|
||||
changed_when: false
|
||||
ignore_errors: true
|
||||
|
||||
- name: "Логирование статистики"
|
||||
debug:
|
||||
msg: |
|
||||
Статистика пользователя {{ devops_user }}:
|
||||
- Информация: {{ user_info.stdout }}
|
||||
- Группы: {{ user_groups.stdout }}
|
||||
- SSH ключей: {{ ssh_keys_count.stdout | default('неизвестно') }}
|
||||
@@ -1,35 +1,67 @@
|
||||
---
|
||||
# Метаданные роли devops
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
galaxy_info:
|
||||
author: Сергей Антропов
|
||||
description: Роль для создания пользователя devops с безопасным паролем и SSH доступом
|
||||
company: https://devops.org.ru
|
||||
license: MIT
|
||||
author: "Сергей Антропов"
|
||||
description: "Универсальная роль для создания пользователя devops с SSH ключами и sudo правами"
|
||||
company: "DevOpsLab"
|
||||
license: "MIT"
|
||||
min_ansible_version: "2.9"
|
||||
platforms:
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- focal
|
||||
- jammy
|
||||
- name: Debian
|
||||
versions:
|
||||
- bullseye
|
||||
- bookworm
|
||||
- name: EL
|
||||
- name: "EL"
|
||||
versions:
|
||||
- "7"
|
||||
- "8"
|
||||
- "9"
|
||||
- name: Rocky
|
||||
- name: "Ubuntu"
|
||||
versions:
|
||||
- "8.0"
|
||||
- "9.0"
|
||||
- "focal"
|
||||
- "jammy"
|
||||
- "noble"
|
||||
- name: "Debian"
|
||||
versions:
|
||||
- "stretch"
|
||||
- "buster"
|
||||
- "bullseye"
|
||||
- "bookworm"
|
||||
- name: "SLES"
|
||||
versions:
|
||||
- "15"
|
||||
- "15SP1"
|
||||
- "15SP2"
|
||||
- "15SP3"
|
||||
- "15SP4"
|
||||
- "15SP5"
|
||||
- name: "Alpine"
|
||||
versions:
|
||||
- "all"
|
||||
- name: "Astra Linux"
|
||||
versions:
|
||||
- "1.7"
|
||||
- "all"
|
||||
- name: "EL"
|
||||
versions:
|
||||
- "7"
|
||||
- "8"
|
||||
- "9"
|
||||
- name: "EL"
|
||||
versions:
|
||||
- "7"
|
||||
- "8"
|
||||
- "9"
|
||||
galaxy_tags:
|
||||
- devops
|
||||
- usermanagement
|
||||
- security
|
||||
- ssh
|
||||
- sudo
|
||||
- "user"
|
||||
- "devops"
|
||||
- "ssh"
|
||||
- "sudo"
|
||||
- "security"
|
||||
- "system"
|
||||
- "administration"
|
||||
- "automation"
|
||||
- "universal"
|
||||
- "crossplatform"
|
||||
|
||||
dependencies: []
|
||||
|
||||
collections: []
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
# Пример playbook для роли devops
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: "Создание пользователя devops с безопасным паролем и SSH доступом"
|
||||
hosts: all
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
vars:
|
||||
# Переменная для SSH ключа (должна быть передана из vault)
|
||||
devops_ssh_public_key: "{{ devops_ssh_keys.public_key }}"
|
||||
|
||||
roles:
|
||||
- devops
|
||||
|
||||
post_tasks:
|
||||
- name: "Проверка создания пользователя devops"
|
||||
command: "id {{ devops_user.name }}"
|
||||
register: user_check
|
||||
failed_when: user_check.rc != 0
|
||||
changed_when: false
|
||||
|
||||
- name: "Проверка SSH директории"
|
||||
stat:
|
||||
path: "{{ devops_ssh.ssh_dir }}"
|
||||
register: ssh_dir_check
|
||||
|
||||
- name: "Проверка authorized_keys"
|
||||
stat:
|
||||
path: "{{ devops_ssh.authorized_keys_file }}"
|
||||
register: auth_keys_check
|
||||
when: devops_ssh_public_key is defined
|
||||
|
||||
- name: "Проверка sudo прав"
|
||||
command: "sudo -l -U {{ devops_user.name }}"
|
||||
register: sudo_check
|
||||
become: true
|
||||
changed_when: false
|
||||
|
||||
- name: "Вывод результатов проверки"
|
||||
debug:
|
||||
msg: |
|
||||
Пользователь {{ devops_user.name }} создан: {{ user_check.rc == 0 }}
|
||||
SSH директория создана: {{ ssh_dir_check.stat.exists }}
|
||||
{% if devops_ssh_public_key is defined %}
|
||||
authorized_keys создан: {{ auth_keys_check.stat.exists }}
|
||||
{% endif %}
|
||||
Sudo права настроены: {{ sudo_check.rc == 0 }}
|
||||
@@ -1,111 +1,261 @@
|
||||
---
|
||||
# Задачи для роли devops
|
||||
# Основные задачи для роли devops
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
# Определение ОС и настройка переменных
|
||||
- name: "Определение ОС и настройка переменных"
|
||||
set_fact:
|
||||
devops_os_family: "{{ ansible_os_family | lower }}"
|
||||
devops_distribution: "{{ ansible_distribution | lower }}"
|
||||
devops_os_name: "{{ ansible_distribution | lower if ansible_distribution is defined else ansible_os_family | lower }}"
|
||||
when: ansible_os_family is defined
|
||||
- name: "🔍 Проверка входных параметров"
|
||||
tags: [devops, validation]
|
||||
block:
|
||||
- name: "Проверка наличия пароля пользователя devops"
|
||||
fail:
|
||||
msg: "Пароль пользователя devops не найден в vault/secrets.yml. Установите переменную vault_devops_password."
|
||||
when:
|
||||
- vault_file_path is defined
|
||||
- devops_password == ""
|
||||
|
||||
# Определение групп пользователя в зависимости от ОС
|
||||
- name: "Определение групп пользователя для {{ devops_os_name }}"
|
||||
set_fact:
|
||||
devops_user_groups: "{{ devops_os_config[devops_os_name].groups | default(devops_os_config[devops_os_family].groups | default(['sudo'])) }}"
|
||||
devops_sudo_file: "{{ devops_os_config[devops_os_name].sudo_file | default(devops_os_config[devops_os_family].sudo_file | default('/etc/sudoers.d/devops')) }}"
|
||||
devops_sudo_validate: "{{ devops_os_config[devops_os_name].sudo_validate | default(devops_os_config[devops_os_family].sudo_validate | default('visudo -cf %s')) }}"
|
||||
when: devops_os_name is defined
|
||||
- name: "Проверка наличия SSH публичного ключа"
|
||||
fail:
|
||||
msg: "SSH публичный ключ не найден в vault/secrets.yml. Установите переменную vault_devops_ssh_public_key."
|
||||
when:
|
||||
- vault_file_path is defined
|
||||
- devops_ssh_public_key == ""
|
||||
|
||||
# Проверка существования групп перед созданием пользователя
|
||||
- name: "Проверка существования групп"
|
||||
getent:
|
||||
database: "group"
|
||||
key: "{{ item }}"
|
||||
register: group_check
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
loop: "{{ devops_user_groups }}"
|
||||
when: devops_user_groups is defined
|
||||
- name: "Логирование начала выполнения роли"
|
||||
debug:
|
||||
msg: "Начинаем настройку пользователя {{ devops_user }} на {{ ansible_distribution }} {{ ansible_distribution_version }}"
|
||||
when: false
|
||||
|
||||
# Фильтрация только существующих групп
|
||||
- name: "Фильтрация существующих групп"
|
||||
set_fact:
|
||||
devops_existing_groups: "{{ group_check.results | selectattr('ansible_facts', 'defined') | map(attribute='item') | list }}"
|
||||
when: group_check is defined
|
||||
- name: "📦 Установка необходимых пакетов"
|
||||
tags: [devops, packages]
|
||||
block:
|
||||
- name: "Обновление кеша пакетов (Debian/Ubuntu)"
|
||||
apt:
|
||||
update_cache: yes
|
||||
cache_valid_time: 3600
|
||||
when: devops_os_family == "debian"
|
||||
|
||||
# Создание отсутствующих групп (если необходимо)
|
||||
- name: "Создание группы docker если она не существует"
|
||||
group:
|
||||
name: "docker"
|
||||
state: "present"
|
||||
become: true
|
||||
when:
|
||||
- "'docker' in devops_user_groups"
|
||||
- "'docker' not in (devops_existing_groups | default([]))"
|
||||
- name: "Установка необходимых пакетов"
|
||||
package:
|
||||
name: "{{ devops_packages_to_install }}"
|
||||
state: present
|
||||
become: true
|
||||
register: package_install_result
|
||||
|
||||
# Генерация безопасного пароля для пользователя devops
|
||||
- name: "Генерация безопасного пароля для пользователя devops"
|
||||
set_fact:
|
||||
devops_user_password: "{{ lookup('password', '/tmp/devops_password length=' + devops_password.length | string + ' chars=ascii_letters,digits,punctuation') }}"
|
||||
no_log: true
|
||||
- name: "Логирование установки пакетов"
|
||||
debug:
|
||||
msg: "Установлены пакеты: {{ package_install_result.changed_packages | default('нет изменений') }}"
|
||||
when: false
|
||||
|
||||
# Создание пользователя devops
|
||||
- name: "Создание пользователя devops"
|
||||
user:
|
||||
name: "{{ devops_user.name }}"
|
||||
home: "{{ devops_user.home }}"
|
||||
shell: "{{ devops_user.shell }}"
|
||||
groups: "{{ devops_existing_groups | default(devops_user_groups) }}"
|
||||
create_home: "{{ devops_user.create_home }}"
|
||||
state: "{{ devops_user.state }}"
|
||||
password: "{{ devops_user_password | password_hash('sha512') }}"
|
||||
become: true
|
||||
- name: "👤 Создание группы devops"
|
||||
tags: [devops, group]
|
||||
block:
|
||||
- name: "Проверка существования группы {{ devops_group }}"
|
||||
group:
|
||||
name: "{{ devops_group }}"
|
||||
state: present
|
||||
gid: "{{ devops_gid }}"
|
||||
become: true
|
||||
register: group_create_result
|
||||
|
||||
# Создание SSH директории для пользователя devops
|
||||
- name: "Создание SSH директории для пользователя devops"
|
||||
file:
|
||||
path: "{{ devops_ssh.ssh_dir }}"
|
||||
state: directory
|
||||
owner: "{{ devops_user.name }}"
|
||||
group: "{{ devops_user.name }}"
|
||||
mode: "{{ devops_ssh.ssh_dir_mode }}"
|
||||
become: true
|
||||
- name: "Логирование создания группы"
|
||||
debug:
|
||||
msg: "Группа {{ devops_group }} создана/существует"
|
||||
when: false
|
||||
|
||||
# Добавление SSH ключа в authorized_keys
|
||||
- name: "Добавление SSH ключа в authorized_keys"
|
||||
authorized_key:
|
||||
user: "{{ devops_user.name }}"
|
||||
key: "{{ devops_ssh_public_key }}"
|
||||
state: present
|
||||
manage_dir: false
|
||||
become: true
|
||||
when: devops_ssh_public_key is defined
|
||||
- name: "👥 Создание недостающих групп"
|
||||
tags: [devops, groups, additional]
|
||||
block:
|
||||
- name: "Создание группы wheel (если не существует)"
|
||||
group:
|
||||
name: wheel
|
||||
state: present
|
||||
become: true
|
||||
when: "'wheel' in devops_final_additional_groups"
|
||||
ignore_errors: true
|
||||
|
||||
# Настройка sudo для пользователя devops (без пароля)
|
||||
- name: "Настройка sudo для пользователя devops без пароля"
|
||||
lineinfile:
|
||||
path: "{{ devops_sudo_file }}"
|
||||
line: "{{ devops_user.name }} ALL=(ALL) NOPASSWD: {{ devops_sudo.commands }}"
|
||||
create: true
|
||||
mode: '0440'
|
||||
validate: "{{ devops_sudo_validate }}"
|
||||
become: true
|
||||
- name: "Создание группы systemd-journal (если не существует)"
|
||||
group:
|
||||
name: systemd-journal
|
||||
state: present
|
||||
become: true
|
||||
when: "'systemd-journal' in devops_final_additional_groups"
|
||||
ignore_errors: true
|
||||
|
||||
# Добавление пользователя в группу docker (если группа существует)
|
||||
- name: "Добавление пользователя в группу docker"
|
||||
user:
|
||||
name: "{{ devops_user.name }}"
|
||||
groups: "{{ devops_user_groups }}"
|
||||
append: true
|
||||
become: true
|
||||
when:
|
||||
- "'docker' in devops_user_groups"
|
||||
- "'docker' in (devops_existing_groups | default([]))"
|
||||
- name: "Создание группы docker (если не существует)"
|
||||
group:
|
||||
name: docker
|
||||
state: present
|
||||
become: true
|
||||
when: "'docker' in devops_final_additional_groups"
|
||||
ignore_errors: true
|
||||
|
||||
# Логирование успешного создания пользователя
|
||||
- name: "Логирование создания пользователя devops"
|
||||
debug:
|
||||
msg: "Пользователь {{ devops_user.name }} успешно создан с безопасным паролем и SSH доступом на {{ devops_os_name | default('неизвестная') }} ОС"
|
||||
- name: "👤 Создание пользователя devops"
|
||||
tags: [devops, user, password]
|
||||
block:
|
||||
- name: "Проверка существования пользователя {{ devops_user }}"
|
||||
user:
|
||||
name: "{{ devops_user }}"
|
||||
group: "{{ devops_group }}"
|
||||
uid: "{{ devops_uid }}"
|
||||
home: "{{ devops_home }}"
|
||||
shell: "{{ devops_shell }}"
|
||||
state: present
|
||||
create_home: "{{ devops_create_home }}"
|
||||
system: "{{ devops_system_user }}"
|
||||
groups: "{{ devops_final_additional_groups }}"
|
||||
append: yes
|
||||
become: true
|
||||
register: user_create_result
|
||||
|
||||
- name: "Установка пароля для пользователя {{ devops_user }}"
|
||||
user:
|
||||
name: "{{ devops_user }}"
|
||||
password: "{{ devops_password | password_hash('sha512') }}"
|
||||
update_password: always
|
||||
become: true
|
||||
no_log: true
|
||||
register: password_set_result
|
||||
|
||||
- name: "Логирование создания пользователя"
|
||||
debug:
|
||||
msg: "Пользователь {{ devops_user }} создан/обновлен с паролем"
|
||||
when: false
|
||||
|
||||
- name: "🔑 Настройка SSH ключей"
|
||||
tags: [devops, ssh, keys]
|
||||
block:
|
||||
- name: "Создание директории .ssh для пользователя {{ devops_user }}"
|
||||
file:
|
||||
path: "{{ devops_ssh_dir }}"
|
||||
state: directory
|
||||
owner: "{{ devops_user }}"
|
||||
group: "{{ devops_group }}"
|
||||
mode: "{{ devops_ssh_dir_mode }}"
|
||||
become: true
|
||||
|
||||
- name: "Добавление SSH публичного ключа в authorized_keys"
|
||||
authorized_key:
|
||||
user: "{{ devops_user }}"
|
||||
key: "{{ devops_ssh_public_key }}"
|
||||
state: present
|
||||
manage_dir: no
|
||||
become: true
|
||||
register: ssh_key_result
|
||||
when: devops_ssh_public_key != ""
|
||||
|
||||
- name: "Установка правильных прав на authorized_keys"
|
||||
file:
|
||||
path: "{{ devops_ssh_authorized_keys }}"
|
||||
owner: "{{ devops_user }}"
|
||||
group: "{{ devops_group }}"
|
||||
mode: "{{ devops_ssh_keys_mode }}"
|
||||
become: true
|
||||
when: devops_ssh_public_key != ""
|
||||
|
||||
- name: "Логирование настройки SSH"
|
||||
debug:
|
||||
msg: "SSH ключ для пользователя {{ devops_user }} настроен"
|
||||
when: false
|
||||
|
||||
- name: "🔐 Настройка sudo прав"
|
||||
tags: [devops, sudo, permissions]
|
||||
block:
|
||||
- name: "Создание файла sudoers для пользователя {{ devops_user }}"
|
||||
template:
|
||||
src: "{{ devops_sudoers_template }}"
|
||||
dest: "{{ devops_sudoers_file }}"
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0440'
|
||||
backup: yes
|
||||
become: true
|
||||
register: sudoers_result
|
||||
|
||||
- name: "Проверка синтаксиса sudoers файла"
|
||||
command: "visudo -c -f {{ devops_sudoers_file }}"
|
||||
become: true
|
||||
register: sudoers_check
|
||||
changed_when: false
|
||||
failed_when: sudoers_check.rc != 0
|
||||
|
||||
- name: "Логирование настройки sudo"
|
||||
debug:
|
||||
msg: "Sudo права для пользователя {{ devops_user }} настроены"
|
||||
when: false
|
||||
|
||||
- name: "🔧 Настройка дополнительных параметров"
|
||||
tags: [devops, config, additional]
|
||||
block:
|
||||
- name: "Установка umask для пользователя {{ devops_user }}"
|
||||
lineinfile:
|
||||
path: "{{ devops_home }}/.bashrc"
|
||||
line: "umask {{ devops_umask }}"
|
||||
owner: "{{ devops_user }}"
|
||||
group: "{{ devops_group }}"
|
||||
mode: '0644'
|
||||
create: yes
|
||||
backup: yes
|
||||
become: true
|
||||
|
||||
- name: "Создание SSH конфигурации для пользователя {{ devops_user }}"
|
||||
template:
|
||||
src: "devops_ssh_config.j2"
|
||||
dest: "{{ devops_ssh_config }}"
|
||||
owner: "{{ devops_user }}"
|
||||
group: "{{ devops_group }}"
|
||||
mode: "0600"
|
||||
backup: yes
|
||||
become: true
|
||||
|
||||
- name: "Логирование дополнительных настроек"
|
||||
debug:
|
||||
msg: "Дополнительные настройки для пользователя {{ devops_user }} применены"
|
||||
when: false
|
||||
|
||||
- name: "✅ Проверка настройки пользователя devops"
|
||||
when: devops_verify_user
|
||||
tags: [devops, verification, check]
|
||||
block:
|
||||
- name: "Проверка существования пользователя {{ devops_user }}"
|
||||
command: "id {{ devops_user }}"
|
||||
register: user_check
|
||||
changed_when: false
|
||||
failed_when: user_check.rc != 0
|
||||
|
||||
- name: "Проверка SSH ключа пользователя {{ devops_user }}"
|
||||
stat:
|
||||
path: "{{ devops_ssh_authorized_keys }}"
|
||||
register: ssh_key_check
|
||||
|
||||
- name: "Проверка sudo прав пользователя {{ devops_user }}"
|
||||
command: "sudo -l -U {{ devops_user }}"
|
||||
become: true
|
||||
register: sudo_check
|
||||
changed_when: false
|
||||
failed_when: sudo_check.rc != 0
|
||||
|
||||
- name: "Логирование результатов проверки"
|
||||
debug:
|
||||
msg: |
|
||||
Результаты проверки пользователя {{ devops_user }}:
|
||||
- Пользователь существует: {{ user_check.rc == 0 }}
|
||||
- SSH ключ настроен: {{ ssh_key_check.stat.exists }}
|
||||
- Sudo права настроены: {{ sudo_check.rc == 0 }}
|
||||
|
||||
- name: "📝 Уведомления о завершении"
|
||||
tags: [devops, notification, success]
|
||||
block:
|
||||
- name: "Уведомление об успешном завершении"
|
||||
debug:
|
||||
msg: "✅ Пользователь {{ devops_user }} успешно настроен на {{ ansible_hostname }}"
|
||||
when: devops_notify_on_success
|
||||
|
||||
- name: "Уведомление о настройке SSH"
|
||||
debug:
|
||||
msg: "🔑 SSH ключ для пользователя {{ devops_user }} настроен"
|
||||
when: devops_notify_on_success and devops_verify_ssh
|
||||
|
||||
- name: "Уведомление о настройке sudo"
|
||||
debug:
|
||||
msg: "🔐 Sudo права для пользователя {{ devops_user }} настроены"
|
||||
when: devops_notify_on_success and devops_verify_sudo
|
||||
79
roles/devops/templates/devops_ssh_config.j2
Normal file
79
roles/devops/templates/devops_ssh_config.j2
Normal file
@@ -0,0 +1,79 @@
|
||||
# SSH конфигурация для пользователя {{ devops_user }}
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
# Создан: {{ ansible_date_time.iso8601 }}
|
||||
|
||||
# Основные настройки SSH клиента
|
||||
Host *
|
||||
# Настройки безопасности
|
||||
StrictHostKeyChecking ask
|
||||
UserKnownHostsFile ~/.ssh/known_hosts
|
||||
IdentitiesOnly yes
|
||||
|
||||
# Настройки подключения
|
||||
ServerAliveInterval 60
|
||||
ServerAliveCountMax 3
|
||||
TCPKeepAlive yes
|
||||
|
||||
# Настройки сжатия
|
||||
Compression yes
|
||||
CompressionLevel 6
|
||||
|
||||
# Настройки шифрования
|
||||
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
|
||||
|
||||
# Настройки MAC
|
||||
MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-512
|
||||
|
||||
# Настройки KEX
|
||||
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
|
||||
|
||||
# Настройки аутентификации
|
||||
PreferredAuthentications publickey,password
|
||||
PubkeyAuthentication yes
|
||||
PasswordAuthentication yes
|
||||
|
||||
# Настройки портов
|
||||
Port 22
|
||||
|
||||
# Настройки таймаутов
|
||||
ConnectTimeout 30
|
||||
ConnectionAttempts 3
|
||||
|
||||
# Настройки логирования
|
||||
LogLevel INFO
|
||||
|
||||
# Настройки для X11 forwarding (если нужно)
|
||||
# ForwardX11 yes
|
||||
# ForwardX11Trusted yes
|
||||
|
||||
# Настройки для агента SSH
|
||||
ForwardAgent yes
|
||||
|
||||
# Настройки для туннелирования
|
||||
# LocalForward 8080 localhost:80
|
||||
# RemoteForward 9090 localhost:9090
|
||||
|
||||
# Специфичные настройки для разных хостов
|
||||
# Host production
|
||||
# HostName prod.example.com
|
||||
# User {{ devops_user }}
|
||||
# Port 2222
|
||||
# IdentityFile ~/.ssh/id_rsa_prod
|
||||
# StrictHostKeyChecking yes
|
||||
# UserKnownHostsFile ~/.ssh/known_hosts_prod
|
||||
|
||||
# Host staging
|
||||
# HostName staging.example.com
|
||||
# User {{ devops_user }}
|
||||
# Port 22
|
||||
# IdentityFile ~/.ssh/id_rsa_staging
|
||||
# StrictHostKeyChecking no
|
||||
|
||||
# Host development
|
||||
# HostName dev.example.com
|
||||
# User {{ devops_user }}
|
||||
# Port 22
|
||||
# IdentityFile ~/.ssh/id_rsa_dev
|
||||
# StrictHostKeyChecking no
|
||||
# UserKnownHostsFile /dev/null
|
||||
21
roles/devops/templates/devops_sudoers.j2
Normal file
21
roles/devops/templates/devops_sudoers.j2
Normal file
@@ -0,0 +1,21 @@
|
||||
# Sudoers файл для пользователя {{ devops_user }}
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
# Создан: {{ ansible_date_time.iso8601 }}
|
||||
|
||||
# Разрешить пользователю {{ devops_user }} выполнять все команды без ввода пароля
|
||||
{{ devops_user }} ALL=(ALL) NOPASSWD:ALL
|
||||
|
||||
# Дополнительные настройки безопасности
|
||||
# Разрешить выполнение команд только от определенных терминалов (опционально)
|
||||
# {{ devops_user }} ALL=(ALL) NOPASSWD:ALL, !/usr/bin/passwd, !/usr/bin/su
|
||||
|
||||
# Логирование всех команд sudo (опционально)
|
||||
# Defaults logfile=/var/log/sudo.log
|
||||
# Defaults log_input, log_output
|
||||
|
||||
# Настройки таймаута для sudo сессий (опционально)
|
||||
# Defaults timestamp_timeout=15
|
||||
|
||||
# Разрешить выполнение команд без подтверждения для определенных команд
|
||||
# {{ devops_user }} ALL=(ALL) NOPASSWD: /bin/systemctl, /usr/bin/docker, /usr/bin/kubectl
|
||||
@@ -1,90 +0,0 @@
|
||||
---
|
||||
# Тесты для роли devops
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: "Тестирование роли devops"
|
||||
hosts: all
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
vars:
|
||||
devops_ssh_public_key: "{{ devops_ssh_keys.public_key }}"
|
||||
|
||||
roles:
|
||||
- devops
|
||||
|
||||
post_tasks:
|
||||
# Тест 1: Проверка существования пользователя
|
||||
- name: "Проверка существования пользователя devops"
|
||||
command: "id {{ devops_user.name }}"
|
||||
register: user_exists
|
||||
failed_when: user_exists.rc != 0
|
||||
changed_when: false
|
||||
|
||||
# Тест 2: Проверка домашней директории
|
||||
- name: "Проверка домашней директории"
|
||||
stat:
|
||||
path: "{{ devops_user.home }}"
|
||||
register: home_dir
|
||||
failed_when: not home_dir.stat.exists
|
||||
|
||||
# Тест 3: Проверка SSH директории
|
||||
- name: "Проверка SSH директории"
|
||||
stat:
|
||||
path: "{{ devops_ssh.ssh_dir }}"
|
||||
register: ssh_dir
|
||||
failed_when: not ssh_dir.stat.exists
|
||||
|
||||
# Тест 4: Проверка authorized_keys (если SSH ключ передан)
|
||||
- name: "Проверка authorized_keys"
|
||||
stat:
|
||||
path: "{{ devops_ssh.authorized_keys_file }}"
|
||||
register: auth_keys
|
||||
failed_when: devops_ssh_public_key is defined and not auth_keys.stat.exists
|
||||
when: devops_ssh_public_key is defined
|
||||
|
||||
# Тест 5: Проверка sudo прав
|
||||
- name: "Проверка sudo прав"
|
||||
command: "sudo -l -U {{ devops_user.name }}"
|
||||
register: sudo_rights
|
||||
become: true
|
||||
failed_when: sudo_rights.rc != 0
|
||||
changed_when: false
|
||||
|
||||
# Тест 6: Проверка групп пользователя
|
||||
- name: "Проверка групп пользователя"
|
||||
command: "groups {{ devops_user.name }}"
|
||||
register: user_groups
|
||||
failed_when: user_groups.rc != 0
|
||||
changed_when: false
|
||||
|
||||
# Тест 7: Проверка прав на SSH директорию
|
||||
- name: "Проверка прав на SSH директорию"
|
||||
stat:
|
||||
path: "{{ devops_ssh.ssh_dir }}"
|
||||
register: ssh_dir_perms
|
||||
failed_when: ssh_dir_perms.stat.mode != "0" + devops_ssh.ssh_dir_mode
|
||||
|
||||
# Тест 8: Проверка shell пользователя
|
||||
- name: "Проверка shell пользователя"
|
||||
command: "getent passwd {{ devops_user.name }}"
|
||||
register: user_shell
|
||||
failed_when: user_shell.rc != 0
|
||||
changed_when: false
|
||||
|
||||
# Вывод результатов тестов
|
||||
- name: "Результаты тестов"
|
||||
debug:
|
||||
msg: |
|
||||
✅ Пользователь {{ devops_user.name }} создан
|
||||
✅ Домашняя директория {{ devops_user.home }} создана
|
||||
✅ SSH директория {{ devops_ssh.ssh_dir }} создана
|
||||
{% if devops_ssh_public_key is defined %}
|
||||
✅ authorized_keys настроен
|
||||
{% endif %}
|
||||
✅ Sudo права настроены
|
||||
✅ Группы пользователя: {{ user_groups.stdout }}
|
||||
✅ Shell пользователя: {{ user_shell.stdout.split(':')[-1] }}
|
||||
✅ ОС: {{ devops_os_name | default('неизвестная') }}
|
||||
✅ Группы для ОС: {{ devops_user_groups | default('не определены') }}
|
||||
@@ -1,25 +1,209 @@
|
||||
---
|
||||
# Переменные для роли devops
|
||||
# OS-специфичные переменные для роли devops
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
# Список пакетов, необходимых для роли
|
||||
devops_required_packages:
|
||||
- openssh-server
|
||||
- sudo
|
||||
- passwd
|
||||
# Определение семейства ОС
|
||||
devops_os_family: "{{ ansible_os_family | lower }}"
|
||||
devops_distribution: "{{ ansible_distribution | lower }}"
|
||||
devops_distribution_version: "{{ ansible_distribution_version | lower }}"
|
||||
|
||||
# Настройки безопасности для SSH
|
||||
devops_ssh_security:
|
||||
permit_root_login: "no"
|
||||
password_authentication: "yes"
|
||||
pubkey_authentication: "yes"
|
||||
authorized_keys_file: ".ssh/authorized_keys"
|
||||
# Настройки для разных семейств ОС
|
||||
devops_os_config:
|
||||
redhat:
|
||||
package_manager: "yum"
|
||||
user_management: "useradd"
|
||||
group_management: "groupadd"
|
||||
sudo_group: "wheel"
|
||||
additional_groups:
|
||||
- "wheel"
|
||||
- "docker"
|
||||
- "systemd-journal"
|
||||
packages:
|
||||
- "sudo"
|
||||
- "curl"
|
||||
- "wget"
|
||||
- "nano"
|
||||
- "mc"
|
||||
- "tar"
|
||||
- "gzip"
|
||||
services:
|
||||
- "sshd"
|
||||
sudoers_path: "/etc/sudoers.d"
|
||||
ssh_config_path: "/etc/ssh/sshd_config"
|
||||
debian:
|
||||
package_manager: "apt"
|
||||
user_management: "useradd"
|
||||
group_management: "groupadd"
|
||||
sudo_group: "sudo"
|
||||
additional_groups:
|
||||
- "sudo"
|
||||
- "docker"
|
||||
- "systemd-journal"
|
||||
packages:
|
||||
- "sudo"
|
||||
- "curl"
|
||||
- "wget"
|
||||
- "nano"
|
||||
- "mc"
|
||||
- "tar"
|
||||
- "gzip"
|
||||
services:
|
||||
- "ssh"
|
||||
sudoers_path: "/etc/sudoers.d"
|
||||
ssh_config_path: "/etc/ssh/sshd_config"
|
||||
suse:
|
||||
package_manager: "zypper"
|
||||
user_management: "useradd"
|
||||
group_management: "groupadd"
|
||||
sudo_group: "wheel"
|
||||
additional_groups:
|
||||
- "wheel"
|
||||
- "docker"
|
||||
- "systemd-journal"
|
||||
packages:
|
||||
- "sudo"
|
||||
- "curl"
|
||||
- "wget"
|
||||
- "nano"
|
||||
- "mc"
|
||||
- "tar"
|
||||
- "gzip"
|
||||
services:
|
||||
- "sshd"
|
||||
sudoers_path: "/etc/sudoers.d"
|
||||
ssh_config_path: "/etc/ssh/sshd_config"
|
||||
alpine:
|
||||
package_manager: "apk"
|
||||
user_management: "adduser"
|
||||
group_management: "addgroup"
|
||||
sudo_group: "wheel"
|
||||
additional_groups:
|
||||
- "wheel"
|
||||
- "docker"
|
||||
packages:
|
||||
- "sudo"
|
||||
- "openssh"
|
||||
- "curl"
|
||||
- "wget"
|
||||
- "mc"
|
||||
- "nano"
|
||||
- "tar"
|
||||
- "gzip"
|
||||
services:
|
||||
- "sshd"
|
||||
sudoers_path: "/etc/sudoers.d"
|
||||
ssh_config_path: "/etc/ssh/sshd_config"
|
||||
|
||||
# Настройки sudo для безопасности
|
||||
devops_sudo_security:
|
||||
requiretty: false
|
||||
visiblepw: false
|
||||
always_set_home: true
|
||||
env_reset: true
|
||||
env_keep: "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
|
||||
# Специфичные настройки для российских ОС
|
||||
devops_russian_os_config:
|
||||
astra:
|
||||
package_manager: "apt"
|
||||
user_management: "useradd"
|
||||
group_management: "groupadd"
|
||||
sudo_group: "sudo"
|
||||
additional_groups:
|
||||
- "sudo"
|
||||
- "docker"
|
||||
- "systemd-journal"
|
||||
packages:
|
||||
- "sudo"
|
||||
- "curl"
|
||||
- "wget"
|
||||
- "mc"
|
||||
- "nano"
|
||||
- "tar"
|
||||
- "gzip"
|
||||
services:
|
||||
- "ssh"
|
||||
sudoers_path: "/etc/sudoers.d"
|
||||
ssh_config_path: "/etc/ssh/sshd_config"
|
||||
redos:
|
||||
package_manager: "yum"
|
||||
user_management: "useradd"
|
||||
group_management: "groupadd"
|
||||
sudo_group: "wheel"
|
||||
additional_groups:
|
||||
- "wheel"
|
||||
- "docker"
|
||||
- "systemd-journal"
|
||||
packages:
|
||||
- "sudo"
|
||||
- "curl"
|
||||
- "wget"
|
||||
- "mc"
|
||||
- "nano"
|
||||
- "tar"
|
||||
- "gzip"
|
||||
services:
|
||||
- "sshd"
|
||||
sudoers_path: "/etc/sudoers.d"
|
||||
ssh_config_path: "/etc/ssh/sshd_config"
|
||||
alt:
|
||||
package_manager: "apt"
|
||||
user_management: "useradd"
|
||||
group_management: "groupadd"
|
||||
sudo_group: "sudo"
|
||||
additional_groups:
|
||||
- "sudo"
|
||||
- "docker"
|
||||
- "systemd-journal"
|
||||
packages:
|
||||
- "sudo"
|
||||
- "curl"
|
||||
- "wget"
|
||||
- "mc"
|
||||
- "nano"
|
||||
- "tar"
|
||||
- "gzip"
|
||||
services:
|
||||
- "ssh"
|
||||
sudoers_path: "/etc/sudoers.d"
|
||||
ssh_config_path: "/etc/ssh/sshd_config"
|
||||
|
||||
# Получение конфигурации для текущей ОС
|
||||
devops_current_config: "{{ devops_russian_os_config[devops_distribution] | default(devops_os_config[devops_os_family]) }}"
|
||||
|
||||
# Переменные для работы с пакетами
|
||||
devops_package_manager_cmd: "{{ devops_current_config.package_manager }}"
|
||||
devops_user_cmd: "{{ devops_current_config.user_management }}"
|
||||
devops_group_cmd: "{{ devops_current_config.group_management }}"
|
||||
devops_sudo_group: "{{ devops_current_config.sudo_group }}"
|
||||
devops_packages_to_install: "{{ devops_current_config.packages }}"
|
||||
devops_services_to_enable: "{{ devops_current_config.services }}"
|
||||
devops_sudoers_path: "{{ devops_current_config.sudoers_path }}"
|
||||
devops_ssh_config_path: "{{ devops_current_config.ssh_config_path }}"
|
||||
|
||||
# Дополнительные группы для пользователя
|
||||
devops_final_additional_groups: "{{ devops_current_config.additional_groups }}"
|
||||
|
||||
# Настройки для проверки системы
|
||||
devops_system_checks:
|
||||
- name: "check_user_exists"
|
||||
command: "id {{ devops_user }}"
|
||||
register: "devops_user_check"
|
||||
|
||||
- name: "check_ssh_key_exists"
|
||||
stat:
|
||||
path: "{{ devops_ssh_authorized_keys }}"
|
||||
register: "devops_ssh_key_check"
|
||||
|
||||
- name: "check_sudoers_exists"
|
||||
stat:
|
||||
path: "{{ devops_sudoers_file }}"
|
||||
register: "devops_sudoers_check"
|
||||
|
||||
# Настройки для логирования
|
||||
devops_log_config:
|
||||
level: "{{ devops_log_level }}"
|
||||
file: "{{ devops_log_file }}"
|
||||
format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
||||
max_size: "10MB"
|
||||
backup_count: 5
|
||||
|
||||
# Настройки для уведомлений
|
||||
devops_notification_config:
|
||||
success_message: "Пользователь {{ devops_user }} успешно настроен"
|
||||
failure_message: "Ошибка при настройке пользователя {{ devops_user }}"
|
||||
ssh_message: "SSH ключ для пользователя {{ devops_user }} настроен"
|
||||
sudo_message: "Sudo права для пользователя {{ devops_user }} настроены"
|
||||
|
||||
Reference in New Issue
Block a user