Модуль Д. Миграция

WIN-DC

Открываем редактор реестра. Ставим сервер времени LIN-DC1

 

Далее перезапускаем службу времени

 

После этого должны начать добавляться записи в домен с LIN-DC1

 

LIN-DC1

hostnamectl set-hostname LIN-DC1.SEMIFINAL.IRPO
bash
echo -e "TYPE=eth\nBOOTPROTO=static" > /etc/net/ifaces/ens19/options
echo "192.168.1.3/24" > /etc/net/ifaces/ens19/ipv4address
echo "default via 192.168.1.1" > /etc/net/ifaces/ens19/ipv4route
mcedit /etc/net/ifaces/ens19/resolv.conf
search semifinal.irpo
nameserver 77.88.8.8

mcedit /etc/sysconfig/network
HOSTNAME=LIN-DC1.SEMIFINAL.IRPO
systemctl restart network

Настроим сервер времени

 

apt-get update && apt-get install chrony -y

Разрешим подключение из локальной сети и проверим pool
mcedit /etc/chrony.conf
allow 192.168.1.0/24
pool pool.ntp.org iburst
local stratum 10

control chrony server
systemctl enable --now chronyd

Создим домен semifinal.irpo с функциональным уровнем не ниже Windows Server 2016

apt-get update && apt-get install task-samba-dc samba-client bind bind-utils krb5-kdc -y
rm /etc/samba/smb.conf


Меняем адрес DNS на WIN-DC
mcedit /etc/net/ifaces/ens19/resolv.conf
search semifinal.irpo
nameserver 192.168.1.2

systemctl restart network

Проверяем
ping 192.168.1.2
ping win-dc.senifinal.irpo
ping ya.ru

