Files
DevOpsLab/docs/devops-role.md
Сергей Антропов 1b6db7445d docs: Обновление документации и исправление RHEL образа
- Обновлен 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 архитектуре
2025-10-27 20:27:45 +03:00

9.1 KiB
Raw Blame History

Роль 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 обеспечивает:

  1. Универсальность - работает на всех поддерживаемых ОС
  2. Автоматизацию - минимальные настройки для максимального результата
  3. Безопасность - правильная настройка SSH и sudo
  4. Гибкость - настройка под любые требования
  5. Надежность - проверенная конфигурация для всех платформ

Используйте роль devops для:

  • Настройки базовых пользователей
  • Установки SSH ключей
  • Конфигурации sudo прав
  • Подготовки инфраструктуры
  • Тестирования на разных ОС

Автор: Сергей Антропов
Сайт: https://devops.org.ru