# Выпускная квалификационная работа по курсу "Системное и сетевое администрирование ОС Альт" ## Тема: Автоматизация развертывания служб каталога 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** [вверх](#выпускная-квалификационная-работа-по-курсу-системное-и-сетевое-администрирование-ос-альт)