Присоединяемся к домену (если что-то произошло и мы присоединяемся повторно, то на WIN-DC в разделе Active Directory Users & Computers — Domain-Controllers удаляем запись LIN-DC1

 

samba-tool domain join semifinal.irpo DC -U administrator@semifinal.irpo --dns-backend=SAMBA_INTERNAL --option "ad dc functional level = 2016"

На WIN-DC должна появится запись о новом контроллере

 

 

 

Открываем Tools — DNS

Смотрим, какой использовался форвардер

 

В настройку smb.conf в секцию GLOBAL добавляем (на картинке не соответствует реальности)

mcedit /etc/samba/smb.conf

dns forwarder = 1.1.1.1

systemctl enable --now samba

Копируем файл krb5 в системный с заменой

cp /var/lib/samba/private/krb5.conf /etc/

Переводим все fsmo на LIN-DC1

samba-tool fsmo seize --role=all -U administrator@semifinal.irpo

Проверяем

samba-tool fsmo show

samba-tool domain level show

LIN-SRV1

hostnamectl set-hostname LIN-SRV1.SEMIFINAL.IRPO
bash

echo -e "TYPE=eth\nBOOTPROTO=static" > /etc/net/ifaces/ens19/options
echo "192.168.1.4/24" > /etc/net/ifaces/ens19/ipv4address
echo "default via 192.168.1.1" > /etc/net/ifaces/ens19/ipv4route
echo -e "search semifinal.irpo\nnameserver 192.168.1.3\n" > /etc/net/ifaces/ens19/resolv.conf

systemctl restart network
ip -br -c a

Настроим клиент времени

 

apt-get update && apt-get install chrony -y

mcedit /etc/chrony.conf
server 192.168.1.3 iburst
Пройти весь файл и закомментировать все pool
#pool

systemctl enable --now chronyd

Установим

apt-get update && apt-get install task-auth-ad-sssd -y

Присоединяем к домену
system-auth write ad semifinal.irpo LIN-SRV1 SEMIFINAL 'administrator' 'P@ssw0rd'

На WIN-DC можно проверить запись в прямой и обратной зонах (надо обновить F5)

 

LIN-SRV2

hostnamectl set-hostname LIN-SRV2.SEMIFINAL.IRPO
bash

echo -e "TYPE=eth\nBOOTPROTO=static" > /etc/net/ifaces/ens19/options
echo "192.168.1.5/24" > /etc/net/ifaces/ens19/ipv4address
echo "default via 192.168.1.1" > /etc/net/ifaces/ens19/ipv4route
echo -e "search semifinal.irpo\nnameserver 192.168.1.3\n" > /etc/net/ifaces/ens19/resolv.conf

systemctl restart network
ip -br -c a

Настроим клиент времени

apt-get update && apt-get install chrony -y

mcedit /etc/chrony.conf
server 192.168.1.3 iburst
Пройти весь файл и закомментировать все pool
#pool

systemctl enable --now chronyd

Установим

apt-get update && apt-get install task-auth-ad-sssd -y

Присоединяем к домену
system-auth write ad semifinal.irpo LIN-SRV2 SEMIFINAL 'administrator' 'P@ssw0rd'

 

 

ADM

hostnamectl set-hostname ADM.SEMIFINAL.IRPO 
bash 

echo -e "TYPE=eth\nBOOTPROTO=static" > /etc/net/ifaces/enp7s1/options
echo "192.168.1.99/24" > /etc/net/ifaces/enp7s1/ipv4address
echo "default via 192.168.1.1" > /etc/net/ifaces/enp7s1/ipv4route
echo -e "search semifinal.irpo\nnameserver 192.168.1.3\n" > /etc/net/ifaces/enp7s1/resolv.conf 

systemctl restart network
ip -br -c a

Настроим сервер времени

apt-get update && apt-get install chrony -y

Разрешим подключение из локальной сети и проверим pool
mcedit /etc/chrony.conf
#pool pool.ntp.org iburst
server 192.168.1.3 iburst

systemctl enable --now chronyd

LIN-SRV1

 

Создадим папки

mkdir /opt/Share
mkdir /opt/profiles
mkdir /opt/UserDocs

chmod 777 /opt/*

Открываем файл mcedit /etc/samba/smb.conf и в конец дописываем описание шар (внимательно убираем лишние пробелы)

[Share]
path = /opt/Share
read only = no
guest ok = yes
browseable = yes
public = yes

[Profiles]
path = /opt/profiles
read only = no
browseable = no
valid users = %U
create mask = 0600
directory mask = 0700

[UserDocs]
path = /opt/UserDocs
read only = no
browseable = no
valid users = "@SEMIFINAL\Domain Users"

Запустим SAMBA

systemctl enable --now smb

С ADM можно посмотреть опубликованные шары smbclient -L 192.168.1.4 (пароль toor)

 

Переходим на WIN-DC, открываем проводник, подключаем шару

 

Копируем профили

Открываем CMD от имени Администратора

 

robocopy C:\Users Z: /E /COPY:DAT /ZB /R:3 /W:10

Может на долго зависнуть, т.к. не ко всем папкам есть доступ. Если постоянно висит надпись реконект, то прервать.

 

Переходим на LIN-SRV1

mv /opt/Share/* /opt/profiles/

LIN-DC1

 

Примонтируем временно папку SYSVOL с WIN-DC

mkdir /mnt/sysvol

apt-get install cifs-utils

 

mcedit .smbclient

username=administrator

password=P@ssw0rd

mcedit /etc/fstab

//win-dc/sysvol /mnt/sysvol cifs user,rw,_netdev,credentials=/root/.smbclient 0 0

mount -a

 

Проверяем, что примонтировалась

ls -l /mnt/sysvol

 

Копируем содержимое в папку /var/lib/samba/sysvol

cp -r /mnt/sysvol/* /var/lib/samba/sysvol

 

Проверяем

ls -l /var/lib/samba/sysvol/

 

Создаем структуру домена

samba-tool ou create "OU=LinOU,DC=semifinal,DC=irpo" -U Administrator
samba-tool user create LinUser1 P@ssw0rd --userou "OU=LinOU" -U Administrator
samba-tool user create LinUser2 P@ssw0rd --userou "OU=LinOU" -U Administrator
samba-tool group add LinUsers --groupou "OU=LinOU" -U Administrator
samba-tool group addmembers LinUsers LinUser1,LinUser2 -U Administrator

samba-tool computer move LIN-CLI1 "OU=LinOU" -U Administrator //Если LIN-CLI1 не вошел в домен, то не сработает, надо повторить после ввода LIN-CLI1 в домен

Добавляем записи DNS

samba-tool dns add LIN-DC1 SEMIFINAL.IRPO web A 192.168.1.4 -U Administrator
samba-tool dns add LIN-DC1 semifinal.irpo mon A 192.168.1.5 -U Administrator
samba-tool dns add LIN-DC1 semifinal.irpo backup A 192.168.1.4 -U Administrator
samba-tool dns add LIN-DC1 semifinal.irpo adm A 192.168.1.99 -U Administrator
samba-tool dns zonecreate LIN-DC1 1.168.192.in-addr.arpa -U Administrator (если не создана виндой)
samba-tool dns add LIN-DC1 1.168.192.in-addr.arpa 4 PTR LIN-SRV1.semifinal.irpo -U Administrator
samba-tool dns add LIN-DC1 1.168.192.in-addr.arpa 5 PTR LIN-SRV2.semifinal.irpo -U Administrator
samba-tool dns add LIN-DC1 1.168.192.in-addr.arpa 2 PTR LIN-DC2.semifinal.irpo -U Administrator
samba-tool dns add LIN-DC1 1.168.192.in-addr.arpa 3 PTR LIN-DC1.semifinal.irpo -U Administrator
samba-tool dns add LIN-DC1 1.168.192.in-addr.arpa 99 PTR ADM.semifinal.irpo -U Administrator

ADM

apt-get update && apt-get install admc gpui gpupdate -y

Оставим пока только 1 адрес DNS
mcedit /etc/net/ifaces/enp7s1/resolv.conf
search semifinal.irpo
nameserver 192.168.1.2

В терминале kinit administrator@SEMIFINAL.IRPO (пароль P@ssw0rd)

ИЛИ

kinit

Проверим klist

 

Переходим в графику. Открываем ADMC — Файл — Параметры подключения

Потом в меню ФАЙЛ — Сменить пользователя

 

Если не получается, то:

открываем терминал — переходим в su — kinit administrator@SEMIFINAL.IRPO

Потом запускаем ADMC от имени root и оставляем открытым.

 

 

В настройках ставим галочку «Дополнительные возможности»

 

Открываем настройку пользователей -> Выбираем нужных пользователей -> ПКМ -> Свойства -> Профили ->

Путь пишем //lin-srv1/Profiles/%username% или \\lin-srv1\Profiles\%username% (надо проверять, как будет работать)

 

На WIN-DC меняем контроллер домена

 

Выключаем WIN-DC

 

Переходим на LIN-DC1 и удаляем записи о WIN-DC

samba-tool domain demote --remove-other-dead-server=WIN-DC -U administrator@semifinal.irpo

Возвращаемся на ADM

 

Если контроллер не удаляли, то

Если удаляли, то

В терминале kinit administrator@SEMIFINAL.IRPO (пароль P@ssw0rd)

Проверим klist

 

Переходим в графику. Открываем ADMC — Файл — Параметры подключения (Должен остаться только LIN-DC1)

Выбираем его. Закрываем ADMC, заново запускаем.

Потом в меню ФАЙЛ — Сменить пользователя

Должно всё вернуться, но контроллер новый

 

LIN-DC2 (предварительно выключить win-dc или отключить на нем сетевую карту)

hostnamectl set-hostname LIN-DC2.SEMIFINAL.IRPO
bash

echo -e "TYPE=eth\nBOOTPROTO=static" > /etc/net/ifaces/ens19/options
echo "192.168.1.2/24" > /etc/net/ifaces/ens19/ipv4address
echo "default via 192.168.1.1" > /etc/net/ifaces/ens19/ipv4route

mcedit /etc/net/ifaces/ens19/resolv.conf
search semifinal.irpo
nameserver 192.168.1.3
nameserver 192.168.1.2

systemctl restart network

Настроим сервер времени

apt-get update && apt-get install chrony -y

Укажем сервер времени, проверим pool 
mcedit /etc/chrony.conf 
#pool pool.ntp.org iburst 
server 192.168.1.3 iburst 

systemctl enable --now chronyd

Проверим (Может заработать через несколько минут)
ping lin-dc1
chronyc tracking

Установим DHCP

apt-get install dhcp-server -y

mcedit /etc/dhcp/dhcpd.conf

option domain-name "semifinal.irpo";
option domain-name-servers 192.168.1.3, 192.168.1.2; # LIN-DC1 и LIN-DC2
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
}

# Включаем динамические обновления DNS

ddns-update-style interim;
ddns-domainname "semifinal.irpo.";
ddns-rev-domainname "in-addr.arpa.";

zone semifinal.irpo. {
primary 192.168.1.3;
}

zone 1.168.192.in-addr.arpa. {
primary 192.168.1.3;
}

Включаем DHCP

systemctl enable --now dhcpd

Проверяем systemctl status dhcp

 

Ставим

apt-get install task-samba-dc krb5-kdc -y

rm /etc/samba/smb.conf (если вход в домен работать не будет его можно удалять постоянно)

 

Вводим LIN-DC2 в домен

 

samba-tool domain join semifinal.irpo DC -U administrator@semifinal.irpo --dns-backend=SAMBA_INTERNAL --option "ad dc functional level = 2016"

Посмотрим машины в домене

 

samba-tool computer list

 

mcedit /etc/samba/smb.conf

И как на LIN-DC1 в секцию GLOBAL (только адрес берем, такой, который узнали на WIN-DC)

dns forwarder = 1.1.1.1

 

Включаем SAMBA

systemctl enable --now samba.service

Копируем созданный samba файл krb5 (перезаписываем)

cp /var/lib/samba/private/krb5.conf /etc/

Проверяем kinit

 

kinit administrator@SEMIFINAL.IRPO

Пароль P@ssw0rd

 

Проверим билет

klist

 

LIN-CLI1 (Если до этого не сделали)

hostnamectl set-hostname LIN-CLI1.SEMIFINAL.IRPO
bash
echo -e "TYPE=eth\nBOOTPROTO=dhcp" > /etc/net/ifaces/enp7s1/options
systemctl restart network 
ip -br -c a

Должны прилететь адреса по DHCP. Если этого не произошло (DHCP на LIN-DC2 не заработал), то ставим адреса в ручную
echo -e "TYPE=eth\nBOOTPROTO=static" > /etc/net/ifaces/enp7s1/options
echo "192.168.1.5/24" > /etc/net/ifaces/enp7s1/ipv4address
echo "default via 192.168.1.1" > /etc/net/ifaces/enp7s1/ipv4route
echo -e "search semifinal.irpo\nnameserver 192.168.1.3\n" > /etc/net/ifaces/enp7s1/resolv.conf

systemctl restart network
ip -br -c a

Настроим клиент времени

apt-get update && apt-get install chrony -y

mcedit /etc/chrony.conf
server 192.168.1.3 iburst
Пройти весь файл и закомментировать все pool
#pool

systemctl enable --now chronyd
systemctl restart chronyd
ping lin-dc1
chronyc tracking

Установим

apt-get update && apt-get install task-auth-ad-sssd krb5-kdc gpupdate systemd-settings-enable-kill-user-processes -y

Присоединяем к домену
system-auth write ad semifinal.irpo LIN-CLI1 SEMIFINAL 'administrator' 'P@ssw0rd'

ИЛИ через графику: открываем центр управления системой — Аутентификация — внизу применить (

 

LIN-DC1 (Если не получилось до этого)

 

Создаем структуру домена

samba-tool ou create "OU=LinOU,DC=semifinal,DC=irpo" -U Administrator
samba-tool user create LinUser1 P@ssw0rd --userou "OU=LinOU" -U Administrator
samba-tool user create LinUser2 P@ssw0rd --userou "OU=LinOU" -U Administrator
samba-tool group add LinUsers --groupou "OU=LinOU" -U Administrator
samba-tool group addmembers LinUsers LinUser1,LinUser2 -U Administrator

samba-tool computer move LIN-CLI1 "OU=LinOU" -U Administrator //Это получилось с LIN-DC2. Если LIN-CLI1 не вошел в домен, то не сработает

Добавляем записи DNS

samba-tool dns add LIN-DC1 semifinal.irpo web A 192.168.1.4 -U Administrator
samba-tool dns add LIN-DC1 semifinal.irpo mon A 192.168.1.5 -U Administrator
samba-tool dns add LIN-DC1 semifinal.irpo backup A 192.168.1.4 -U Administrator
samba-tool dns add LIN-DC1 semifinal.irpo adm A 192.168.1.99 -U Administrator
samba-tool dns zonecreate LIN-DC1 1.168.192.in-addr.arpa -U Administrator (если не создана виндой)
samba-tool dns add LIN-DC1 1.168.192.in-addr.arpa 4 PTR LIN-SRV1.semifinal.irpo -U Administrator
samba-tool dns add LIN-DC1 1.168.192.in-addr.arpa 5 PTR LIN-SRV2.semifinal.irpo -U Administrator
samba-tool dns add LIN-DC1 1.168.192.in-addr.arpa 2 PTR LIN-DC2.semifinal.irpo -U Administrator
samba-tool dns add LIN-DC1 1.168.192.in-addr.arpa 3 PTR LIN-DC1.semifinal.irpo -U Administrator
samba-tool dns add LIN-DC1 1.168.192.in-addr.arpa 99 PTR ADM.semifinal.irpo -U Administrator

LIN-SRV2

 

Установка системы мониторинга (если DNS на 192.168.1.2 и 192.168.1.3 отвалился, ставим 77.88.8.8 в /etc/net/ifaces/ens19/resolv.conf, systemctl restart network, ставим всё, потом возвращаем назад nameserver 192.168.1.3 и nameserver 192.168.1.2)

 

 apt-get update && apt-get install grafana prometheus prometheus-node_exporter -y

systemctl enable --now grafana-server

В файле /etc/prometheus/prometheus.yml  секции scrape_configs добавим (такой job там уже есть, надо только добавить в конце targets)

mcedit /etc/prometheus/prometheus.yml

- job_name: node
  static_configs:
    - targets: ['192.168.1.3:9100', '192.168.1.2:9100', '192.168.1.4:9100']

Запустим

systemctl enable --now prometheus

 

Lin-DC1, Lin-DC2, Lin-SRV1 (если DNS на 192.168.1.2 и 192.168.1.3 отвалился, ставим 77.88.8.8 в /etc/net/ifaces/ens19/resolv.conf, systemctl restart network, ставим всё, потом возвращаем назад nameserver 192.168.1.3 и nameserver 192.168.1.2)

 

Ставим клиентов

apt-get install prometheus-node_exporter -y

systemctl enable --now prometheus-node_exporter

ADM

  • Откройте веб-интерфейс http://192.168.1.5:3000 (логин/пароль по умолчанию admin/admin).

Меняем пароль на P@ssw0rd

  • Добавьте источник данных Prometheus (URL: http://localhost:9090).

  • Импортируйте готовый дашборд для Node Exporter (например, ID 1860 с grafana.com).

Потом внизу импорт

 

Добавить Data Source → Prometheus (http://localhost:9090)

Импортировать дашборд ID: 1860 (Node Exporter Full) или создать виджеты node_cpu_seconds_total, node_memory_MemAvailable_bytes, node_filesystem_avail_bytes.

 

LIN-SRV2

 

apt-get install nginx

 

mcedit /etc/nginx/sites-enabled.d/task.conf

 

server {
listen 80;
server_name mon.semifinal.irpo;

location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

systemctl enable —now nginx

 

Если все работает, то с ADM должно грузиться по имени http://mon.semifinal.irpo

 

 

WIN-CLI1 (возможно будет iso с инсталяшкой, если нет, то скачиваем из Инета)

Проверить, что адрес прилетает по DHP.

  1. Откройте «Управление» → «Добавить роли и компоненты».
  2. В разделе «Компоненты» найдите «Средства удалённого администрирования сервера» (RSAT).
  3. Установите оснастки: Active Directory – пользователи и компьютеры, Управление групповыми политиками, DNS-сервер.
  4. После установки оснастки будут доступны в меню «Администрирование».

 

WIN-CLI2

  1. Убедитесь, что компьютер получает IP-адрес от DHCP-сервера (LIN-DC2).
  2. Откройте «Свойства системы» → «Имя компьютера» → «Изменить».
  3. Выберите «Является членом домена», введите semifinal.irpo.
  4. Введите учётные данные администратора домена (Administrator, P@ssw0rd).
  5. Перезагрузите компьютер.

Дальше совсем новое

Двунаправленная репликация SYSVOL

 

LIN-DC1 и LIN-DC2

  1. На обоих контроллерах установим пакеты:
apt-get install rsync unison -y
  • На LIN-DC1 и LIN-DC2 разрешим root по ssh

mcedit /etc/openssh/sshd_config

PermitRootLogin yes

systemctl restart sshd

  • На LIN-DC1 настроим беспарольный доступ по SSH к LIN-DC2:
ssh-keygen -t ed25519 -N "" -f /root/.ssh/id_ed25519
ssh-copy-id root@192.168.1.2
пароль root
  • На LIN-DC1 создадим конфигурационный файл /root/.unison/sysvol.prf со следующим содержимым:

mkdir /root/.unison/

mcedit /root/.unison/sysvol.prf

# Локальный и удалённый корни 
root = /var/lib/samba/sysvol 
root = ssh://root@192.168.1.2//var/lib/samba/sysvol 
# Автоматический режим без вопросов 
auto = true 
batch = true
# Сохранять владельца и группу 
owner = true 
group = true 
# Не синхронизировать права (они задаются отдельно) 
perms = -1 
# Использовать rsync для ускорения 
rsync = true 
xattrs = true 
#Не обрабатывать символические ссылки 
links = false
  • На LIN-DC1 добавим задание в cron для автоматической синхронизации каждые 5 минут:
    • Выполним mcedit /etc/crontab
    • Добавим строку:
*/5 * * * * /usr/bin/unison sysvol -silent

systemctl restart crond
  • Выполним первую синхронизацию вручную для проверки:
/usr/bin/unison sysvol
Выполним синхронизацию
/usr/bin/rsync -XAavz --log-file /var/log/sysvol-sync.log \ --delete-after -f"+ */" -f"- *" /var/lib/samba/sysvol \ root@192.168.1.2:/var/lib/samba && /usr/bin/unison

LIN-DC1

 

Установим шаблоны

apt-get install admx-basealt admx-chromium admx-msi-setup gpui -y
  • Загрузим шаблоны MSI (для Windows-политик):
admx-msi-setup
  • Загрузим шаблоны в домен:
samba-tool gpo admxload -U Administrator

 

LIN-SRV1

  1. Установим Apache и модуль GSSAPI:
apt-get install apache2 apache2-mod_auth_gssapi samba-utils -y
  • Включим необходимые модули Apache:
a2enmod auth_gssapi
a2enmod authn_core
a2enmod authz_user
  • Создадим Service Principal Name (SPN) для веб-сервера в домене:
samba-tool spn add HTTP/web.semifinal.irpo@SEMIFINAL.IRPO LIN-SRV1$ -Uadministrator
samba-tool spn add HTTP/lin-srv1.semifinal.irpo@SEMIFINAL.IRPO LIN-SRV1$ -Uadministrator
  • Экспортируем keytab-файл с ключами для HTTP-сервиса:
samba-tool domain exportkeytab /etc/apache2/http.keytab --principal=HTTP/web.semifinal.irpo@SEMIFINAL.IRPO
samba-tool domain exportkeytab /etc/apache2/http.keytab --principal=HTTP/lin-srv1.semifinal.irpo@SEMIFINAL.IRPO
chown www-data:www-data /etc/apache2/http.keytab && chmod 600 /etc/apache2/http.keytab
  • Создадим конфигурацию виртуального хоста в файле /etc/apache2/sites-available/web.conf:
<VirtualHost *:80>
ServerName web.semifinal.irpo
DocumentRoot /var/www/web
<Location />
AuthType GSSAPI
AuthName «GSSAPI Login»
GssapiCredStore keytab:/etc/apache2/http.keytab
GssapiBasicAuth On
GssapiLocalName On
require valid-user
</Location>
</VirtualHost>
  • Создадим каталог для сайта и разместим в нём файл login.html (из /template):
mkdir -p /var/www/web
cp /template/login.html /var/www/web/index.html
  • Активируем сайт и перезагрузим Apache:
a2ensite web.conf 
systemctl reload apache2

 

 

LIN-SRV1 (Кибербэкап)

 

Монтируем образ

mkdir /mnt/cdr

mount /dev/sr0 /mnt/cdr

ls /mnt/cdr

cd /mnt/cdr

 

Смотрим, как называется файл, если архивный …tar, то распаковываем

tar --xattrs --xattrs-include=* -xvf CyberBackup_16_64-bit.x86_64.tar

chmod +x /mnt/cdr/CyberBackup_*

./CyberBackup_16_64-bit.x86_64

Выбираем роль сервера управления

 

После установки на ADM http://backup.semifinal.irpo:9877 или http://192.168.1.4:9877

 

ADM

 

Аналогично, только выбираем КиберБэкап агента для linux и узла хранения

 

  1. В процессе установки укажите IP-адрес сервера управления: 192.168.1.4.
  2. После установки агента подключите его к серверу управления через веб-интерфейс.
  3. На хосте ADM создайте каталог для хранения резервных копий:

mkdir /backup

  • В веб-интерфейсе сервера управления:
    • Создайте узел хранения с именем BackUpFolder, указав путь /backup на хосте ADM.
    • Создайте план резервного копирования с именем DomDataBackUp.
    • В плане укажите источник: папки /opt/profiles и /opt/userdocs на LIN-SRV1.
    • Настройте расписание (например, ежедневно).
    • Убедитесь, что план выполняется успешно.

 

 

 

—————————————————————————————————

На всех Linux машинах настроить имя

hostnamectl set-hostname LIN-DC1.SEMIFINAL.IRPO

hostnamectl set-hostname LIN-DC2.SEMIFINAL.IRPO

hostnamectl set-hostname LIN-CLI1.SEMIFINAL.IRPO

hostnamectl set-hostname LIN-SRV1.SEMIFINAL.IRPO

hostnamectl set-hostname LIN-SRV2.SEMIFINAL.IRPO

После каждого bash

 

На всех Linux машинах настроить адресацию согласно таблице

mcedit /etc/net/ifaces/ens19/options

BOOTPROTO=static

ИЛИ

echo «BOOTPROTO=static» > /etc/net/ifaces/ens1/options

 

mcedit /etc/net/ifaces/ens19/ipv4address

192.168.1.x/24

 

mcedit /etc/net/ifaces/ens19/ipv4route

default via 192.168.1.1

 

mcedit /etc/net/ifaces/ens19/resolv.conf

search semifinal.irpo

nameserver 77.88.8.8

 

После настройки сети на каждой машине

systemctl restart network

 

Все команды выполняются от пользователя root, если не указано иное.


Синхронизация времени (NTP)

Задача: Настроить сервер времени на LIN-DC1 и клиентов на всех остальных хостах.

🔹 Хост: LIN-DC1 (NTP-сервер)

  1. Установим пакет chrony, если его нет, и включить режим сервера
apt-get install chrony -y

mcedit /etc/chrony.conf
allow 192.168.1.0/24

control chrony server
systemctl enable --now chronyd

🔹 Хосты: LIN-DC2, LIN-SRV1, LIN-SRV2, LIN-CLI1, ADM (NTP-клиенты)

  1. Установим пакет chrony, если его нет:
apt-get install chrony -y
  • Добавим в файл /etc/chrony.conf строку с адресом NTP-сервера:
mcedit /etc/chrony.conf
server 192.168.1.3 iburst
Закомментируем pool

systemctl restart chronyd

 

Развёртывание первого контроллера домена (PDC)

Задача: Создать домен semifinal.irpo с функциональным уровнем не ниже Windows Server 2016. DNS-сервер — BIND9_DLZ.

🔹 Хост: LIN-DC1

  1. Установим необходимые пакеты:
apt-get install task-samba-dc bind bind-utils -y
  • Остановим и отключим конфликтующие службы (если они были запущены):
for service in smb nmb krb5kdc slapd bind; do systemctl disable --now $service; done
  • Удалим старые конфигурации Samba:
rm -f /etc/samba/smb.conf && rm -rf /var/lib/samba /var/cache/samba && mkdir -p /var/lib/samba/sysvol
  • Выполним создание домена в пакетном режиме с параметрами:
samba-tool domain provision --realm=SEMIFINAL.IRPO --domain=SEMIFINAL --adminpass='P@ssw0rd' --server-role=dc --dns-backend=BIND9_DLZ --option="dns forwarder=8.8.8.8" --option="ad dc functional level = 2016" --use-rfc2307

Переведем домен в режим функционирования 2016

samba-tool domain level raise --forest-level=2016 --domain-level=2016
  • Настроим BIND9 для работы с динамической зоной Samba:
    • Отключим chroot:
control bind-chroot disabled
  • В файл /etc/sysconfig/bind добавим строку (если её нет):
mcedit /etc/sysconfig/bind
KRB5RCACHETYPE="none"
ИЛИ
grep -q '^KRB5RCACHETYPE=' /etc/sysconfig/bind || echo 'KRB5RCACHETYPE="none"' >> /etc/sysconfig/bind
  • В конец файла /etc/bind/named.conf добавим строку, подключающую зону Samba:
echo 'include "/var/lib/samba/bind-dns/named.conf";' >> /etc/bind/named.conf
  • Скопируем сгенерированный файл конфигурации Kerberos в системный каталог и запустим SAMBA и BIND9
cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
systemctl enable --now bind && systemctl enable --now samba

 

Развёртывание второго контроллера домена (BDC)

Задача: Ввести LIN-DC2 в домен в качестве дополнительного контроллера.

🔹 Хост: LIN-DC2

  1. Установим необходимые пакеты:
apt-get install task-samba-dc bind bind-utils -y
  • Остановим и отключим конфликтующие службы (если они были запущены):
for service in smb nmb krb5kdc slapd bind; do systemctl disable --now $service; done
  • Удалим старые конфигурации Samba:
rm -f /etc/samba/smb.conf && rm -rf /var/lib/samba /var/cache/samba && mkdir -p /var/lib/samba/sysvol
  • Настроим разрешение имён так, чтобы LIN-DC2 использовал LIN-DC1 в качестве первичного DNS. В файл /etc/resolvconf.conf добавим строки:
name_servers=192.168.1.3
search_domains=semifinal.irpo

Применим изменения:

resolvconf -u
  • Скопируем файл krb5.conf с первого контроллера:
scp root@192.168.1.3:/etc/krb5.conf /etc/krb5.conf
  • Получим билет Kerberos администратора домена:
kinit administrator@SEMIFINAL.IRPO
  • Присоединимся к домену как дополнительный DC:
samba-tool domain join semimifinal.irpo DC -Uadministrator --dns-backend=BIND9_DLZ --option="dns forwarder=1.1.1.1" --option="ad dc functional level = 2016"
samba-tool domain level raise --forest-level=2016 --domain-level=2016
samba-tool domain level show
  • Настроим BIND9 для работы с динамической зоной Samba:
    • Отключим chroot:
control bind-chroot disabled
  • В файл /etc/sysconfig/bind добавим строку (если её нет):
mcedit /etc/sysconfig/bind
KRB5RCACHETYPE="none"
ИЛИ
grep -q '^KRB5RCACHETYPE=' /etc/sysconfig/bind || echo 'KRB5RCACHETYPE="none"' >> /etc/sysconfig/bind
  • В конец файла /etc/bind/named.conf добавим строку, подключающую зону Samba:
echo 'include "/var/lib/samba/bind-dns/named.conf";' >> /etc/bind/named.conf
systemctl enable --now bind && systemctl enable --now samba

 

Часть 4. Повышение функционального уровня домена и роли FSMO

Задача: Установить функциональный уровень домена 2016 и передать все роли FSMO на LIN-DC1.

🔹 Хост: LIN-DC1

  1. В файл /etc/samba/smb.conf в секцию [global] добавим строку и перезагрузим SAMBA:
ad dc functional level = 2016
systemctl restart samba
  • Выполним повышение уровня домена и леса (если до этого не сделали):
samba-tool domain level raise --domain-level=2016 --forest-level=2016
  • Передадим все роли FSMO на LIN-DC1 (если они ещё не там):
samba-tool fsmo transfer --role=all -Uadministrator

Двунаправленная репликация SYSVOL (Rsync/Unison)

Задача: Обеспечить синхронизацию каталога SYSVOL между LIN-DC1 и LIN-DC2.

🔹 Хосты: LIN-DC1 и LIN-DC2

  1. На обоих контроллерах установим пакеты:
apt-get install rsync unison -y
  • На LIN-DC1 настроим беспарольный доступ по SSH к LIN-DC2:
ssh-keygen -t ed25519 -N "" -f /root/.ssh/id_ed25519
ssh-copy-id root@192.168.1.2
  • На LIN-DC1 создадим конфигурационный файл /root/.unison/sysvol.prf со следующим содержимым:
# Локальный и удалённый корни
root = /var/lib/samba/sysvol
root = ssh://root@192.168.1.2//var/lib/samba/sysvol
# Автоматический режим без вопросов
auto = true
batch = true
# Сохранять владельца и группу
owner = true
group = true
# Не синхронизировать права (они задаются отдельно)
perms = -1
# Использовать rsync для ускорения
rsync = true
xattrs = true
# Не обрабатывать символические ссылки
links = false
  • На LIN-DC1 добавим задание в cron для автоматической синхронизации каждые 5 минут:
    • Выполним crontab -e
    • Добавим строку:
*/5 * * * * /usr/bin/unison sysvol -silent
  • Выполним первую синхронизацию вручную для проверки:
/usr/bin/unison sysvol

Настройка DNS-записей (прямая и обратная зоны)

Задача: Создать A и PTR записи для всех хостов, включая служебные имена.

🔹 Хост: LIN-DC1 (можно выполнять с любого DC)

  1. Добавим прямые записи (A) для всех хостов:
samba-tool dns add 192.168.1.3 semimifinal.irpo LIN-DC2 A 192.168.1.2 -Uadministrator
samba-tool dns add 192.168.1.3 semimifinal.irpo LIN-SRV1 A 192.168.1.4 -Uadministrator
samba-tool dns add 192.168.1.3 semimifinal.irpo LIN-SRV2 A 192.168.1.5 -Uadministrator
samba-tool dns add 192.168.1.3 semimifinal.irpo ADM A 192.168.1.99 -Uadministrator

# Для DHCP-клиентов записи добавятся автоматически.

  • Создадим обратную зону 1.168.192.in-addr.arpa (если ещё не создана):
samba-tool dns zonecreate 192.168.1.3 1.168.192.in-addr.arpa -Uadministrator
  • Добавим обратные записи (PTR) для хостов со статическими адресами:
samba-tool dns add 192.168.1.3 1.168.192.in-addr.arpa 3 PTR LIN-DC1.semifinal.irpo -Uadministrator
samba-tool dns add 192.168.1.3 1.168.192.in-addr.arpa 2 PTR LIN-DC2.semifinal.irpo -Uadministrator
samba-tool dns add 192.168.1.3 1.168.192.in-addr.arpa 4 PTR LIN-SRV1.semifinal.irpo -Uadministrator
samba-tool dns add 192.168.1.3 1.168.192.in-addr.arpa 5 PTR LIN-SRV2.semifinal.irpo -Uadministrator
samba-tool dns add 192.168.1.3 1.168.192.in-addr.arpa 99 PTR ADM.semifinal.irpo -Uadministrator

Настройка DHCP-сервера на LIN-DC2 с динамическим обновлением DNS

Задача: DHCP должен выдавать адреса клиентам и регистрировать их в DNS.

🔹 Хост: LIN-DC2

  1. Установим DHCP-сервер:
apt-get install dhcp-server
  • Создадим доменного пользователя для обновления DNS:
samba-tool user create dhcpduser --random-password
samba-tool user setexpiry dhcpduser --noexpiry
samba-tool group addmembers DnsAdmins dhcpduser
  • Экспортируем keytab для этого пользователя:
samba-tool domain exportkeytab —principal=dhcpduser@SEMIFINAL.IRPO /etc/dhcp/dhcpduser.keytab
chown dhcpd:dhcp /etc/dhcp/dhcpduser.keytab
chmod 400 /etc/dhcp/dhcpduser.keytab
#!/bin/bash
#
# This script is for secure DDNS updates on Samba,
# it can also add the 'macAddress' to the Computers object.
#
# Version: 0.9.6
#

##########################################################################
#                                                                        #
#    You can optionally add the 'macAddress' to the Computers object.    #
#    Add 'dhcpduser' to the 'Domain Admins' group if used                #
#    Change the next line to 'yes' to make this happen                   #
Add_macAddress='no'
#                                                                        #
##########################################################################

keytab=/etc/dhcp/dhcpduser.keytab

usage()
{
	cat <<-EOF
	USAGE:
	  $(basename "$0") add ip-address dhcid|mac-address hostname
	  $(basename "$0") delete ip-address dhcid|mac-address
	EOF
}

_KERBEROS()
{
	# get current time as a number
	test=$(date +%d'-'%m'-'%y' '%H':'%M':'%S)
	# Note: there have been problems with this
	# check that 'date' returns something like

	# Check for valid kerberos ticket
	#logger "${test} [dyndns] : Running check for valid kerberos ticket"
	klist -c "${KRB5CCNAME}" -s
	ret="$?"
	if [ $ret -ne 0 ]
	then
		logger "${test} [dyndns] : Getting new ticket, old one has expired"
		kinit -F -k -t $keytab "${SETPRINCIPAL}"
		ret="$?"
		if [ $ret -ne 0 ]
		then
			logger "${test} [dyndns] : dhcpd kinit for dynamic DNS failed"
			exit 1
		fi
	fi
}

rev_zone_info()
{
	local RevZone="$1"
	local IP="$2"
	local rzoneip
	rzoneip="${RevZone%.in-addr.arpa}"
	local rzonenum
	rzonenum=$(echo "$rzoneip" |  tr '.' '\n')
	declare -a words
	for n in $rzonenum
	do
		words+=("$n")
	done
	local numwords="${#words[@]}"

	unset ZoneIP
	unset RZIP
	unset IP2add

	case "$numwords" in
		1)
			# single ip rev zone '192'
			ZoneIP=$(echo "${IP}" | awk -F '.' '{print $1}')
			RZIP="${rzoneip}"
			IP2add=$(echo "${IP}" | awk -F '.' '{print $4"."$3"."$2}')
			;;
		2)
			# double ip rev zone '168.192'
			ZoneIP=$(echo "${IP}" | awk -F '.' '{print $1"."$2}')
			RZIP=$(echo "${rzoneip}" | awk -F '.' '{print $2"."$1}')
			IP2add=$(echo "${IP}" | awk -F '.' '{print $4"."$3}')
			;;
		3)
			# triple ip rev zone '0.168.192'
			ZoneIP=$(echo "${IP}" | awk -F '.' '{print $1"."$2"."$3}')
			RZIP=$(echo "${rzoneip}" | awk -F '.' '{print $3"."$2"."$1}')
			IP2add=$(echo "${IP}" | awk -F '.' '{print $4}')
			;;
		*)
			# should never happen
			exit 1
			;;
	esac
}

