KMS сервер активации Microsoft на базе Debian

Вопрос “соблюдения лицензионных соглашений” данного варианта в текущих реалиях оставим на потом, следует понимать, что данный материал публикуется исключительно в образовательных целях. Этот материал опирается на публично открытые программные продукты и не преследует цели нарушения норм действующего законодательства и правил лицензирования ПО.

Итак, имеем уже настроенный сервер с операционной системой Debian 12. Произведём сборку deb-пакета из исходных кодов проекта vlmcsd. Устанавливаем служебные пакеты

apt install git build-essential debhelper -y

Создаём каталог для сборки пакета

mkdir ~/vlmcsd-build
cd ~/vlmcsd-build

Клонируем с GitHub исходный код проекта

git clone https://github.com/Wind4/vlmcsd
cd ~/vlmcsd-build/vlmcsd

Дополнительно подкачиваем в каталог с клонированными исходниками

git submodule update --init debian

Выполняем сборку deb-пакета

dpkg-buildpackage -rfakeroot -D -us -uc

Дожидаемся окончания сборки пакета, проверяем наличие пакета

cd ~/vlmcsd-build
ls -la ~/vlmcsd-build

total 276
drwxr-xr-x 3 root root 4096 Dec 1 20:17 .
drwx------ 7 root root 4096 Dec 1 20:48 ..
drwxr-xr-x 11 root root 4096 Dec 1 20:17 vlmcsd
-rw-r--r-- 1 root root 4765 Dec 1 20:17 vlmcsd_1113_amd64.buildinfo
-rw-r--r-- 1 root root 1340 Dec 1 20:17 vlmcsd_1113_amd64.changes
-rw-r--r-- 1 root root 81668 Dec 1 20:17 vlmcsd_1113_amd64.deb
-rw-r--r-- 1 root root 534 Dec 1 20:17 vlmcsd_1113.dsc
-rw-r--r-- 1 root root 168808 Dec 1 20:17 vlmcsd_1113.tar.xz

Устанавливаем готовый deb-пакет в систему

dpkg -i ./vlmcsd_1113_amd64.deb

В процессе установки будет запущена служба vlmcsd.service

systemctl status vlmcsd.service

vlmcsd.service - Vlmcsd (KMS Emulator in C)
Loaded: loaded (/lib/systemd/system/vlmcsd.service; enabled; preset: enabled)
Drop-In: /etc/systemd/system/vlmcsd.service.d
└─override.conf
Active: active (running) since Fri 2023-12-01 20:30:35 MSK; 2 days ago
Main PID: 3004 (vlmcsd)
Tasks: 1 (limit: 2140)
Memory: 204.0K
CPU: 20ms
CGroup: /system.slice/vlmcsd.service
└─3004 /usr/bin/vlmcsd -i /etc/vlmcsd/vlmcsd.ini -D

Служба запущена с использованием конфигурационного файла /etc/vlmcsd/vlmcsd.ini.
В этом файле можно изменить параметры работы службы. Отключим TCP прослушиватель для IPv6, убрав комментарий в строке указывающей на использование IPv4

...
Listen = 0.0.0.0:1688
...

Также включим логирование службы (изменим путь к лог-файлу по умолчанию, добавив в /var/log/ отдельный подкаталог vlmcsd)

...
LogFile = /var/log/vlmcsd/vlmcsd.log
...

После правок файла конфигурации создаём каталог под логи и перезапускаем службу

mkdir /var/log/vlmcsd
systemctl restart vlmcsd.service

Проверим, что в системе поднялся TCP-прослушиватель службы на порту 1688

ss -lnptu | grep 1688

tcp LISTEN 0 4096 0.0.0.0:1688 0.0.0.0:* users:(("vlmcsd",pid=3004,fd=4))

Если попытаемся проверить лог-файл, обозначенный в конфигурации vlmcsd.ini, то обнаружим его отсутствие. Смотрим в свойства службы, как юнита systemd

systemctl cat vlmcsd

# /lib/systemd/system/vlmcsd.service
[Unit]
Description=Vlmcsd (KMS Emulator in C)
After=network.target

[Service]
Type=simple
User=nobody
Group=nogroup
ExecStart=/usr/bin/vlmcsd -i /etc/vlmcsd/vlmcsd.ini -D

Запуск службы настроен в контексте пользователя “nobody”. Создаём нового системного пользователя

