- Обновлен 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 архитектуре
		
			
				
	
	
	
		
			9.1 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			9.1 KiB
		
	
	
	
	
	
	
	
Роль 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 (совместимый образ)
🚀 Использование
Базовое использование
---
- 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 }}"
С кастомными настройками
---
- 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..." | 
🔧 Конфигурация по ОС
Автоматическое определение
Роль автоматически определяет ОС и применяет соответствующие настройки:
# Для 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
# Тестирование на всех ОС
make role test cod
# Проверка результатов
docker exec -it ubuntu1 id devops
docker exec -it alt1 id devops
docker exec -it astra1 id devops
Использование в других ролях
---
- name: Настройка инфраструктуры
  hosts: all
  become: true
  roles:
    - devops  # Сначала настраиваем пользователя
    - docker  # Затем устанавливаем Docker
    - monitoring  # И мониторинг
Создание пользователей для разных целей
---
- 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 ключи
# В vault/secrets.yml
vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..."
vault_devops_password: "secure_password_123"
Sudo права
# Базовые sudo права
devops_sudo_nopasswd: false
# Расширенные права
devops_additional_groups: ["sudo", "docker", "wheel", "systemd-journal"]
🐛 Диагностика
Проверка пользователя
# Проверка существования пользователя
id devops
# Проверка групп
groups devops
# Проверка sudo прав
sudo -l -U devops
Проверка SSH
# Проверка SSH ключей
cat /home/devops/.ssh/authorized_keys
# Проверка прав доступа
ls -la /home/devops/.ssh/
Проверка конфигурации
# Проверка sudo конфигурации
cat /etc/sudoers.d/devops
# Проверка SSH конфигурации
grep -i "permitrootlogin" /etc/ssh/sshd_config
📚 Шаблоны
SSH конфигурация
# templates/devops_ssh_config.j2
# SSH конфигурация для пользователя {{ devops_user }}
Match User {{ devops_user }}
    PasswordAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
Sudo конфигурация
# templates/devops_sudoers.j2
# Sudo права для пользователя {{ devops_user }}
{{ devops_user }} ALL=(ALL) {% if devops_sudo_nopasswd %}NOPASSWD:{% endif %}ALL
🔄 Обновление
Обновление роли
# Проверка синтаксиса
make role lint devops
# Тестирование
make role test cod
# Развертывание
make role deploy
Обновление переменных
# Редактирование vault
make vault edit
# Имя файла: secrets
# Проверка vault
make vault check
📈 Лучшие практики
1. Используйте Vault для секретов
# Хорошо
devops_password: "{{ vault_devops_password }}"
# Плохо
devops_password: "hardcoded_password"
2. Настраивайте группы по необходимости
# Для Docker хостов
devops_additional_groups: ["sudo", "docker"]
# Для мониторинга
devops_additional_groups: ["sudo", "systemd-journal"]
3. Используйте условную логику
# В вашем playbook
- name: Настройка devops пользователя
  include_role:
    name: devops
  when: ansible_os_family in ['Debian', 'RedHat', 'Altlinux', 'Clearlinux']
🎉 Заключение
Роль devops обеспечивает:
- Универсальность - работает на всех поддерживаемых ОС
- Автоматизацию - минимальные настройки для максимального результата
- Безопасность - правильная настройка SSH и sudo
- Гибкость - настройка под любые требования
- Надежность - проверенная конфигурация для всех платформ
Используйте роль devops для:
- Настройки базовых пользователей
- Установки SSH ключей
- Конфигурации sudo прав
- Подготовки инфраструктуры
- Тестирования на разных ОС
Автор: Сергей Антропов
Сайт: https://devops.org.ru