BINDIR=$(samba -b | grep 'BINDIR' | grep -v 'SBINDIR' | awk '{print $NF}')
[[ -z $BINDIR ]] && printf "Cannot find the 'samba' binary, is it installed ?\\nOr is your path set correctly ?\\n"
WBINFO="$BINDIR/wbinfo"

SAMBATOOL=$(command -v samba-tool)
[[ -z $SAMBATOOL ]] && printf "Cannot find the 'samba-tool' binary, is it installed ?\\nOr is your path set correctly ?\\n"

MINVER=$($SAMBATOOL -V | grep -o '[0-9]*' | tr '\n' ' ' | awk '{print $2}')
if [ "$MINVER" -gt '14' ]
then
	KTYPE="--use-kerberos=required"
else
	KTYPE="-k yes"
fi

# DHCP Server hostname
Server=$(hostname -s)

# DNS domain
domain=$(hostname -d)
if [ -z "${domain}" ]
then
	logger "Cannot obtain domain name, is DNS set up correctly?"
	logger "Cannot continue... Exiting."
	exit 1
fi

# Samba realm
REALM="${domain^^}"

# krbcc ticket cache
export KRB5CCNAME="/tmp/dhcp-dyndns.cc"

# Kerberos principal
SETPRINCIPAL="dhcpduser@${REALM}"
# Kerberos keytab as above
# krbcc ticket cache : /tmp/dhcp-dyndns.cc
TESTUSER="$($WBINFO -u | grep 'dhcpduser')"
if [ -z "${TESTUSER}" ]
then
	logger "No AD dhcp user exists, need to create it first.. exiting."
	logger "you can do this by typing the following commands"
	logger "kinit Administrator@${REALM}"
	logger "$SAMBATOOL user create dhcpduser --random-password --description='Unprivileged user for DNS updates via ISC DHCP server'"
	logger "$SAMBATOOL user setexpiry dhcpduser --noexpiry"
	logger "$SAMBATOOL group addmembers DnsAdmins dhcpduser"
	exit 1
