Роль 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 converge.yml --tags "user,group"
# Только настройка SSH
ansible-playbook -i inventory converge.yml --tags "ssh,keys"
# Только настройка sudo
ansible-playbook -i inventory converge.yml --tags "sudo,permissions"
# Пропустить проверки
ansible-playbook -i inventory converge.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
Поддержка
- Сайт: https://devops.org.ru
- Автор: Сергей Антропов