В данной заметке мы рассмотрим вариант развёртывания альтернативного KMS сервера, позволяющего активировать современные версии ОС Microsoft Windows/Windows Server и пакета Microsoft Office. Этот вариант будет реализован на базе ОС Debian GNU/Linux 11 (Bullseye) и исходных кодов открытого проекта vlmcsd. Для своей работы KMS сервер vlmcsd не требует наличия купленных KMS-ключей или какой-либо онлайн-активации в Microsoft. Вопрос "лицензионной чистоты" данного варианта в текущих реалиях оставим на обсуждение любителям философии и "кинутым" заказчикам известного вендора. При этом, следует понимать, что изложенный далее материал публикуется исключительно в образовательных целях и не позиционируется, как руководство к действию. Этот материал опирается на публично открытые программные продукты и не преследует цели нарушения норм действующего законодательства и правил лицензирования ПО. И вообще, мы за всё хорошее и против всего плохого. Поехали…
Сборка пакета vlmcsd под Debian
Предполагается, что под роль KMS у нас уже подготовлен выделенный сервер и на него установлена чистая ОС Debian 11. Произведём сборку deb-пакета из исходных кодов проекта vlmcsd.
Устанавливаем служебные пакеты, требуемые для сборки 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
Дополнительно подкачиваем в каталог с клонированными исходниками (файлы попадут в подкаталог /debian) готовые файлы дебианизации, которые нам потребуются для сборки пакета в Debian:
# git submodule update --init debian
Выполняем сборку deb-пакета:
# dpkg-buildpackage -rfakeroot -D -us -uc
Дожидаемся окончания сборки пакета, переходим на каталог уровнем выше и проверяем наличие пакета.
# cd ~/vlmcsd-build
# ls -la ~/vlmcsd-build
Устанавливаем готовый deb-пакет в систему:
# dpkg -i ./vlmcsd_1113_amd64.deb
Настройка службы vlmcsd
В процессе установки будет запущена служба vlmcsd.service. Проверим её состояние:
# systemctl status vlmcsd.service
Как видим, служба запущена с использованием конфигурационного файла /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
Не забываем открыть соответствующий порт в правилах nftables/iptables.
Теперь давайте посмотрим, как у нас обстоят дела с логированием работы службы. Если попытаемся проверить лог-файл, обозначенный в конфигурации vlmcsd.ini, то можем обнаружить его отсутствие в файловой системе. Это связано в тем, что гражданин, который готовил файлы дебаиназиации, не очень заморачивался по поводу культуры запуска службы.
Давайте заглянем в свойства службы, как юнита systemd:
# systemctl cat vlmcsd
Как увидим, запуск службы настроен в контексте пользователя "nobody".
Исправим эту ситуацию, создав нового выделенного пользователя, например "vlmcsd", и написав правила переопределения (override) для юнита systemd.
Создаём нового системного пользователя:
# 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", в системе доступен TCP-прослушиватель на порту 1688, а логи службы успешно записываются в указанный нами файл. На этом настройку KMS сервера можем считать законченной и переходить к его тестированию.
Проверка работы KMS
Для возможности активации с развёрнутого KMS сервера, ОС Windows должна быть настроена в качестве KMS клиента путём предварительной установки в систему публично доступного ключа Generic Volume License Key (GVLK).
Найти ключи GVLK для клиентских и серверных ОС Windows можно по адресу: "Key Management Services (KMS) client activation and product keys for Windows Server and Windows"
Попробуем провести активацию современной серверной ОС Windows Server 2022 21H2 Standard. Для этого на только что установленной и ещё неактивированной ОС с правами администратора выполним команды установки GVLK ключа, указания адреса KMS сервера и последующей активации:
slmgr.vbs -ipk VDYBN-27WPP-V4HQT-9VMD4-VMK7H
slmgr.vbs -skms <IP или FQDN хоста KMS>
slmgr.vbs -ato
При выполнении последней команды мы должны получить сообщение об успешной активации Windows.
Проверить текущий статус активации можем командой:
slmgr.vbs -dlv
Аналогичным образом проверяем возможность активации клиенткой ОС Windows 10 21H2 Pro, используя GVLK "W269N-WFGWX-YVC9B-4J6C9-T83GX".
Теперь нам остаётся проверить возможность активации пакета Microsoft Office.
Официальные ключи GVLK для Office 2016/2019/2021 можно найти по ссылке: "GVLKs for KMS and Active Directory-based activation of Office, Project, and Visio - Deploy Office".
Например, для активации 32-битной версии Office 2016 Pro на 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
Другие варианты развертывания сервера KMS
Если описанный выше вариант самостоятельного развёртывания сервера KMS на базе исходных кодов vlmcsd кажется вам чем-то сложным и у вас полностью атрофировано чувство страха перед "чёрными ящиками" в виде готовых виртуальных аплайнсов из непроверенных источников, то можете обратить внимание на проект Иранских коллег с ресурса "DiGiBoY".
"DiGiBOX" – это миниатюрный образ готовой виртуальной машины VMWare, собранный на базе 32-битной версии Alpine Linux, требующий 1 процессорного ядра и 128 MB ОЗУ.
При запуске аплайнса достаточно указать базовые параметры IP с помощью TUI в команде digibox-config и уже через минуту эта система будет готова принимать и обрабатывать запросы от KMS-клиентов из локальной сети. Аплайнс не требует доступа в интернет и может быть размещён в изолированной сетевой "песочнице", из которой достаточно иметь открытый порт TCP 1688 для работы сервера KMS.
Добрый день. Спасибо за статью. В тексте небольшая опечатка:
Убедимся, что в системе поднялся TCP-прослушиватель службы на порту 1668:
# ss -lnptu | grep 1688
Здравствуйте, Денис. Спасибо, исправил.
Добрый день. office 2021 я так понял нет поддержки ?
Здравствуйте, Alex.
Однозначно сказать не могу, сам это не проверял.
В конфигурационном файле vlmcsd.ini фигурируют упоминания о версиях Office 2010/2013/2016/2019, к тому же релиз текущей версии vlmcsd был в 2020 году.
Однако, на github есть issue по этому поводу, и там отрицательного ответа на этот вопрос нет. https://github.com/Wind4/vlmcsd/issues/71
LICENSE NAME: Office 21, Office21ProPlus2021VL_KMS_Client_AE edition
LICENSE DESCRIPTION: Office 21, VOLUME_KMSCLIENT channel
LICENSE STATUS: ---LICENSED---
REMAINING GRACE: 180 days (259200 minute(s) before expiring)
Активирует. Поддержка есть.
Всё развернул) Как узнать адрес своего KMS cервера?
выполнить: ip -a на сервере
Добрый день. Активация на 180 дней. Дальше нужно будет вручную ту же процедуру активации выполнять?
Здравствуйте, Александр.
По окончании указанного периода KMS-клиент должен будет автоматически обновить свою активацию на KMS-сервере.
всем кому лень разворачивать своё, вот публичный сервер: kms.srv.crsoo.com
Так себе - затея "отстукивать" на сторонний, непонятно кому принадлежащий, KMS сервер.
Добрый день. Как автоматизировать процесс активации? Поднял я сервер, ручками всё работает. Как сделать так, что бы компы в домене сами получали активацюию?
Зачем нужно поднимать целый сервер, если условно говоря всё это можно проделать через kms активатор?...
Здравствуйте, Иван.
Варианты настройки клиентов есть разные. Можно, например, настроить групповые политики, чтобы направить всех доменных клиентов на определённый сервер: https://blog.it-kb.ru/2013/09/27/setting-up-key-management-service-kms-server-settings-via-group-policy-preferences-gpp-on-clients/
К сожалению не работает.
Я видимо чего-то не понимаю.
В сам сервер\службу vlmcsd нужно прописывать какие либо ключи?
Если подразумевается автоматическая активация а не ручная, как у Вас в статье, откуда сервер vlmcsd будет брать ключи?...
В любом случае, прописал в реестр параметры сервера, которые в общем и так уже были (кроме порта), перезагрузился, чуда не произошло.
Хотя повторю, ручками всё работает и активирует.
Пк в домене по команде:
nslookup -type=srv _vlmcs._tcp.mygroup.ru
видят данный kms сервер...
Тестовая ОС версии VL, все брэндмауэры и антивирусы отключены....
То, что здесь описано - работает. Служба vlmcsd является по сути эмулятором KMS-сервера и в неё уже вшито всё, что нужно. Никаких ключей никуда вводить не нужно.
Ясно, спасибо.
Добрый день. В ссылке указано как прописать пути до КМС сервера. Касательно подтягивания клиентских GVLK ключей вопрос открытый. Клиент не подтягивает их автоматически. Это как-то можно автоматизировать, как и прописание путей в регистре?
Отличная статья, все легко настраивается, локальный KMS функционирует.
не понял где взять ospp.vbs ?
говорит что его нет.
C:\Program Files (x86)\Microsoft Office\Office16 - это путь к файлу, в зависимости от версии Офиса и его разрядности при установке может быть другим - посмотри свойства ярлыка запуска Ворда или Эксела. Там будет реальный путь
cat: /var/log/vlmcsd/vlmcsd.log: No such file or directory
тоже самое происходит при попытке tail
tail: cannot open '/var/log/vlmcsd/vlmcsd.log' for reading: No such file or directory
tail: no files remaining
почему не создаёт лог
No Office KMS licenses were found on the system - чтот с офисом не выходит "каменный цветок", с виндой проблем нет.