fi

# Check for Kerberos keytab
if [ ! -f "$keytab" ]
then
	logger "Required keytab $keytab not found, it needs to be created."
	logger "Use the following commands as root"
	logger "$SAMBATOOL domain exportkeytab --principal=${SETPRINCIPAL} $keytab"
	logger "chown XXXX:XXXX $keytab"
	logger "Replace 'XXXX:XXXX' with the user & group that dhcpd runs as on your distro"
	logger "chmod 400 $keytab"
	exit 1
fi

# Variables supplied by dhcpd.conf
action="$1"
ip="$2"
DHCID="$3"
name="${4%%.*}"

# Exit if no ip address
if [ -z "${ip}" ]
then
	usage
	exit 1
fi

# Exit if no computer name supplied, unless the action is 'delete'
if [ -z "${name}" ]
then
	if [ "${action}" = "delete" ]
	then
		name=$(host -t PTR "${ip}" | awk '{print $NF}' | awk -F '.' '{print $1}')
	else
		usage
		exit 1
	fi
fi

# exit if name contains a space
case ${name} in
	*\ * )
		logger "Invalid hostname '${name}' ...Exiting"
		exit
		;;
esac

# if you want computers with a hostname that starts with 'dhcp' in AD
# comment the following block of code.
if [[ $name == dhcp* ]]
then
	logger "not updating DNS record in AD, invalid name"
	exit 0
