alt_vkr/readme.md

339 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Выпускная квалификационная работа по курсу "Системное и сетевое администрирование ОС Альт"
## Тема: Автоматизация развертывания служб каталога Active Directory
Разворачивается следующая конфигурация:
* Основной контроллер домена (Альт Сервер)
* Резервный контроллер домена (Альт Сервер)
* Файловый сервер (Альт Сервер) в составе домена (службы NFS и SMB)
* Клиентский узел 1 (Альт Рабочая станция)
* Клиентский узел 2 (Альт Рабочая станция К).
Тестируются: определение расположения служб домена, создание доменного пользователя, получение билета средствами Kerberos, доступность NFS и SMB- служб сервера при kerberos-аутентификации, успешное проведение репликации между контроллерами. Графический вход доменных пользователей на клиентские узлы.
Эмулируется сбой одного из контроллеров, проверяется работоспособность окружения с оставшимся контроллером.
Возможно успешность применения групповых политик (включение/выключение определенной службы, убедиться что служба выключилась)
***
- [Выпускная квалификационная работа по курсу "Системное и сетевое администрирование ОС Альт"](#выпускная-квалификационная-работа-по-курсу-системное-и-сетевое-администрирование-ос-альт)
- [Тема: Автоматизация развертывания служб каталога Active Directory](#тема-автоматизация-развертывания-служб-каталога-active-directory)
- [Описание стенда](#описание-стенда)
- [Предварительная настройка](#предварительная-настройка)
- [Подготовка шаблона Альт Сервер](#подготовка-шаблона-альт-сервер)
- [Подготовка шаблона Альт Рабочая станция и Альт Рабочая станция К](#подготовка-шаблона-альт-рабочая-станция-и-альт-рабочая-станция-к)
- [Разворачивание группировки виртуальных машин](#разворачивание-группировки-виртуальных-машин)
- [Подготовка первого контроллера домена](#подготовка-первого-контроллера-домена)
- [Подготовка второго контроллера домена](#подготовка-второго-контроллера-домена)
- [Добавление DNS записи о втором контроллере на первый](#добавление-dns-записи-о-втором-контроллере-на-первый)
- [Разворачивание второго контроллера домена](#разворачивание-второго-контроллера-домена)
- [Репликация между контроллерами](#репликация-между-контроллерами)
- [Создание пользователей контроллера домена](#создание-пользователей-контроллера-домена)
- [Добавление компьютеров в домен](#добавление-компьютеров-в-домен)
- [Разворачивание файлового сервера](#разворачивание-файлового-сервера)
### Описание стенда
В основе стенда используется узел с установленной системой Альт Сервер виртуализации 10.1, в качестве гипервизора - решение PVE.
![Схема стенда](img/stand.png)
Рисунок 1 - Схема стенда
Для доступа к системе виртуализации и выполнения задач автоматизированной настройки и запуска скриптов используется узел с ОС Альт Рабочая станция 10.1 `altcl (10.1.1.20)`.
### Предварительная настройка
Для подготовки окружения будет использован Ansible, запускаться задания будут с узла `altcl (10.1.1.20)`.
Для работы Ansible с гипервизором PVE, написан соответствующий модуль `proxmox_kvm`. В свою очередь, для работы модуля `proxmox_kvm` на узле виртуализации, необходимо установить пакеты `requests` и `proxmoxer`. В репозитории Альт это пакеты `python3-module-proxmoxer`, `python3-module-requests`.
Т. к. модуль `proxmox_kvm` разработан сообществом, на узле `altcl (10.1.1.20)` необходимо установить поддержку community модулей ansible командой
```bash
ansible-galaxy collection install community.general
```
### Подготовка шаблона Альт Сервер
Шаблон будет подготовлен вручную — конвертирован из виртуальной машины, которая будет предварительно настроена.
Виртуальная машина имеет следующие характеристики:
* ОЗУ: 2 Гб
* ЦПУ: 2
* Диск: 32 Гб
* Диск CloudInit
остальные значения устанавливаются по-умолчанию. В качестве ОС используется Альт Сервер 10.1. При установке ОС используется профиль `Минимальная установка` с отмеченным пунктом `NetworkManager`, т. к. он необходим для работы CloudInit.
![Рисунок 2 - Выбор компонентов ОС](img/01.png)
Рисунок 2 - Выбор компонентов ОС
После установки операционной системы необходимо выполнить обновление и установку дополнительных компонентов:
* обновление пакетов и ядра операционной системы
```bash
apt-get update && apt-get dist-upgrade -y && update-kernel -y
```
* установка дополнительных необязательных пакетов
```bash
apt-get install -y qemu-guest-agent mc tmux htop tree
```
* пакеты для работы CloudInit
```bash
apt-get install -y cloud-init cloud-init-config-etcnet
apt-get install -y cloud-utils-growpart cloud-utils
```
* после установки пакетов CloudInit необходимо добавить соответствующие службы в автозагрузку
```bash
systemctl enable cloud-init-local
systemctl enable cloud-init
systemctl enable cloud-config
systemctl enable cloud-final
```
Виртуальная машина готова, её необходимо выключить и конвертировать в шаблон.
### Подготовка шаблона Альт Рабочая станция и Альт Рабочая станция К
Как и шаблон для сервера, шаблоны виртуальных машин Рабочая станция и Рабочая станция К также подготовлены вручную — конвертированы из соответствующих, предварительно настроенных виртуальных машин.
Виртуальные машины имеют следующие характеристики:
* ОЗУ: 2 Гб
* ЦПУ: 2
* Диск: 32 Гб
* Диск CloudInit
остальные значения устанавливаются по-умолчанию. В качестве ОС используются Альт Рабочая станция 10.1 и Альт Рабочая станция К 10.1 соответственно. При установке операционной системы задаются значения, предлагаемые установщиком.
После установки операционной системы необходимо выполнить обновление и установку дополнительных компонентов:
* включение SSH сервера, т.к. в Рабочей станции он отключен
```bash
systemctl enable --now sshd
```
Следующие шаги идентичны тем, которые выполнялись при настройке сервера:
* обновление пакетов и ядра операционной системы
```bash
apt-get update && apt-get dist-upgrade -y && update-kernel -y
```
* установка дополнительных необязательных пакетов
```bash
apt-get install -y qemu-guest-agent mc tmux htop tree
```
* пакеты для работы CloudInit
```bash
apt-get install -y cloud-init cloud-init-config-etcnet
apt-get install -y cloud-utils-growpart cloud-utils
```
* после установки пакетов CloudInit необходимо добавить соответствующие службы в автозагрузку
```bash
systemctl enable cloud-init-local
systemctl enable cloud-init
systemctl enable cloud-config
systemctl enable cloud-final
```
Виртуальные машины готовы, их необходимо выключить и конвертировать в шаблон.
### Разворачивание группировки виртуальных машин
Для автоматизированного развёртывания виртуальных машин на гипервизор PVE используется ansible роль `deploy_vms_role.yml`.
Стоит обратить внимание, что при создании виртуальных машин из шаблонов, с помощью механизма CloudInit задаются уникальные IP адреса, имена хостов, а также пароль пользователя root. Кроме этого, также с помощью CloudInit в виртуальные машины копируется ssh ключ. Т.к. на этапе развёртывания CloudInit может взаимодействовать только с файловой системой гипервизора, ssh ключ, который копируется в виртуальные машины, необходимо заранее подготовить и сохранить в файловой системе гипервизора `/root/.ssh/` с именем, указанным в переменной `key_name`
Процесс создания группировки виртуальных машин запускается из директории `ansible` с помощью команды:
```bash
ansible-playbook 01_deploy_vms_role.yml
```
В результате выполнения команды в гипервизоре PVE будут созданы 5 виртуальных машин в соответствии со схемой стенда:
1. `alts1` - Основной контроллер домена
2. `alts2` - Резервный контроллер
3. `alts3` - Файловый сервер
4. `ws` - Клиент, Рабочая станция
5. `kws` - Клиент, Рабочая станция К
### Подготовка первого контроллера домена
Для развёртывания первого контроллера домена используется ansible роль - Разворачивание первого контроллера домена.
Запуск выполняется из директории `ansible` с помощью команды:
```bash
ansible-playbook 02_deploy_dc1_role.yml
```
В этой роли выполняются 2 задачи: развёртывание контроллера и проверка развёртывания.
Задача развёртывания контроллера разделена на подзадачи (таски):
* **Проверка соответствия ОС** - таск выполнится при условии запуска на узле с ОС Альт, в противном случае будет выведено соответствующее сообщение и выполнение прервётся;
* **Проверка наличия развёрнутого домена на узле** - если на узле уже развёрнут контроллер домена, выполнение прервётся;
* **Обновление системы** - выполняется обновление системы до актуального состояния;
* **Назначение корректного имени узла** - устанавливается имя узла в соответствии с указанным в переменной в файле `mutable_vars.yml`;
* **Установка пакетов** - выполняется установка пакетов, необходимых для работы контроллера домена. Список пакетов указан в файле `vars.yml`;
* **Конфигурация NTP** - режим работы NTP переключается в значение `server`;
* **Включение службы синхронизации времени chrony** - включается и добавляется в автозагрузку служба `chrony`;
* **Отключение служб, которые будут конфликтовать с контроллером** - для корректной работы `samba` необходимо отключить службы которые будут конфликтовать. Перечень этих служб указан в переменных в файле `vars.yml`;
* **Удалить старую конфигурацию Samba** - удаляется старая конфигурация Samba, если таковая была;
* **Создать каталог для хранения групповых политик** - создаётся каталог для хранения групповых политик;
* **Настройка резолвера на 127.0.0.1** - значение резолвера устанавливается локальный адрес;
* **Обновление конфигурации резолвера** - выполняется обновление настроек резолвера;
* **Разворачивание первого контроллера домена** - выполняется непосредственное разворачивание контроллера домена;
* **Включение службы `samba`** - после развёртывания контроллера, запускается служба;
* **Копирование конфигурации Kerberos** - копируется созданная при развёртывании конфигурация Kerberos.
После развёртывания запускается задача проверки корректности работы контроллера домена. Эта задача, в свою очередь, разеделена на подзадачи:
* **Проверка наличия развёрнутого домена на узле** - если служба `samba` не работает на контроллере, выполнение задачи будет прервано;
* **Информация о домене** - на экран выводится краткая информация о домене;
* **Получение настройки резолвера** - выполняется проверка корректности настройки резолвера - указание на самого себя;
* **Записи служб DNS. Kerberos** - выполняется проверка работы DNS, записи служб Kerberos;
* **Записи служб DNS. LDAP** - выполняется проверка работы DNS, записи служб LDAP;
* **Записи служб DNS. A запись** - выполняется проверка работы DNS, наличие основной записи (А) о контроллере;
* **Проверка возможности авторизации Kerberos** - попытка авторизации на контроллере домена;
* **Текущие билеты Kerberos** - вывод текущего билета Kerberos после авторизации.
### Подготовка второго контроллера домена
Для подготовки второго контроллера домена используются:
* ансибл плэйбук - Добавление DNS записи о втором контроллере на первый
* ансибл роль - Разворачивание второго контроллера домена
* ансибл плэйбук - Репликация между контроллерами
#### Добавление DNS записи о втором контроллере на первый
В этой задаче выполняются следующие действия:
* **Проверка соответствия ОС** - задача будет выполнятся только на ОС семейства Альт;
* **Добавление DNS записи** - на первом контроллере домена в DNS добавляется А запись о втором контроллере домена.
Запуск выполняется из директории `ansible` с помощью команды:
```bash
ansible-playbook 03_add_dns_record.yml
```
#### Разворачивание второго контроллера домена
В роли выполняются следующие задачи:
* Развёртывание второго контроллера домена
* Проверка корректности развёртывания второго контроллера домена.
В этих задачах выполняются аналогичные подзадачи тем, которые выполнялись при развёртывании первого контроллера домена, за исключением указания резолвера. На втором контроллере домена в качестве резолвера указывается адрес первого контроллера.
Запуск выполняется из директории `ansible` с помощью команды:
```bash
ansible-playbook 04_deploy_dc2_role.yml
```
#### Репликация между контроллерами
В задаче выполняются действия:
* **Проверка соответствия ОС** - задача будет выполнятся только на ОС семейства Альт;
* **Проверка наличия развёрнутого домена** - если домен не развёрнут, выполнение задачи будет прервано;
* **Репликация в направлении контроллер 2 -> контроллер 1** - выполняется репликация в соответствующем направлении;
* **Репликация в направлении контроллер 1 -> контроллер 2** - выполняется репликация в соответствующем направлении;
Запуск выполняется из директории `ansible` с помощью команды:
```bash
ansible-playbook 05_dc_replication.yml
```
### Создание пользователей контроллера домена
Эта задача позволяет создавать или удалять пользователей в домене.
Пользователи, которых необходимо добавить либо удалить из домена указаны в файле переменных `samba_users.yml`.
По-умолчанию задача запускается с переменной `samba_user_mode: create`, что обеспечивает создание пользователей. Если же необходимо наоборот, удалить пользователей - задачу необходимо запускать со значением переменной `samba_user_mode: delete`
Запуск выполняется из директории `ansible` с помощью команды:
для создания пользователей
```bash
ansible-playbook 06_add_samba_users.yml
```
для удаления пользователей
```bash
ansible-playbook -e 'samba_user_mode=delete' 06_add_samba_users.yml
```
### Добавление компьютеров в домен
Следующим этапом необходимо добавить компьютеры в домен. Для этой задачи создан плэйбук `07_add_samba_clients.yml`
Плэёбук выполняет следующие действия:
* **Проверка того, что узел не является членом домена** - если узел уже является членом домена, дальнейшее выполнение прерывается;
* **Обновление системы** - происходит обновление системы до актуального состояния;
* **Назначение корректного имени хоста** - устанавливается имя узла в соответствии с указанным в переменной в файле `mutable_vars.yml`;
* **Настройка резолвера на контроллеры домена** - чтобы вводимый узел мог найти доменные службы и подключиться к ним;
* **Обновление конфигурации резолвера** - для применения изменений настроек резолвера;
* **Установка клиентского пакета Samba**;
* **Ввод в домен**;
* **Проверка ввода в домен**;
* **Перезагрузка узла после добавления в домен**
Запуск выполняется из директории `ansible` с помощью команды:
```bash
ansible-playbook 07_add_samba_clients.yml
```
### Разворачивание файлового сервера
В этой роли выполняются задачи: Подготовка узла для развёртывания файлового сервера, Настройка файлового сервера Samba
Подготовка узла для развёртывания файлового сервера:
* **Проверка соответствия ОС** - таск выполнится при условии запуска на узле с ОС Альт, в противном случае будет выведено соответствующее сообщение и выполнение прервётся;
* **Проверка наличия развёрнутого домена на узле** - если на узле уже развёрнут контроллер домена, выполнение прервётся;
* **Обновление системы** - выполняется обновление системы до актуального состояния;
* **Назначение корректного имени хоста** - устанавливается имя узла в соответствии с указанным в переменной в файле `mutable_vars.yml`;
* **Настройка резолвера на контроллеры домена** - чтобы вводимый узел мог найти доменные службы и подключиться к ним;
* **Обновление конфигурации резолвера** - для применения изменений настроек резолвера;
* **Установка клиентского пакета Samba**
* **Ввод в домен**
* **Проверка ввода в домен**
* **Перезагрузка узла после добавления в домен**
Настройка файлового сервера Samba:
* **Установка пакета Samba**;
* **Создание разделяемого ресурса Samba** - создание директории и назначение её доменной группе;
* **Добавление в конфигурацию Samba данных о разделяемом ресурсе**;
* **Включение служб файлового сервера Samba**