- Обновлен 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
 |