248 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Роль 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 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
 | ||
| 
 | ||
| ## Устранение неполадок
 | ||
| 
 | ||
| ### Проблемы с паролем
 | ||
| 
 | ||
| ```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
 | ||
| - Автор: Сергей Антропов |