# Роль 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']` | Дополнительные группы | ## Примеры использования ### Базовое использование ```yaml - hosts: all become: yes roles: - devops vars: vault_devops_password: "your-30-char-password-here" vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..." ``` ### С кастомными настройками ```yaml - 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..." ``` ### С отключенными проверками ```yaml - 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` - уведомления ### Примеры использования тегов ```bash # Только создание пользователя и группы 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 ## Устранение неполадок ### Проблемы с паролем ```bash # Проверка хеша пароля ansible all -m debug -a "msg={{ 'your-password' | password_hash('sha512') }}" ``` ### Проблемы с SSH ```bash # Проверка SSH конфигурации sudo sshd -t # Проверка прав доступа ls -la /home/devops/.ssh/ ``` ### Проблемы с sudo ```bash # Проверка sudoers файла sudo visudo -c -f /etc/sudoers.d/devops # Тест sudo прав sudo -l -U devops ``` ## Лицензия MIT ## Поддержка - Сайт: https://devops.org.ru - Автор: Сергей Антропов