feat: добавлена роль devops и оптимизирована структура проекта
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled

- Создана роль devops с функциями:
  * Создание пользователя devops
  * Генерация безопасного пароля (30 символов)
  * Настройка SSH доступа по ключу
  * Добавление в sudoers без пароля
  * Полная документация и тесты

- Оптимизирована структура проекта:
  * Удален Dockerfile из корня (сборка из dockerfiles/ansible-controller)
  * Заменены внешние образы на локальные ansible-controller
  * Обновлен Makefile для использования локальных образов
  * Зашифрован vault/secrets.yml с помощью ansible-vault

- Добавлена документация:
  * Руководство по работе с vault (docs/vault-guide.md)
  * Подробная документация роли devops
  * Примеры использования и тесты

- Улучшена безопасность:
  * Все секреты зашифрованы
  * Обновлен .gitignore для vault файлов
  * Добавлены инструкции по безопасности
This commit is contained in:
Сергей Антропов
2025-10-25 20:06:08 +03:00
parent 5093d38c06
commit 30b69ce0ec
20 changed files with 997 additions and 132 deletions

167
roles/devops/README.md Normal file
View File

@@ -0,0 +1,167 @@
# Роль devops
Роль для создания пользователя devops с безопасным паролем, SSH доступом и правами sudo.
## Автор
Сергей Антропов
Сайт: https://devops.org.ru
## Описание
Эта роль выполняет следующие функции:
1. Создание пользователя `devops`
2. Генерация безопасного пароля длиной 30 символов
3. Назначение пароля пользователю
4. Добавление пользователя в sudoers с правами выполнения команд без пароля
5. Настройка SSH доступа через публичный ключ
## Требования
- Ansible >= 2.9
- Python >= 3.6
- Права root/sudo для выполнения задач
## Переменные
### Основные переменные (defaults/main.yml)
```yaml
# Настройки пользователя devops
devops_user:
name: "devops"
home: "/home/devops"
shell: "/bin/bash"
groups: ["sudo", "docker"]
create_home: true
state: "present"
# Настройки пароля
devops_password:
length: 30
special_chars: true
min_special: 4
min_upper: 4
min_lower: 4
min_digits: 4
# Настройки sudo
devops_sudo:
nopasswd: true
commands: "ALL"
# SSH настройки
devops_ssh:
authorized_keys_file: "/home/devops/.ssh/authorized_keys"
ssh_dir: "/home/devops/.ssh"
ssh_dir_mode: "0700"
authorized_keys_mode: "0600"
```
### Переменные из vault/secrets.yml
```yaml
# SSH ключи для пользователя devops
devops_ssh_keys:
public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7vbqajDhA... devops@example.com"
```
## Использование
### Базовое использование
```yaml
- hosts: all
become: true
roles:
- devops
```
### С передачей SSH ключа
```yaml
- hosts: all
become: true
vars:
devops_ssh_public_key: "{{ devops_ssh_keys.public_key }}"
roles:
- devops
```
### С кастомными настройками
```yaml
- hosts: all
become: true
vars:
devops_user:
name: "mydevops"
home: "/home/mydevops"
devops_password:
length: 40
roles:
- devops
```
## Безопасность
- Пароль генерируется автоматически с использованием криптографически стойкого алгоритма
- Пароль содержит минимум 4 символа каждого типа (специальные, заглавные, строчные, цифры)
- SSH ключи добавляются в authorized_keys для безопасного доступа
- Пользователь добавляется в sudoers с правами NOPASSWD для удобства использования
## Поддерживаемые ОС
- Ubuntu (focal, jammy)
- Debian (bullseye, bookworm)
- RHEL (8, 9)
- CentOS (8, 9)
- Rocky Linux (8, 9)
- AlmaLinux (8, 9)
## Теги
- `devops` - основная функциональность
- `user-management` - управление пользователями
- `security` - настройки безопасности
- `ssh` - SSH конфигурация
- `sudo` - настройки sudo
## Примеры
### Создание пользователя с SSH ключом
```bash
ansible-playbook -i inventory/hosts.ini playbook.yml \
--ask-vault-pass \
-e "devops_ssh_public_key={{ devops_ssh_keys.public_key }}"
```
### Проверка создания пользователя
```bash
ansible all -i inventory/hosts.ini -m shell -a "id devops"
```
## Troubleshooting
### Проблема с sudoers
Если возникают проблемы с sudoers, проверьте синтаксис:
```bash
sudo visudo -c
```
### Проблема с SSH
Проверьте права доступа к SSH директории:
```bash
ls -la /home/devops/.ssh/
```
Должны быть права 700 для директории и 600 для authorized_keys.
## Лицензия
MIT