- Обновлен README.md с новыми возможностями COD preset и роли devops - Добавлена документация по COD preset (docs/cod-preset.md) - Добавлена документация по роли devops (docs/devops-role.md) - Обновлена документация по ARM64 поддержке (docs/arm64-support.md) - Обновлены примеры использования (docs/examples.md) - Исправлен Dockerfile для RHEL с Python 3.11 из EPEL - Обновлен COD preset с 6 контейнерами (Ubuntu + Debian + Alt + Astra + CentOS + RHEL) - Улучшена роль devops с поддержкой российских ОС - Добавлен CHANGELOG.md с историей изменений - Все изменения протестированы на ARM64 архитектуре
326 lines
9.1 KiB
Markdown
326 lines
9.1 KiB
Markdown
# Роль devops - Универсальная настройка пользователей и SSH
|
||
|
||
**Автор:** Сергей Антропов
|
||
**Сайт:** https://devops.org.ru
|
||
**Версия:** 3.0.0
|
||
|
||
## 📋 Описание
|
||
|
||
Роль `devops` - это универсальная Ansible роль для настройки пользователей и SSH ключей на всех поддерживаемых операционных системах. Роль автоматически определяет тип ОС и применяет соответствующие конфигурации.
|
||
|
||
## 🎯 Возможности
|
||
|
||
- **Создание пользователя** `devops` с настройкой пароля
|
||
- **Установка SSH публичного ключа** для безопасного доступа
|
||
- **Настройка sudo прав** с гибкой конфигурацией
|
||
- **Автоматическое определение ОС** и применение соответствующих настроек
|
||
- **Поддержка российских ОС** (Alt Linux, Astra Linux, RedOS)
|
||
- **Универсальность** - одна роль работает на всех платформах
|
||
|
||
## 🖥️ Поддерживаемые ОС
|
||
|
||
### Зарубежные ОС
|
||
- **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
|
||
|
||
### Российские ОС
|
||
- **Alt Linux** 9, 10
|
||
- **Astra Linux** 1.7 (совместимый образ)
|
||
- **RedOS** 9 (совместимый образ)
|
||
|
||
## 🚀 Использование
|
||
|
||
### Базовое использование
|
||
|
||
```yaml
|
||
---
|
||
- name: Настройка пользователя devops
|
||
hosts: all
|
||
become: true
|
||
roles:
|
||
- devops
|
||
vars:
|
||
devops_user: "devops"
|
||
devops_password: "{{ vault_devops_password }}"
|
||
devops_ssh_public_key: "{{ vault_devops_ssh_public_key }}"
|
||
```
|
||
|
||
### С кастомными настройками
|
||
|
||
```yaml
|
||
---
|
||
- name: Настройка пользователя devops
|
||
hosts: all
|
||
become: true
|
||
roles:
|
||
- devops
|
||
vars:
|
||
devops_user: "admin"
|
||
devops_password: "{{ vault_admin_password }}"
|
||
devops_ssh_public_key: "{{ vault_admin_ssh_key }}"
|
||
devops_additional_groups: ["sudo", "docker", "wheel"]
|
||
devops_sudo_nopasswd: true
|
||
```
|
||
|
||
## ⚙️ Переменные
|
||
|
||
### Основные переменные
|
||
|
||
| Переменная | Описание | По умолчанию |
|
||
|------------|----------|--------------|
|
||
| `devops_user` | Имя пользователя | `devops` |
|
||
| `devops_password` | Пароль пользователя | `""` |
|
||
| `devops_ssh_public_key` | SSH публичный ключ | `""` |
|
||
| `devops_additional_groups` | Дополнительные группы | `["sudo"]` |
|
||
| `devops_sudo_nopasswd` | Sudo без пароля | `false` |
|
||
| `devops_shell` | Оболочка пользователя | `/bin/bash` |
|
||
|
||
### Vault переменные
|
||
|
||
| Переменная | Описание | Пример |
|
||
|------------|----------|--------|
|
||
| `vault_devops_password` | Пароль из vault | `"secure_password"` |
|
||
| `vault_devops_ssh_public_key` | SSH ключ из vault | `"ssh-rsa AAAAB3..."` |
|
||
|
||
## 🔧 Конфигурация по ОС
|
||
|
||
### Автоматическое определение
|
||
|
||
Роль автоматически определяет ОС и применяет соответствующие настройки:
|
||
|
||
```yaml
|
||
# Для Debian/Ubuntu
|
||
devops_debian_config:
|
||
package_manager: "apt"
|
||
sudo_group: "sudo"
|
||
additional_groups: ["sudo", "docker", "systemd-journal"]
|
||
|
||
# Для RHEL/CentOS
|
||
devops_rhel_config:
|
||
package_manager: "yum"
|
||
sudo_group: "wheel"
|
||
additional_groups: ["wheel", "docker", "systemd-journal"]
|
||
|
||
# Для российских ОС
|
||
devops_russian_os_config:
|
||
clearlinux: # Astra Linux
|
||
package_manager: "apt"
|
||
sudo_group: "sudo"
|
||
altlinux: # Alt Linux
|
||
package_manager: "apt"
|
||
sudo_group: "sudo"
|
||
```
|
||
|
||
## 📊 Примеры использования
|
||
|
||
### Тестирование с COD preset
|
||
|
||
```bash
|
||
# Тестирование на всех ОС
|
||
make role test cod
|
||
|
||
# Проверка результатов
|
||
docker exec -it ubuntu1 id devops
|
||
docker exec -it alt1 id devops
|
||
docker exec -it astra1 id devops
|
||
```
|
||
|
||
### Использование в других ролях
|
||
|
||
```yaml
|
||
---
|
||
- name: Настройка инфраструктуры
|
||
hosts: all
|
||
become: true
|
||
roles:
|
||
- devops # Сначала настраиваем пользователя
|
||
- docker # Затем устанавливаем Docker
|
||
- monitoring # И мониторинг
|
||
```
|
||
|
||
### Создание пользователей для разных целей
|
||
|
||
```yaml
|
||
---
|
||
- name: Настройка пользователей
|
||
hosts: all
|
||
become: true
|
||
tasks:
|
||
- name: Создание пользователя devops
|
||
include_role:
|
||
name: devops
|
||
vars:
|
||
devops_user: "devops"
|
||
devops_password: "{{ vault_devops_password }}"
|
||
devops_ssh_public_key: "{{ vault_devops_ssh_key }}"
|
||
|
||
- name: Создание пользователя admin
|
||
include_role:
|
||
name: devops
|
||
vars:
|
||
devops_user: "admin"
|
||
devops_password: "{{ vault_admin_password }}"
|
||
devops_ssh_public_key: "{{ vault_admin_ssh_key }}"
|
||
devops_additional_groups: ["sudo", "docker", "wheel"]
|
||
```
|
||
|
||
## 🔐 Безопасность
|
||
|
||
### SSH ключи
|
||
|
||
```yaml
|
||
# В vault/secrets.yml
|
||
vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..."
|
||
vault_devops_password: "secure_password_123"
|
||
```
|
||
|
||
### Sudo права
|
||
|
||
```yaml
|
||
# Базовые sudo права
|
||
devops_sudo_nopasswd: false
|
||
|
||
# Расширенные права
|
||
devops_additional_groups: ["sudo", "docker", "wheel", "systemd-journal"]
|
||
```
|
||
|
||
## 🐛 Диагностика
|
||
|
||
### Проверка пользователя
|
||
|
||
```bash
|
||
# Проверка существования пользователя
|
||
id devops
|
||
|
||
# Проверка групп
|
||
groups devops
|
||
|
||
# Проверка sudo прав
|
||
sudo -l -U devops
|
||
```
|
||
|
||
### Проверка SSH
|
||
|
||
```bash
|
||
# Проверка SSH ключей
|
||
cat /home/devops/.ssh/authorized_keys
|
||
|
||
# Проверка прав доступа
|
||
ls -la /home/devops/.ssh/
|
||
```
|
||
|
||
### Проверка конфигурации
|
||
|
||
```bash
|
||
# Проверка sudo конфигурации
|
||
cat /etc/sudoers.d/devops
|
||
|
||
# Проверка SSH конфигурации
|
||
grep -i "permitrootlogin" /etc/ssh/sshd_config
|
||
```
|
||
|
||
## 📚 Шаблоны
|
||
|
||
### SSH конфигурация
|
||
|
||
```jinja2
|
||
# templates/devops_ssh_config.j2
|
||
# SSH конфигурация для пользователя {{ devops_user }}
|
||
Match User {{ devops_user }}
|
||
PasswordAuthentication yes
|
||
PubkeyAuthentication yes
|
||
AuthorizedKeysFile .ssh/authorized_keys
|
||
```
|
||
|
||
### Sudo конфигурация
|
||
|
||
```jinja2
|
||
# templates/devops_sudoers.j2
|
||
# Sudo права для пользователя {{ devops_user }}
|
||
{{ devops_user }} ALL=(ALL) {% if devops_sudo_nopasswd %}NOPASSWD:{% endif %}ALL
|
||
```
|
||
|
||
## 🔄 Обновление
|
||
|
||
### Обновление роли
|
||
|
||
```bash
|
||
# Проверка синтаксиса
|
||
make role lint devops
|
||
|
||
# Тестирование
|
||
make role test cod
|
||
|
||
# Развертывание
|
||
make role deploy
|
||
```
|
||
|
||
### Обновление переменных
|
||
|
||
```bash
|
||
# Редактирование vault
|
||
make vault edit
|
||
# Имя файла: secrets
|
||
|
||
# Проверка vault
|
||
make vault check
|
||
```
|
||
|
||
## 📈 Лучшие практики
|
||
|
||
### 1. Используйте Vault для секретов
|
||
|
||
```yaml
|
||
# Хорошо
|
||
devops_password: "{{ vault_devops_password }}"
|
||
|
||
# Плохо
|
||
devops_password: "hardcoded_password"
|
||
```
|
||
|
||
### 2. Настраивайте группы по необходимости
|
||
|
||
```yaml
|
||
# Для Docker хостов
|
||
devops_additional_groups: ["sudo", "docker"]
|
||
|
||
# Для мониторинга
|
||
devops_additional_groups: ["sudo", "systemd-journal"]
|
||
```
|
||
|
||
### 3. Используйте условную логику
|
||
|
||
```yaml
|
||
# В вашем playbook
|
||
- name: Настройка devops пользователя
|
||
include_role:
|
||
name: devops
|
||
when: ansible_os_family in ['Debian', 'RedHat', 'Altlinux', 'Clearlinux']
|
||
```
|
||
|
||
## 🎉 Заключение
|
||
|
||
Роль `devops` обеспечивает:
|
||
|
||
1. **Универсальность** - работает на всех поддерживаемых ОС
|
||
2. **Автоматизацию** - минимальные настройки для максимального результата
|
||
3. **Безопасность** - правильная настройка SSH и sudo
|
||
4. **Гибкость** - настройка под любые требования
|
||
5. **Надежность** - проверенная конфигурация для всех платформ
|
||
|
||
Используйте роль `devops` для:
|
||
- Настройки базовых пользователей
|
||
- Установки SSH ключей
|
||
- Конфигурации sudo прав
|
||
- Подготовки инфраструктуры
|
||
- Тестирования на разных ОС
|
||
|
||
---
|
||
|
||
**Автор:** Сергей Антропов
|
||
**Сайт:** https://devops.org.ru
|