fi

## update ##
case "${action}" in
	add)
		_KERBEROS
		count=0
		# does host have an existing 'A' record ?
		mapfile -t A_REC < <($SAMBATOOL dns query "${Server}" "${domain}" "${name}" A "$KTYPE" 2>/dev/null | grep 'A:' | awk '{print $2}')
		if [ "${#A_REC[@]}" -eq 0 ]
		then
			# no A record to delete
			result1=0
			$SAMBATOOL dns add "${Server}" "${domain}" "${name}" A "${ip}" "$KTYPE"
			result2="$?"
		elif [ "${#A_REC[@]}" -gt 1 ]
		then
			for i in "${A_REC[@]}"
			do
				$SAMBATOOL dns delete "${Server}" "${domain}" "${name}" A "${i}" "$KTYPE"
			done
			# all A records deleted
			result1=0
			$SAMBATOOL dns add "${Server}" "${domain}" "${name}" A "${ip}" "$KTYPE"
			result2="$?"
		elif [ "${#A_REC[@]}" -eq 1 ]
		then
			# turn array into a variable
			VAR_A_REC="${A_REC[*]}"
			if [ "$VAR_A_REC" = "${ip}" ]
			then
				# Correct A record exists, do nothing
				logger "Correct 'A' record exists, not updating."
				result1=0
				result2=0
				count=$((count+1))
			elif [ "$VAR_A_REC" != "${ip}" ]
			then
				# Wrong A record exists
				logger "'A' record changed, updating record."
				$SAMBATOOL dns delete "${Server}" "${domain}" "${name}" A "${VAR_A_REC}" "$KTYPE"
				result1="$?"
				$SAMBATOOL dns add "${Server}" "${domain}" "${name}" A "${ip}" "$KTYPE"
				result2="$?"
			fi
		fi

		# get existing reverse zones (if any)
		ReverseZones=$($SAMBATOOL dns zonelist "${Server}" "$KTYPE" --reverse | grep 'pszZoneName' | awk '{print $NF}')
		if [ -z "$ReverseZones" ]; then
			logger "No reverse zone found, not updating"
			result3='0'
			result4='0'
			count=$((count+1))
		else
			for revzone in $ReverseZones
			do
				rev_zone_info "$revzone" "${ip}"
				if [[ ${ip} = $ZoneIP* ]] && [ "$ZoneIP" = "$RZIP" ]
				then
					# does host have an existing 'PTR' record ?
					PTR_REC=$($SAMBATOOL dns query "${Server}" "${revzone}" "${IP2add}" PTR "$KTYPE" 2>/dev/null | grep 'PTR:' | awk '{print $2}' | awk -F '.' '{print $1}')
					if [[ -z $PTR_REC ]]
					then
						# no PTR record to delete
						result3=0
						$SAMBATOOL dns add "${Server}" "${revzone}" "${IP2add}" PTR "${name}"."${domain}" "$KTYPE"
						result4="$?"
						break
					elif [ "$PTR_REC" = "${name}" ]
					then
						# Correct PTR record exists, do nothing
						logger "Correct 'PTR' record exists, not updating."
						result3=0
						result4=0
						count=$((count+1))
						break
					elif [ "$PTR_REC" != "${name}" ]
					then
						# Wrong PTR record exists
						# points to wrong host
						logger "'PTR' record changed, updating record."
						$SAMBATOOL dns delete "${Server}" "${revzone}" "${IP2add}" PTR "${PTR_REC}"."${domain}" "$KTYPE"
						result3="$?"
						$SAMBATOOL dns add "${Server}" "${revzone}" "${IP2add}" PTR "${name}"."${domain}" "$KTYPE"
						result4="$?"
						break
					fi
				else
					continue
				fi
			done
	        fi
		;;
	delete)
		_KERBEROS

		count=0
		$SAMBATOOL dns delete "${Server}" "${domain}" "${name}" A "${ip}" "$KTYPE"
		result1="$?"
		# get existing reverse zones (if any)
		ReverseZones=$($SAMBATOOL dns zonelist "${Server}" --reverse "$KTYPE" | grep 'pszZoneName' | awk '{print $NF}')
		if [ -z "$ReverseZones" ]
		then
			logger "No reverse zone found, not updating"
			result2='0'
			count=$((count+1))
		else
			for revzone in $ReverseZones
			do
				rev_zone_info "$revzone" "${ip}"
				if [[ ${ip} = $ZoneIP* ]] && [ "$ZoneIP" = "$RZIP" ]
				then
					host -t PTR "${ip}" > /dev/null 2>&1
					ret="$?"
					if [ $ret -eq 0 ]
					then
						$SAMBATOOL dns delete "${Server}" "${revzone}" "${IP2add}" PTR "${name}"."${domain}" "$KTYPE"
						result2="$?"
					else
						result2='0'
						count=$((count+1))
					fi
					break
				else
					continue
				fi
			done
		fi
		result3='0'
		result4='0'
		;;
	*)
		logger "Invalid action specified"
		exit 103
	;;