useradd -s /usr/sbin/nologin -r -M vlmcsd

Назначаем на каталог с логами права для созданного пользователя и его группы

chown -R vlmcsd:vlmcsd /var/log/vlmcsd

Теперь создадим override для службы vlmcsd.service таким образом, чтобы служба запускалась в контексте пользователя “vlmcsd” с одноимённой группой

systemctl edit vlmcsd.service

Добавляем в override-файл

[Service]
User=vlmcsd
Group=vlmcsd

Сохраняем override-файл, закрываем его и перезапускаем конфигурацию служб

systemctl daemon-reload
systemctl restart vlmcsd.service
systemctl cat vlmcsd.service

Проверяем: состояние службы; наличие TCP прослушивателя; пользователя, от которого запущена служба; успешность записи в лог файл

systemctl status vlmcsd.service
ss -lnptu | grep 1688
ps -aux | grep vlmcsd
cat /var/log/vlmcsd/vlmcsd.log
vlmcsd.service - Vlmcsd (KMS Emulator in C)
Loaded: loaded (/lib/systemd/system/vlmcsd.service; enabled; preset: enabled)
Drop-In: /etc/systemd/system/vlmcsd.service.d
└─override.conf
Active: active (running) since Fri 2023-12-01 20:30:35 MSK; 2 days ago
Main PID: 3004 (vlmcsd)
Tasks: 1 (limit: 2140)
Memory: 204.0K
CPU: 20ms
CGroup: /system.slice/vlmcsd.service
└─3004 /usr/bin/vlmcsd -i /etc/vlmcsd/vlmcsd.ini -D

Dec 01 20:30:35 KMS systemd[1]: Started vlmcsd.service - Vlmcsd (KMS Emulator in C).
tcp LISTEN 0 4096 0.0.0.0:1688 0.0.0.0:* users:(("vlmcsd",pid=3004,fd=4))
vlmcsd 3004 0.0 0.0 2504 1664 ? Ss Dec01 0:00 /usr/bin/vlmcsd -i /etc/vlmcsd/vlmcsd.ini -D
root 4687 0.0 0.1 6344 2304 pts/0 S+ 13:02 0:00 grep vlmcsd
2023-12-01 20:29:34: Read ini file /etc/vlmcsd/vlmcsd.ini
2023-12-01 20:29:34: Listening on 0.0.0.0:1688

Служба запущена от имени выделенного пользователя “vlmcsd”, в системе доступен TCP-прослушиватель на порту 1688, логи службы успешно записываются в указанный файл. На этом настройку KMS сервера можно считать законченной.

Для возможности активации с развёрнутого KMS сервера, ОС Windows должна быть настроена в качестве KMS клиента путём предварительной установки в систему публично доступного ключа Generic Volume License Key (GVLK)

slmgr.vbs -ipk KMS-GVLK-KEY
slmgr.vbs -skms <IP или FQDN хоста KMS>
slmgr.vbs -ato

Проверить текущий статус активации

slmgr.vbs -dlv

Для активации 32-битной версии Office 2016 на Windows 10 можно выполнить команды

cd /d "C:\Program Files (x86)\Microsoft Office\Office16"
cscript ospp.vbs /sethst:<IP или FQDN хоста KMS>
cscript ospp.vbs /act

Проверить текущий статус активации Office

cscript ospp.vbs /dstatusall

Чтобы продукты Microsoft могли в автоматическом режиме находить KMS-сервер в сети, в DNS записи необходимо добавить SRV-запись и A-запись, указывающую на ip сервера активации

_vlmcs._tcp.company.local SRV service location:
priority = 0
weight = 0
port = 1688
svr hostname = kms.company.local
kms.company.local internet address = XXX.XXX.XXX.XXX

в DNS сервер от Microsoft, необходимо сделать следующее:

Открыть оснастку DNS
Перейти: <имя сервера> -> Зоны прямого просмотра -> company.local
Нажать ПКМ на названии вашего домена и выбрать “Другие новые записи”
В списке “Выбор типа записи ресурса” найти: “Расположение службы (SRV)” и нажать “Добавить”
В поля вписать:
Служба: _vlmcs
Протокол: _tcp
Приоритет: 0
Вес: 0
Порт: 1688
Узел этой службы: kms.company.local
Яндекс.Метрика