# Выпускная квалификационная работа по курсу "Системное и сетевое администрирование ОС Альт"
## Тема: Автоматизация развертывания служб каталога Active Directory
Разворачивается следующая конфигурация:
* Основной контроллер домена (Альт Сервер)
* Резервный контроллер домена (Альт Сервер)
* Файловый сервер (Альт Сервер) в составе домена (службы NFS и SMB)
* Клиентский узел 1 (Альт Рабочая станция)
* Клиентский узел 2 (Альт Рабочая станция К).
Тестируются: определение расположения служб домена, создание доменного пользователя, получение билета средствами Kerberos, доступность NFS и SMB- служб сервера при kerberos-аутентификации, успешное проведение репликации между контроллерами. Графический вход доменных пользователей на клиентские узлы.
Эмулируется сбой одного из контроллеров, проверяется работоспособность окружения с оставшимся контроллером.
Возможно успешность применения групповых политик (включение/выключение определенной службы, убедиться что служба выключилась)
- [Выпускная квалификационная работа по курсу "Системное и сетевое администрирование ОС Альт"](#выпускная-квалификационная-работа-по-курсу-системное-и-сетевое-администрирование-ос-альт)
- [Тема: Автоматизация развертывания служб каталога Active Directory](#тема-автоматизация-развертывания-служб-каталога-active-directory)
В основе стенда используется узел с установленной системой Альт Сервер виртуализации 10.1, в качестве гипервизора - решение PVE.

Рисунок 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 командой
Шаблон будет подготовлен вручную — конвертирован из виртуальной машины, которая будет предварительно настроена.
Виртуальная машина имеет следующие характеристики:
*ОЗУ: 2 Гб
* ЦПУ: 2
* Диск: 32 Гб
* Диск CloudInit
остальные значения устанавливаются по-умолчанию. В качестве ОС используется Альт Сервер 10.1. При установке ОС используется профиль `Минимальная установка`с отмеченным пунктом `NetworkManager`, т. к. он необходим для работы CloudInit.
Как и шаблон для сервера, шаблоны виртуальных машин Рабочая станция и Рабочая станция К также подготовлены вручную — конвертированы из соответствующих, предварительно настроенных виртуальных машин.
Виртуальные машины имеют следующие характеристики:
*ОЗУ: 2 Гб
* ЦПУ: 2
* Диск: 32 Гб
* Диск CloudInit
остальные значения устанавливаются по-умолчанию. В качестве ОС используются Альт Рабочая станция 10.1 и Альт Рабочая станция К 10.1 соответственно. При установке операционной системы задаются значения, предлагаемые установщиком.
После установки операционной системы необходимо выполнить обновление и установку дополнительных компонентов:
* включение SSH сервера, т.к. в Рабочей станции он отключен
```bash
systemctl enable --now sshd
```
Следующие шаги идентичны тем, которые выполнялись при настройке сервера:
Для автоматизированного развёртывания виртуальных машин на гипервизор PVE используется ansible роль `deploy_vms_role.yml`.
Стоит обратить внимание, что при создании виртуальных машин из шаблонов, с помощью механизма CloudInit задаются уникальные IP адреса, имена хостов, а также пароль пользователя root. Кроме этого, также с помощью CloudInit в виртуальные машины копируется ssh ключ. Т.к. на этапе развёртывания CloudInit может взаимодействовать только с файловой системой гипервизора, ssh ключ, который копируется в виртуальные машины, необходимо заранее подготовить и сохранить в файловой системе гипервизора `/root/.ssh/`с именем, указанным в переменной `key_name`
Процесс создания группировки виртуальных машин запускается из директории `ansible`с помощью команды:
Для развёртывания первого контроллера домена используется ansible роль - Разворачивание первого контроллера домена.
Запуск выполняется из директории `ansible`с помощью команды:
```bash
ansible-playbook 02_deploy_dc1_role.yml
```
В этой роли выполняются 2 задачи: развёртывание контроллера и проверка развёртывания.
Задача развёртывания контроллера разделена на подзадачи (таски):
* **Проверка соответствия ОС** - таск выполнится при условии запуска на узле сОС Альт, в противном случае будет выведено соответствующее сообщение и выполнение прервётся;
* **Проверка наличия развёрнутого домена на узле** - если на узле уже развёрнут контроллер домена, выполнение прервётся;
* **Обновление системы** - выполняется обновление системы до актуального состояния;
* **Назначение корректного имени узла** - устанавливается имя узла в соответствии с указанным в переменной в файле `mutable_vars.yml`;
* **Установка пакетов** - выполняется установка пакетов, необходимых для работы контроллера домена. Список пакетов указан в файле `vars.yml`;
* **Конфигурация NTP** - режим работы NTP переключается в значение `server`;
* **Включение службы синхронизации времени chrony** - включается и добавляется в автозагрузку служба `chrony`;
* **Отключение служб, которые будут конфликтовать с контроллером** - для корректной работы `samba` необходимо отключить службы которые будут конфликтовать. Перечень этих служб указан в переменных в файле `vars.yml`;
Для подготовки второго контроллера домена используются:
* ансибл плэйбук - Добавление 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`с помощью команды:
Эта задача позволяет создавать или удалять пользователей в домене.
Пользователи, которых необходимо добавить либо удалить из домена указаны в файле переменных `samba_users.yml`.
По-умолчанию задача запускается с переменной `samba_user_mode: create`, что обеспечивает создание пользователей. Если же необходимо наоборот, удалить пользователей - задачу необходимо запускать со значением переменной `samba_user_mode: delete`
Запуск выполняется из директории `ansible`с помощью команды:
В этой роли выполняются задачи: Подготовка узла для развёртывания файлового сервера, Настройка файлового сервера Samba
Подготовка узла для развёртывания файлового сервера:
* **Проверка соответствия ОС** - таск выполнится при условии запуска на узле сОС Альт, в противном случае будет выведено соответствующее сообщение и выполнение прервётся;
* **Проверка наличия развёрнутого домена на узле** - если на узле уже развёрнут контроллер домена, выполнение прервётся;
* **Обновление системы** - выполняется обновление системы до актуального состояния;
* **Назначение корректного имени хоста** - устанавливается имя узла в соответствии с указанным в переменной в файле `mutable_vars.yml`;
* **Настройка резолвера на контроллеры домена** - чтобы вводимый узел мог найти доменные службы и подключиться к ним;
* **Обновление конфигурации резолвера** - для применения изменений настроек резолвера;
* **Установка клиентского пакета Samba**
* **Ввод в домен**
* **Проверка ввода в домен**
* **Перезагрузка узла после добавления в домен**
Настройка файлового сервера Samba:
* **Установка пакета Samba**;
* **Создание разделяемого ресурса Samba** - создание директории и назначение её доменной группе;
* **Добавление в конфигурацию Samba данных о разделяемом ресурсе**;
Выполним несколько проверок работоспособности доменной инфраструктуры и отказоустойчивости
#### Возможность авторизации доменным пользователем на рабочих станциях
Выполним авторизацию на узле `ws.alt.lan` - клиентский компьютер с установленной ОС Альт Рабочая станция. В качестве пользователя используем доменную учётную запись, которая была создана ранее - `ivanov`. Пароль от учётной записи указан в файле `group_vars/samba_users.yml` - `P@ssw0rd`

Авторизация прошла успешно, вывод команды `id` подтверждает факт авторизации в домене.
Аналогично выполним вход на узле `kws.alt.lan` - Альт Рабочая станция К. Пользователь - `petrov` - `P@ssw0rd`

Авторизация также прошла успешно.
#### Проверка работы DNS и расположения служб домена
На узле `ws.alt.lan` разрешим некоторые доменные имена:
Переменные для настройки файлового сервера указаны в файле `group_vars/nas/nas_vars.yml`. Разделяемый ресурс на сервере располагается по адресу - `/share/sambashare`
Проверка выполняется на узле `ws.alt.lan`
```bash
smbclient -L nas.alt.lan
```

Видим, что разделяемый ресурс`sambashare` отображается среди доступных пользователю.
С помощью файлового менеджера Caja перейдём по пути `smb://nas.alt.lan/sambashare` и создадим текстовый документ `ivanov.txt`.

Переключимся на локального пользователя `sysadmin` - `P@ssw0rd` и проверим доступность сетевых ресурсов
```bash
smbclient -L nas.alt.lan
```
Разделяемая директория видна среди доступных, однако доступа к ней нет, т.к. используется локальная учётная запись.
Для проверки отказоустойчивости выключим контроллер домена `dc1.alt.lan` и выполним переавторизацию доменной учётной записью `ivanov` - `P@ssw0rd` на узле `ws.alt.lan`.

Как видим icmp пакеты проходят только ко второму контроллеру `dc1.alt.lan`, но это не помешало успешно авторизоваться доменной учётной записью на рабочей станции.