# Выпускная квалификационная работа по курсу "Системное и сетевое администрирование ОС Альт"

## Тема: Автоматизация развертывания служб каталога Active Directory

***

- [Выпускная квалификационная работа по курсу "Системное и сетевое администрирование ОС Альт"](#выпускная-квалификационная-работа-по-курсу-системное-и-сетевое-администрирование-ос-альт)
  - [Тема: Автоматизация развертывания служб каталога Active Directory](#тема-автоматизация-развертывания-служб-каталога-active-directory)
    - [Описание стенда](#описание-стенда)
    - [Предварительная настройка](#предварительная-настройка)
    - [Подготовка шаблона Альт Сервер](#подготовка-шаблона-альт-сервер)
    - [Подготовка шаблона Альт Рабочая станция и Альт Рабочая станция К](#подготовка-шаблона-альт-рабочая-станция-и-альт-рабочая-станция-к)
    - [Разворачивание группировки виртуальных машин](#разворачивание-группировки-виртуальных-машин)
    - [Подготовка первого контроллера домена](#подготовка-первого-контроллера-домена)
    - [Подготовка второго контроллера домена](#подготовка-второго-контроллера-домена)
      - [Добавление DNS записи о втором контроллере на первый](#добавление-dns-записи-о-втором-контроллере-на-первый)
      - [Разворачивание второго контроллера домена](#разворачивание-второго-контроллера-домена)
      - [Репликация между контроллерами](#репликация-между-контроллерами)
    - [Создание пользователей контроллера домена](#создание-пользователей-контроллера-домена)
    - [Добавление компьютеров в домен](#добавление-компьютеров-в-домен)
    - [Разворачивание файлового сервера](#разворачивание-файлового-сервера)
    - [Проверка работы домена](#проверка-работы-домена)
      - [Возможность авторизации доменным пользователем на рабочих станциях](#возможность-авторизации-доменным-пользователем-на-рабочих-станциях)
      - [Проверка работы 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. `dc1` - Основной контроллер домена
2. `dc2` - Резервный контроллер
3. `nas` - Файловый сервер
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**

Запуск выполняется из директории `ansible` с помощью команды:

```bash
ansible-playbook 08_deploy_nas_role.yml
```

[вверх](#выпускная-квалификационная-работа-по-курсу-системное-и-сетевое-администрирование-ос-альт)

### Проверка работы домена

Выполним несколько проверок работоспособности доменной инфраструктуры и отказоустойчивости

#### Возможность авторизации доменным пользователем на рабочих станциях

Выполним авторизацию на узле `ws.alt.lan` - клиентский компьютер с установленной ОС Альт Рабочая станция. В качестве пользователя используем доменную учётную запись, которая была создана ранее - `ivanov`. Пароль от учётной записи указан в файле `group_vars/samba_users.yml` - `P@ssw0rd`

![авторизация на ws](img/02.png)

Рисунок 3 - Авторизация доменной учётной записью на `ws.alt.lan`

Авторизация прошла успешно, вывод команды `id` подтверждает факт авторизации в домене.

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

![авторизация на kws](img/03.png)

Рисунок 4 - Авторизация доменной учётной записью на `kws.alt.lan`

Авторизация также прошла успешно.

#### Проверка работы DNS и расположения служб домена

На узле `ws.alt.lan` разрешим некоторые доменные имена:

```bash
cat /etc/resolv.conf

host dc1.alt.lan

host dc2.alt.lan

host nas.alt.lan
```

![DNS](img/04.png)

Рисунок 5 - Результат проверки DNS

Проверим расположение служб в домене

```bash
host -t SRV _kerberos._udp.alt.lan

host -t SRV _ldap._tcp.alt.lan
```

![domain_services](img/05.png)

Рисунок 6 - Результат проверки расположения служб домена в DNS

[вверх](#выпускная-квалификационная-работа-по-курсу-системное-и-сетевое-администрирование-ос-альт)

### Проверка работы файлового сервера

Переменные для настройки файлового сервера указаны в файле `group_vars/nas/nas_vars.yml`. Разделяемый ресурс на сервере располагается по адресу - `/share/sambashare`

Проверка выполняется на узле `ws.alt.lan`

```bash
smbclient -L nas.alt.lan
```

![smb_share](img/06.png)

Рисунок 7 - Доступность разделяемого ресурса

Видим, что разделяемый ресурс `sambashare` отображается среди доступных пользователю.

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

![smb_share2](img/07.png)

Рисунок 8 - Возможность записи на разделяемый ресурс

Переключимся на файловый сервер и убедимся в том, что мы создали файл на нём, а не локально на рабочей станции.

![nas](img/08.png)

Рисунок 9 - Созданный документ на файловом сервере

Переключимся на локального пользователя `sysadmin` - `P@ssw0rd` и проверим доступность сетевых ресурсов

```bash
smbclient -L nas.alt.lan
```

![smb_share3](img/09.png)

Рисунок 10 - Отсутствие доступа к ресурсу локальной учётной записи

Разделяемая директория видна среди доступных, однако доступа к ней нет, т.к. используется локальная учётная запись.

[вверх](#выпускная-квалификационная-работа-по-курсу-системное-и-сетевое-администрирование-ос-альт)

### Проверка отказоустойчивости домена

Для проверки отказоустойчивости выключим контроллер домена `dc1.alt.lan` и выполним переавторизацию доменной учётной записью `ivanov` - `P@ssw0rd` на узле `ws.alt.lan`.

![fault_tolerance](img/10.png)

Рисунок 11 - Проверка отказоустойчивости домена

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

[вверх](#выпускная-квалификационная-работа-по-курсу-системное-и-сетевое-администрирование-ос-альт)

### Вывод

В работе рассмотрен процесс развёртывания службы каталогов построенной на решении Samba. Применение службы каталогов позволяет существенно упростить процесс администрирования информационной инфраструктуры предприятия в части управления пользователями и компьютерами. Возможность развёртывания нескольких контроллеров домена позволяет повысить надежность системы и обеспечить непрерывную полноценную работу при условии работоспособности хотя бы одного контроллера домена.

Использование файлового сервера с возможностью доменной авторизации позволяет гибко настроить права и ограничения по использованию резделяемых сетевых ресурсов, что в свою очередь, позволяет повысить эффективность работы.

За счёт поддержки компьютеров с операционными системами Microsoft Windows и Альт, использование решения Samba для реализации службы каталогов позволяет произвести плавный переход на российские решения без существенных изменений в инфраструктурных службах предприятия.

[вверх](#выпускная-квалификационная-работа-по-курсу-системное-и-сетевое-администрирование-ос-альт)

### Перечень используемых источников информации

- Документация BaseALT ([https://docs.altlinux.org/ru-RU/index.html](https://docs.altlinux.org/ru-RU/index.html)). Проверено 01.11.2023 г.
- Управление DNS средствами samba-tool ([https://www.xinux.net/index.php/Samba-tool_dns](https://www.xinux.net/index.php/Samba-tool_dns)). Проверено 01.11.2023 г.
- Документация по модулям Ansible ([https://docs.ansible.com/ansible/latest/collections/index_module.html](https://docs.ansible.com/ansible/latest/collections/index_module.html)). Проверено 01.11.2023 г.
- Сообщество ALT Linux - Active Directory ([https://www.altlinux.org/ActiveDirectory/DC](https://www.altlinux.org/ActiveDirectory/DC)). Проверено 01.11.2023 г.

[вверх](#выпускная-квалификационная-работа-по-курсу-системное-и-сетевое-администрирование-ос-альт)