esac

result="${result1}:${result2}:${result3}:${result4}"

if [ "$count" -eq 0 ]
then
	if [ "${result}" != "0:0:0:0" ]
	then
		logger "DHCP-DNS $action failed: ${result}"
		exit 1
	else
		logger "DHCP-DNS $action succeeded"
	fi
fi

if [ "$Add_macAddress" != 'no' ]
then
	if [ -n "$DHCID" ]
	then
		Computer_Object=$(ldbsearch "$KTYPE" -H ldap://"$Server" "(&(objectclass=computer)(objectclass=ieee802Device)(cn=$name))" | grep -v '#' | grep -v 'ref:')
		if [ -z "$Computer_Object" ]
		then
			# Computer object not found with the 'ieee802Device' objectclass, does the computer actually exist, it should.
			Computer_Object=$(ldbsearch "$KTYPE" -H ldap://"$Server" "(&(objectclass=computer)(cn=$name))" | grep -v '#' | grep -v 'ref:')
			if [ -z "$Computer_Object" ]
			then
				logger "Computer '$name' not found. Exiting."
				exit 68
			else
				DN=$(echo "$Computer_Object" | grep 'dn:')
				objldif="$DN
changetype: modify
add: objectclass
objectclass: ieee802Device"

				attrldif="$DN
changetype: modify
add: macAddress
macAddress: $DHCID"

				# add the ldif
				echo "$objldif" | ldbmodify "$KTYPE" -H ldap://"$Server"
				ret="$?"
				if [ $ret -ne 0 ]
				then
					logger "Error modifying Computer objectclass $name in AD."
					exit "${ret}"
				fi
				sleep 2
				echo "$attrldif" | ldbmodify "$KTYPE" -H ldap://"$Server"
				ret="$?"
				if [ "$ret" -ne 0 ]; then
					logger "Error modifying Computer attribute $name in AD."
					exit "${ret}"
				fi
				unset objldif
				unset attrldif
				logger "Successfully modified Computer $name in AD"
			fi
	else
		DN=$(echo "$Computer_Object" | grep 'dn:')
		attrldif="$DN
changetype: modify
replace: macAddress
macAddress: $DHCID"

		echo "$attrldif" | ldbmodify "$KTYPE" -H ldap://"$Server"
		ret="$?"
		if [ "$ret" -ne 0 ]
		then
			logger "Error modifying Computer attribute $name in AD."
			exit "${ret}"
		fi
			unset attrldif
			logger "Successfully modified Computer $name in AD"
		fi
	fi
fi

exit 0
chmod 755 /usr/local/bin/dhcp-dyndns.sh
authoritative;
ddns-update-style none;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option domain-name-servers 192.168.1.3, 192.168.1.2;
option domain-name "semifinal.irpo";
default-lease-time 3600;

pool {
max-lease-time 1800;
range 192.168.1.100 192.168.1.200;
}
}

on commit {
set ClientIP = binary-to-ascii(10, 8, «.», leased-address);
set ClientDHCID = concat (
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2)
);

set ClientName = pick-first-value(option host-name, config-option host-name, client-name, noname);
log(concat("Commit: IP: ", ClientIP, " DHCID: ", ClientDHCID, " Name: ", ClientName));
execute("/usr/local/bin/dhcp-dyndns.sh", "add", ClientIP, ClientDHCID, ClientName);
} 

