Files
DevOpsLab/roles/devops

Роль 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'] Дополнительные группы

Примеры использования

Базовое использование

- hosts: all
  become: yes
  roles:
    - devops
  vars:
    vault_devops_password: "your-30-char-password-here"
    vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..."

С кастомными настройками

- 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..."

С отключенными проверками

- 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 - уведомления

Примеры использования тегов

# Только создание пользователя и группы
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

Устранение неполадок

Проблемы с паролем

# Проверка хеша пароля
ansible all -m debug -a "msg={{ 'your-password' | password_hash('sha512') }}"

Проблемы с SSH

# Проверка SSH конфигурации
sudo sshd -t

# Проверка прав доступа
ls -la /home/devops/.ssh/

Проблемы с sudo

# Проверка sudoers файла
sudo visudo -c -f /etc/sudoers.d/devops

# Тест sudo прав
sudo -l -U devops

Лицензия

MIT

Поддержка