- Переименован пресет geop.yml в cod.yml - Обновлены все группы с geop на cod - Добавлена поддержка ARM64 для Astra Linux и RedOS - Создан Dockerfile.arm64 для RedOS с исправлением конфликтов пакетов - Улучшены разделители в логах Molecule - Зашифрован файл vault/secrets.yml - Обновлена роль devops с поддержкой vault - Добавлены шаблоны для SSH и sudoers конфигураций
248 lines
8.3 KiB
Markdown
248 lines
8.3 KiB
Markdown
# Роль devops
|
||
|
||
Универсальная роль для создания пользователя devops с SSH ключами и sudo правами на всех поддерживаемых операционных системах.
|
||
|
||
## Автор
|
||
|
||
**Сергей Антропов**
|
||
Сайт: https://devops.org.ru
|
||
|
||
## Описание
|
||
|
||
Роль `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
|
||
- Доступ к vault с секретами
|
||
- Права sudo/root на целевых хостах
|
||
|
||
## Переменные
|
||
|
||
### Основные переменные
|
||
|
||
| Переменная | По умолчанию | Описание |
|
||
|------------|--------------|----------|
|
||
| `devops_user` | `devops` | Имя пользователя |
|
||
| `devops_group` | `devops` | Основная группа пользователя |
|
||
| `devops_home` | `/home/devops` | Домашняя директория |
|
||
| `devops_shell` | `/bin/bash` | Оболочка пользователя |
|
||
| `devops_uid` | `1001` | UID пользователя |
|
||
| `devops_gid` | `1001` | GID группы |
|
||
|
||
### Переменные из vault
|
||
|
||
| Переменная | Описание | Обязательная |
|
||
|------------|----------|--------------|
|
||
| `vault_devops_password` | Пароль пользователя (30 символов) | ✅ |
|
||
| `vault_devops_ssh_public_key` | SSH публичный ключ | ✅ |
|
||
|
||
### Настройки sudo
|
||
|
||
| Переменная | По умолчанию | Описание |
|
||
|------------|--------------|----------|
|
||
| `devops_sudo_nopasswd` | `true` | Выполнение sudo без пароля |
|
||
| `devops_sudo_commands` | `ALL` | Разрешенные команды |
|
||
| `devops_sudoers_file` | `/etc/sudoers.d/devops` | Путь к файлу sudoers |
|
||
|
||
### Настройки 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: yes
|
||
roles:
|
||
- devops
|
||
vars:
|
||
vault_devops_password: "your-30-char-password-here"
|
||
vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..."
|
||
```
|
||
|
||
### С кастомными настройками
|
||
|
||
```yaml
|
||
- hosts: all
|
||
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..."
|
||
```
|
||
|
||
### С отключенными проверками
|
||
|
||
```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` - все задачи роли
|
||
- `validation` - проверка входных параметров
|
||
- `packages` - установка пакетов
|
||
- `group` - создание группы
|
||
- `user` - создание пользователя
|
||
- `password` - установка пароля
|
||
- `ssh` - настройка SSH
|
||
- `keys` - настройка SSH ключей
|
||
- `sudo` - настройка sudo прав
|
||
- `permissions` - настройка прав доступа
|
||
- `config` - дополнительная конфигурация
|
||
- `verification` - проверка настройки
|
||
- `notification` - уведомления
|
||
|
||
### Примеры использования тегов
|
||
|
||
```bash
|
||
# Только создание пользователя и группы
|
||
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 -m debug -a "msg={{ 'your-password' | password_hash('sha512') }}"
|
||
```
|
||
|
||
### Проблемы с SSH
|
||
|
||
```bash
|
||
# Проверка SSH конфигурации
|
||
sudo sshd -t
|
||
|
||
# Проверка прав доступа
|
||
ls -la /home/devops/.ssh/
|
||
```
|
||
|
||
### Проблемы с sudo
|
||
|
||
```bash
|
||
# Проверка sudoers файла
|
||
sudo visudo -c -f /etc/sudoers.d/devops
|
||
|
||
# Тест sudo прав
|
||
sudo -l -U devops
|
||
```
|
||
|
||
## Лицензия
|
||
|
||
MIT
|
||
|
||
## Поддержка
|
||
|
||
- Сайт: https://devops.org.ru
|
||
- Автор: Сергей Антропов |