on release { 
set ClientIP = binary-to-ascii(10, 8, ".", leased-address); 
set ClientDHCID = concat ( 
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":", 
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":", 
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":", 
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":", 
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":", 
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2) ); 
log(concat("Release: IP: ", ClientIP)); 
execute("/usr/local/bin/dhcp-dyndns.sh", "delete", ClientIP, ClientDHCID); } 

on expiry { 
set ClientIP = binary-to-ascii(10, 8, ".", leased-address); 
# cannot get a ClientMac here, apparently this only works when actually receiving a packet 
log(concat("Expired: IP: ", ClientIP)); 
# cannot get a ClientName here, for some reason that always fails 
# however the dhcp update script will obtain the short hostname. 
execute("/usr/local/bin/dhcp-dyndns.sh", "delete", ClientIP, "", "0"); 
}

Отключим chroot для DHCP-сервера и запустим его:

control dhcpd-chroot disabled
systemctl enable --now dhcpd

Установка административных шаблонов и создание объектов домена

Задача: Установить ADMX-шаблоны, создать пользователей, группу, подразделение.

🔹 Хост: LIN-DC1

  1. Установим пакеты с шаблонами:
apt-get update && apt-get install admx-basealt admx-chromium admx-msi-setup gpui -y
  • Загрузим шаблоны MSI (для Windows-политик):
admx-msi-setup
  • Загрузим шаблоны в домен:
samba-tool gpo admxload -U Administrator
  • Создадим пользователей, группу и добавим пользователей в группу:
samba-tool user add LinUser1 P@ssw0rd
samba-tool user add LinUser2 P@ssw0rd
samba-tool group add LinUsers
samba-tool group addmembers LinUsers LinUser1,LinUser2

samba-tool user list --full-dn
  • Создадим подразделение LinOU и переместим в него пользователей:

 

samba-tool ou add "OU=LinOU,DC=semifinal,DC=irpo"
samba-tool user move "CN=LinUser1,CN=Users,DC=semifinal,DC=irpo" "OU=LinOU,DC=semifinal,DC=irpo"
samba-tool user move "CN=LinUser2,CN=Users,DC=semifinal,DC=irpo" "OU=LinOU,DC=semifinal,DC=irpo"

samba-tool user list --full-dn

Создание и настройка групповых политик (полезная информация)

Задача: Создать GPO IrpoStyle (тёмная тема) и ChromiumSSO (прозрачная аутентификация в браузере).

🔹 Хост: LIN-DC1 (или любой хост с GPUI)

  1. Создадим объекты GPO:
samba-tool gpo create IrpoStyle
samba-tool gpo create ChromiumSSO
  • Запустим редактор групповых политик:

gpui

  • В открывшемся окне выберите политику IrpoStyle и перейдите в раздел:
    Конфигурация пользователя → Административные шаблоны → ALT System Control → Оформление

    • Включите параметр «Тема оформления» и выберите значение «Тёмная».
    • Включите параметр «Запретить изменение темы оформления».
  • Выберите политику ChromiumSSO и перейдите в раздел:
    Конфигурация компьютера → Административные шаблоны → Google Chrome → Настройки Kerberos

    • Включите параметр «Включить аутентификацию Kerberos».
    • В параметре «Список серверов, для которых разрешена аутентификация Kerberos» укажите:

*.semifinal.irpo

  • Сохраним изменения в каждой политике.

Настройка файлового сервера на LIN-SRV1

Задача: Обеспечить общий анонимный ресурс Share, хранилище перемещаемых профилей Windows Profiles и личные папки UserDocs.

🔹 Хост: LIN-SRV1

  1. Установим Samba (файловый сервер):
apt-get update && apt-get install task-samba
  • Создадим каталоги и установим права:
mkdir -p /srv/share /opt/profiles /opt/UserDocs
chmod 777 /srv/share
chmod 700 /opt/profiles
samba-tool user list | while read user; do
if [[ "$user" != "Administrator" && "$user" != "krbtgt" && "$user" != "Guest" && ! "$user" =~ \\$ ]]; then
mkdir -p "/opt/UserDocs/$user"
chown "$user":"semifinal.irpo\\Domain Users" /opt/UserDocs/"$user"
chmod 700 "/opt/UserDocs/$user"
fi
done
  • Отредактируем файл /etc/samba/smb.conf, добавив в конец следующие секции:
[Share]
path = /srv/share
guest ok = yes
read only = no
browsable = yes
[Profiles]
path = /opt/profiles
read only = no
browsable = no
create mask = 0700
directory mask = 0700
csc policy = disable
profile acls = yes

[UserDocs]
path = /opt/UserDocs/%U
valid users = %U
read only = no
browsable = no
  • Запустим службу Samba:
systemctl enable --now smb

 


Настройка веб-сервера Apache с прозрачной аутентификацией (SSO)

Задача: Сайт http://web.semifinal.irpo должен авторизовывать доменных пользователей через Kerberos без ввода пароля.

🔹 Хост: LIN-SRV1

  1. Установим Apache и модуль GSSAPI:
apt-get install apache2 apache2-mod_auth_gssapi -y
  • Включим необходимые модули Apache:
a2enmod auth_gssapi
a2enmod authn_core
a2enmod authz_user
  • Создадим Service Principal Name (SPN) для веб-сервера в домене:
samba-tool spn add HTTP/web.semifinal.irpo@SEMIFINAL.IRPO LIN-SRV1$ -Uadministrator
samba-tool spn add HTTP/lin-srv1.semifinal.irpo@SEMIFINAL.IRPO LIN-SRV1$ -Uadministrator
  • Экспортируем keytab-файл с ключами для HTTP-сервиса:
samba-tool domain exportkeytab /etc/apache2/http.keytab —principal=HTTP/web.semifinal.irpo@SEMIFINAL.IRPO
samba-tool domain exportkeytab /etc/apache2/http.keytab —principal=HTTP/lin-srv1.semifinal.irpo@SEMIFINAL.IRPO
chown www-data:www-data /etc/apache2/http.keytab && chmod 600 /etc/apache2/http.keytab
  • Создадим конфигурацию виртуального хоста в файле /etc/apache2/sites-available/web.conf:
<VirtualHost *:80>
ServerName web.semifinal.irpo
DocumentRoot /var/www/web
<Location />
AuthType GSSAPI
AuthName «GSSAPI Login»
GssapiCredStore keytab:/etc/apache2/http.keytab
GssapiBasicAuth On
GssapiLocalName On
require valid-user
</Location>
</VirtualHost>
  • Создадим каталог для сайта и разместим в нём файл login.html (из /template):
mkdir -p /var/www/web
cp /template/login.html /var/www/web/index.html
  • Активируем сайт и перезагрузим Apache:
a2ensite web.conf 
systemctl reload apache2

Ввод Linux-клиента в домен (LIN-CLI1)

Задача: LIN-CLI1 должен стать членом домена, применять GPO и автоматически монтировать ресурс UserDocs.

🔹 Хост: LIN-CLI1

  1. Установим пакеты для аутентификации через AD и применения GPO:
apt-get update && apt-get install task-auth-ad-sssd gpupdate systemd-settings-enable-kill-user-processes -y
  • Введите машину в домен:
system-auth write ad semimifinal.irpo LIN-CLI1 SEMIFINAL Administrator P@ssw0rd --gpo
  • Перезагрузим компьютер:

systemctl reboot

  • После перезагрузки установим компоненты для автомонтирования:
apt-get install pam_mount cifs-utils -y
  • Добавим модуль pam_mount в схему аутентификации. В файл /etc/pam.d/system-auth в секцию session добавим строку:
session optional pam_mount.so disable_interactive
  • Настроим монтирование. В файле /etc/security/pam_mount.conf.xml перед закрывающим тегом </pam_mount> добавим:
<volume uid="10000-2000200000" fstype="cifs" server="lin-srv1.semifinal.irpo" path="UserDocs" mountpoint="~/DomainDocs" options="sec=krb5,vers=2.1,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775" />
  • Переместим учётную запись компьютера LIN-CLI1 в подразделение LinOU (выполнить на контроллере домена Lin-DC1):

 

samba-tool computer move "CN=LIN-CLI1,CN=Computers,DC=semifinal,DC=irpo" "OU=LinOU,DC=semifinal,DC=irpo"

Ввод Windows-клиентов в домен и настройка RSAT

Задача: WIN-CLI1 уже в домене, WIN-CLI2 ввести сейчас. На WIN-CLI1 установить RSAT.

🔹 Хост: WIN-CLI2

  1. Убедимся, что компьютер получает IP-адрес от DHCP-сервера (LIN-DC2).
  2. Откроим «Свойства системы» → «Имя компьютера» → «Изменить».

  1. Выберем «Является членом домена», вводим semifinal.irpo.
  2. Введем учётные данные администратора домена (Administrator, P@ssw0rd).
  3. Перезагрузим компьютер.

🔹 Хост: WIN-CLI1 (RSAT)

  1. Откроим «Управление» → «Добавить роли и компоненты».
  2. В разделе «Компоненты» найдем «Средства удалённого администрирования сервера» (RSAT).
  3. Установим оснастки: Active Directory – пользователи и компьютеры, Управление групповыми политиками, DNS-сервер.
  4. После установки оснастки будут доступны в меню «Администрирование».

Настройка мониторинга (Prometheus + Grafana) на LIN-SRV2

Задача: Сбор метрик с LIN-DC1, LIN-DC2, LIN-SRV1 и отображение на дашборде Grafana по адресу http://mon.semifinal.irpo.

🔹 Хост: LIN-SRV2

  1. Установим Prometheus, Grafana и Node Exporter:
apt-get install prometheus grafana prometheus-node_exporter -y
  • Запустим Node Exporter:
systemctl enable --now prometheus-node_exporter
  • Настроим Prometheus для сбора метрик с трёх целевых хостов. В файле /etc/prometheus/prometheus.yml в секции scrape_configs добавим:

— job_name: ‘node’

static_configs:

—  targets: [‘192.168.1.3:9100’, ‘192.168.1.2:9100’, ‘192.168.1.4:9100’]

  • Запустим Prometheus и Grafana:
systemctl enable --now prometheus
systemctl enable --now grafana-server
  • Настроим дашборд Grafana:
    • Откроем веб-интерфейс http://192.168.1.5:3000 (логин/пароль по умолчанию admin/admin).
    • Добавим источник данных Prometheus (URL: http://localhost:9090).
    • Импортируем готовый дашборд для Node Exporter (например, ID 1860 с grafana.com).
    • Для доступа по адресу http://mon.semifinal.irpo добавим соответствующую DNS-запись и настроим виртуальный хост в Apache.
samba-tool dns add 192.168.1.5 semimifinal.irpo mon A 192.168.1.4 -Uadministrator

🔹 Хосты: LIN-DC1, LIN-DC2, LIN-SRV1 (агенты)

  1. Установим и запустим Node Exporter:
apt-get install prometheus-node_exporter
systemctl enable --now prometheus-node_exporter

Резервное копирование (Кибер Бекап)

Задача: Настроить резервное копирование каталогов /opt/profiles и /opt/UserDocs с LIN-SRV1 на хост ADM.

🔹 Хост: LIN-SRV1 (сервер управления)

  1. Установим сервер управления Кибер Бекап, следуя инструкциям установщика из предоставленного ISO-образа.
  2. Для доступа по доменному имени создадим на LIN-DC1 DNS-запись:
samba-tool dns add 192.168.1.3 semimifinal.irpo backup A 192.168.1.4 -Uadministrator

После этого веб-интерфейс будет доступен по адресу http://backup.semifinal.irpo:9877.

 

🔹 Хост: ADM (агент и узел хранения)

  1. Установим агент Кибер Бекап из ISO-образа.
  2. В процессе установки укажем IP-адрес сервера управления: 192.168.1.4.
  3. После установки агента подключим его к серверу управления LIN-SRV1 через веб-интерфейс.
  4. На хосте ADM создадим каталог для хранения резервных копий:
mkdir /backup
  • В веб-интерфейсе сервера управления:
    • Создадим узел хранения с именем BackUpFolder, указав путь /backup на хосте ADM.
    • Создадим план резервного копирования с именем DomDataBackUp.
    • В плане укажем источник: папки /opt/profiles и /opt/UserDocs на LIN-SRV1.
    • Настроим расписание (например, ежедневно).
    • Убедимся, что план выполняется успешно.

Администрирование с хоста ADM (вне домена)

Задача: Обеспечить возможность управления доменом с помощью ADMC и GPUI без ввода хоста ADM в домен.

🔹 Хост: ADM

  1. Установим инструменты управления:
apt-get update && apt-get install admc gpui -y
  • Настройте Kerberos для работы вне домена. Файл /etc/krb5.conf должен содержать:
[libdefaults]
default_realm = SEMIFINAL.IRPO
dns_lookup_kdc = true
[realms]
SEMIFINAL.IRPO = {
kdc = 192.168.1.3
admin_server = 192.168.1.3
}

[domain_realm]
.semifinal.irpo = SEMIFINAL.IRPO
semifinal.irpo = SEMIFINAL.IRPO

  • Получим билет администратора домена:
kinit administrator@SEMIFINAL.IRPO
  • Запустим ADMC или GPUI:

admc

ИЛИ

gpui

 


Миграция данных и отключение WIN-DC

Задача: Перенести все данные, создать резервную копию, затем удалить старый контроллер Windows и выключить его.

🔹 Хост: LIN-DC1 (действия выполняются после полной настройки инфраструктуры)

  1. Перенесите содержимое SYSVOL со старого контроллера (WIN-DC) на новый, если оно ещё не было перенесено. Для этого можно временно подключить сетевую папку \\WIN-DC\SYSVOL и скопировать данные в /var/lib/samba/sysvol.
  2. Перенесите профили пользователей Windows со старого файлового сервера (если они там были) в /opt/profiles на LIN-SRV1.
  3. Убедитесь, что все существовавшие до миграции пользователи, группы и GPO корректно отображаются в новом домене (проверьте через ADMC или RSAT).
  4. Выполните резервное копирование данных с помощью плана DomDataBackUp (дождитесь успешного завершения).
  5. На контроллере LIN-DC1 выполните команду удаления WIN-DC из домена:

samba-tool domain demote —remove-other-dead-server=WIN-DC -Uadministrator

  • Очистите старые DNS-записи, относящиеся к WIN-DC:

bash

samba-tool dns delete 192.168.1.3 semimifinal.irpo WIN-DC A -Uadministrator

  • Выключите виртуальную машину WIN-DC.

Проверка выполнения чек-листа

После завершения всех шагов проверьте каждый пункт требований заказчика:

  • Синхронизация времени: chronyc sources -v на любом клиенте показывает источник 192.168.1.3.
  • Разрешение имён DNS: nslookup lin-srv1.semifinal.irpo возвращает правильный IP, nslookup 192.168.1.4 возвращает lin-srv1.semifinal.irpo.
  • Выдача DHCP: WIN-CLI2 получает IP из диапазона, в DNS появляются его A и PTR записи.
  • Отсутствие WIN-DC: в оснастке ADUC контроллеров только LIN-DC1 и LIN-DC2.
  • Роли FSMO: samba-tool fsmo show показывает владельца LIN-DC1.
  • Уровень домена: samba-tool domain level show выводит 2016 или выше.
  • Репликация SYSVOL: создание тестового файла в /var/lib/samba/sysvol/semifinal.irpo/scripts на одном DC приводит к его появлению на другом в течение 5 минут.
  • Вход старых пользователей: пользователи, существовавшие до миграции, могут войти на Windows и Linux клиентах.
  • GUID групповых политик: проверяется через ADSI Edit (не изменились).
  • Применение GPO на Windows: gpresult /r показывает применение политик IrpoStyle и ChromiumSSO.
  • Наличие LinUser1/2, LinUsers, LinOU: проверяется через ADUC или ADMC.
  • Политика IrpoStyle: на Windows-клиенте тёмная тема, кнопка смены темы заблокирована.
  • Политика ChromiumSSO: в браузере Chromium на Windows-клиенте при открытии http://web.semifinal.irpo не запрашивается пароль.
  • Доступность Share: \\LIN-SRV1\Share открывается без аутентификации.
  • Перемещаемые профили: настройки рабочего стола сохраняются при входе на разных Windows-клиентах.
  • Разграничение UserDocs: пользователь видит только свою папку.
  • Автомонтирование DomainDocs: после входа на LIN-CLI1 в домашней папке появляется каталог DomainDocs с содержимым UserDocs.
  • Мониторинг: дашборд Grafana отображает метрики CPU, RAM, Disk для трёх хостов.
  • Резервное копирование: в веб-интерфейсе Кибер Бекап есть успешные задания плана DomDataBackUp.
  • Управление с WIN-CLI1 (RSAT): можно создать/изменить пользователя.
  • Управление с ADM: запускаются ADMC и GPUI, доступно редактирование объектов и политик.
  • Ввод WIN-CLI2: компьютер введён в домен, на него распространяются GPO.
  • DNS-записи: для всех включённых хостов существуют A и PTR записи.