Часть 1 из 2, подготовка стенда
В связке с AD/LDAP и еще чем получится. Займет примерно три вечера на домашнем стенде.
Часть 1. Собираем лабу, на что один вечер и уйдет.
1.1 Нам потребуется:
VMware Workstation Player - https://www.vmware.com/products/workstation-player.html
Windows server 2016/2019/2022 – в целом без разницы. Но есть нюанс – раздаваемый много где evaluation у меня не смог при установке найти файл лицензий, и пришлось поискать у поставщиков параллельного импорта. Windows server ставим английский, это сбережет массу времени и сейчас и в будущем.
Debian 11 (или позже, но сейчас 11.4 - брать тут
(Можно и не Debian, но мне он почему-то нравится).
Что потребуется по аппаратной части: 6 гигов оперативки и 80 гигов места – 60 под Windows Server с развернутой AD (хватит и 25) и 20 под Debian. Правильней ставить сразу отдельно второй сервер с Windows CA – но в другой раз.
Систему можно запустить на любом домашнем ПК старше 2012 года: A compatible 64-bit x86/AMD64 CPU launched in 2011 or later , но все равно надо много оперативки.
1.2 Подготовка стенда. VMware player или что-то интересней.
Hyper-V прекрасен, но в моем Windows Home 11 я не уверен, есть он или нет. Да и привык я к VMware, поэтому ставим VMware player, к тому же он бесплатный для дома: VMware Workstation Player is free for personal, non-commercial use (business and nonprofit use is considered commercial use). If you would like to learn about virtual machines or use them at home, you are welcome to use VMware Workstation Player for free.
Ставим, далее-далее-готово. Создаем и заполняем у себя текстовый файл – Windows server administrator, debian user/password, debian root.
В моем случае:
Windows: Domain Administrator - Pa$$word1
Пароль восстановления AD нам не потребуется на этот раз, поэтому его заводим как “Restore1”
Debian:
vuser / vPa$$word
root / rootPa$$word
НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ПРОСТЫЕ ПАРОЛИ И ПАРОЛИ ИЗ ПРИМЕРОВ В РАБОЧЕЙ СЕТИ.
Создаем VM (Тип сети – NAT), ставим Windows + AD. Правильнее, конечно, развернуть еще CA на отдельном сервере, но про это я напишу попозже и отдельно.
Процесс скучен. Не забываем после установки Windows: поставить пароль локальному администратору (который станет доменным), переименовать VM (у меня это dc001), поставить патчи. Ставить патчи стоит до настройки AD и до настройки статического IP, чтобы на первом этапе не возиться с настройками DNS в домене.
После перезагрузок включить RDP, и зайти через него. Почему RDP: потому что в дальнейшем будет какое-то количество скриптов, и их удобней копировать в RDP сессии. Хотя в VMware workstation с установленными tools работает и Copy-paste over console. В VMware ESXi наоборот, Copy-paste over console по умолчанию выключен – поэтому сразу привыкаем к RDP.
Start-Run – mstsc / User name: ./Administrator и поехали
В Windows среде вопрос copy-paste в консоль (RSXi, vnc, idrac и прочие) давно решен через простой скрипт:
$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('title of the application window')
Sleep 1
$wshell.SendKeys('~')
(скрипт отсюда )
После установки останется настроить static IP, DNS, затем добавить роль AD. В моем случае домен будет Contoso.lab, первый сервер в новом лесу, далее-далее-готово.
Просмотр IP, если кто забыл – правую кнопку мыши – run – powershell ise , ipconfig/all
Get-NetAdapter
Get-NetIPAddress
Get-NetIPConfiguration
Было:
IPv4DefaultGateway : 192.168.31.2
DNSServer 192.168.31.2
Стало:
Set-DnsClientServerAddress -InterfaceIndex 10 -ServerAddresses 192.168.31.151
New-NetIPAddress -InterfaceIndex 10 -IPAddress 192.168.31.151 -PrefixLength 24 -DefaultGateway 192.168.31.2
(на этом моменте rdp вы потеряете)
Что касается IP v6, то отключать его НЕ НАДО НИ В КОЕМ СЛУЧАЕ.
О чем много лет написано в Guidance for configuring IPv6 in Windows for advanced users - We do not recommend that you disable IPv6 or its components
но можно сделать, как давно описано: нажать правую кнопку на пуске, выбрать run – powershell ISE и выполнить простейший скрипт:
Break #In case you paste this in to PowerShell ISE and press run script:)
#Check if IPv4 IP address is preferred
ping $env:COMPUTERNAME
#If the reply is IPv6 address, run following registry setting to just prefer ipv4 and reboot
New-ItemProperty “HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\” -Name “DisabledComponents” -Value 0x20 -PropertyType “DWord”
#If DisabledComponents exists, use the set cmdlet
Set-ItemProperty “HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\” -Name “DisabledComponents” -Value 0x20
#You need to reboot the computer in order for the changes to take effect
Restart-Computer
Окей, статический IP настроен, AD установлен, сервер перезагружен, заходим как administrator@contoso.lab
И сразу настроим DNS – можно в GUI
Лучше в powershell:
Get-DnsServer -ComputerName “dc001.contoso.lab” | Export-Clixml -Path "c:\DnsServerConfig.xml"
Notepad "c:\DnsServerConfig.xml"
- это чтобы не привыкали к хорошему, потому что настройка DNS forward вызывается отдельно, и мало того – видна только при запуске powershell от имени администратора.
Жизнь без бороды в консоли без запуска ее от администратора
Жизнь с бородой в консоли от администратора
(я уже из gui настроил 8.8.4.4 )
Но все равно добавим
Add-DnsServerForwarder -IPAddress 8.8.8.8 –PassThru
Часть 1.3 – Создаем пользователей в AD.
Создадим OU для имитации рабочей среды, и пользователей: трех сотрудников и служебную учетную запись.
Создаем:
Organizational unit (OU): Zoo MSK/N Watch, Robo base/Vault
Такие странные имена добавлены для того, чтобы показать возможность работы с пробелами в имени OU.
В Zoo MSK/N Watch создаем трех пользователей и группу:
В OU Zoo MSK/N Watch – Ivan Ivanov (contoso/ivanov), Ivan Petr(contoso/petr), Иван Волк и группу vault login
Петрова сразу включим в группу vault login.
В OU Robo base/Vault – создаем vault connector (contoso/vault)
OU, двух сотрудников и служебную запись можно (нужно) создать скриптом, это сэкономит немного времени, но добавит поучительных проблем.
Внимательно следим за пробелами при изменении под себя.
Создаем OU (документация по OU)
-ProtectedFromAccidentalDeletion $False используется, поскольку это стенд и каждый раз снимать чекбокс «разрешить удаление» в GUI / ADUC мне лень.
New-ADOrganizationalUnit -name "Zoo MSK" -Path "DC=CONTOSO,DC=LAB" -ProtectedFromAccidentalDeletion $False
New-ADOrganizationalUnit -name "N Watch" -Path "OU=Zoo MSK,DC=CONTOSO,DC=LAB" -ProtectedFromAccidentalDeletion $False
New-ADOrganizationalUnit -name "Robo base" -Path "DC=CONTOSO,DC=LAB" -ProtectedFromAccidentalDeletion $False
New-ADOrganizationalUnit -name "Vault" -Path "OU=Robo base,DC=CONTOSO,DC=LAB" -ProtectedFromAccidentalDeletion $False
Создаем пользователей:
Документ по созданию поновей,
документ по созданию постарей, но интересней.
Внимательно следим за пробелами и кавычками при изменении под себя, иначе вставите пару пробелов и получите ошибку - New-ADUser : Directory object not found
$Pwd = ConvertTo-SecureString "Pa$$word2" -AsPlainText -Force
New-ADUser -name "Vault connector" -Accountpassword $Pwd -DisplayName "Vault connector" -Enabled $true -Path "OU=Vault,OU=Robo base,DC=CONTOSO,DC=LAB" -SamAccountName "VaultSAM" -userPrincipalName "VaultUPN"
Remove-Variable -Name Pwd
Теперь сходите в GUI и посмотрите, какая фигня вышла. Но нам так и надо для примера, что с такими именами и паролями все будет работать плохо. Увидите ниже.
Заводим остальных
$OUP = "OU=N Watch,OU=Zoo MSK,DC=CONTOSO,DC=LAB"
$Pwd = ConvertTo-SecureString "Pa$$word3" -AsPlainText -Force
New-ADUser -name "Ivan Ivanov" -Accountpassword $Pwd -DisplayName "Ivan Ivanov" -Enabled $true -Path $OUP -SamAccountName "Ivanov" -userPrincipalName "Ivanov"
Remove-Variable -Name Pwd
$Pwd = ConvertTo-SecureString "Pa$$word4" -AsPlainText -Force
New-ADUser -name "Ivan Petr" -Accountpassword $Pwd -DisplayName "Ivan Petr" -Enabled $true -Path $OUP -SamAccountName "Petrov" -userPrincipalName "Petrov"
Remove-Variable -Name Pwd
New-ADGroup -Name "Vault login" -SamAccountName "VltADM" -GroupCategory Security -GroupScope Global -Path $OUP -Description "Example"
Add-ADGroupMember -Identity "VltADM" -Members Petrov
Get-ADGroupMember -Identity "VltADM" | ft
И одного пользователя в OU OU=N Watch,OU=Zoo MSK создаем из GUI – Иван Волк, username Volk, пароль Pa!!word5 (обратите внимание, у двух пользователей пароли Pa$$word, у третьего – Pa!!word5)
На этом настройка Windows server и AD завершена.
Часть 1.4 Настраиваем Debian 11 для Vault
Скачиваем ISO, создаем VM, тип сети – NAT, далее-далее, LVM – все на одном диске.
Можно и без LVM, нам диск расширять не придется. В случае рабочей сети, возможно, стоит LVM зашифровать. Хуже не будет. Лучше впрочем тоже, хотя в любом случае нужен бекап.
Устанавливаем без GUI, только SSH (на скрине не выбран) и standard
После установки заходим как юзер (vuser), смотрим адрес (ip a) и дальше работаем по SSH
Вспоминаем, что 192.168.31.151 выдан AD. В больших организациях за статическими адресами нужен учет, в любом IPAM – хоть в SolarWinds IPAM, хоть в Netbox, хоть в phpIPAM. Netbox, по моему, лучший.
Vi тут и застрять можно, и никакого q!
su
nano /etc/network/interfaces
До изменений:
# The primary network interface
allow-hotplug ens33
iface ens33 inet dhcp
После изменений:
iface ens33 inet static
address 192.168.31.155
netmask 255.255.255.0
gateway 192.168.31.2
dns-nameserver 192.168.31.151
Сразу настроим NTP
systemctl status systemd-timesyncd
nano /etc/systemd/timesyncd.conf
(и пропишем что нам надо)
Поставим массу нужного и не нужного.
nano /etc/apt/sources.list
закомментируем DVD, и если уж очень хочется – добавим
deb http://deb.debian.org/debian bullseye main contrib non-free
Поехали.
apt update
apt list --upgradable
apt upgrade –y
apt install sudo curl gnupg2 gpg git unzip openssl ldap-utils tcpdump –y
(нужно из этого не все, но часть нужна для примеров отладки)
В рабочей среде не забываем про использование sudo - правим
nano /etc/sudoers
Где-то тут перезагрузимся и, наконец, переходим к установке vault.
Часть 2. Установка Vault.
При попытке сделать по руководству
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg >/dev/null
получим запрет. Свободная свобода не для всех.
Часть 2.1 Выбор дистрибутива.
Если верить release notes, то ничего новее 11.0 не было с 21 июня. При этом на https://www.vaultproject.io/downloads лежит ссылка на https://releases.hashicorp.com/vault/1.11.2/vault_1.11.2_linux_amd64.zip
с sha256 – ace4138269cb7214c73529f984b793d66074e3a3ad373eaa77bc9b39490d9ef9 vault_1.11.2_linux_amd64.zip
следите за цифрами, я по ошибке сначала скачал vault_1.1.2_linux_amd64.zip вместо vault_1.11.2_linux_amd64.zip, и потом минут 20 пытался понять, почему у меня «Unknown storage type raft»
Сверяем md5 и прочие sha на хосте-
Get-FileHash vault_1.11.2_linux_amd64.zip -Algorithm SHA256
Закачаем архив куда положено ему. Из командной строки
pscp c:\soft\vault_1.11.2_linux_amd64.zip vuser@192.168.31.155:/home/vuser
или из powershell
.\pscp c:\soft\vault_1.11.2_linux_amd64.zip vuser@192.168.31.155:/home/vuser
(pscp из комплекта к putty, можно Winscp заменить или как угодно еще).
Пойдем обратно в терминал Debian
cd /home/vuser
Ls
Распакуем архив
unzip vault_1.11.2_linux_amd64.zip
и дальше пойдем от рута, хотя это и неправильно.
Su
mv ./vault /usr/local/bin/
vault –h
На следующем шаге все руководства, включая официальное, рекомендуют запустить в dev-режиме. Dev режим – когда конфигурация не сохраняется, все в памяти.
Окей,
vault server -dev
оно запустилось, и что? CTRL-C
Дальше надо читать много про hcl файлы и секреты из официальной документации, и я настоятельно рекомендую это сделать и попробовать до проведения следующих шагов.
Часть 2.2 Первичная установка Vault
Нам интересно настроить связку с AD, поэтому пойдем быстро и без SSL (и CA для SSL у меня в стенде пока нет) –
Cd /
mkdir datalab
cd datalab
mkdir vaultdata
cd /home/vuser
nano vaultcongig1.hcl
Содержимое:
storage "raft" {
path = "/datalab/vaultdata"
node_id = "node1"
}
listener "tcp" {
address = "192.168.31.155:8200"
tls_disable = "true"
}
api_addr = "http://192.168.31.155:8200"
cluster_addr = "https://192.168.31.155:8201"
ui = true
Важный момент: следите за пробелами и учитывайте перенос строк – точнее их разницу между Windows и linux. В дальнейшем это мне здорово портило жизнь.
Запускаемся в сессии рута:
vault server -config=/home/vuser/vaultcongig1.hcl
И на этом в данной сессии (рута) больше работ нет.
Возникает вопрос, а не запустить ли все это сразу как сервис? И да, и нет. Если делать шифрованный LVM, то при каждой перезагрузке на сервер все равно ходить вручную и вводить ключ. Если делать автозагрузку сервиса, то все равно после каждой перезагрузки по умолчанию надо вводить три ключа из пяти. Если прописать и ввод ключей дешифровки в автозагрузку, то я не очень понимаю, насколько это безопасно. Однако тут каждый сам решает, как ему лучше делать в продуктивной среде.
Часть 2.3 Первичная настройка Vault
Дальше есть два пути. Странный и более-менее правильный.
Странный. Открываем браузер и идем на http://192.168.31.155:8200
Получаем вот такую живопись (описанную в руководстве чуть позже, чем ssh – в разделе Web UI )
Более-менее правильный, и в соответствии с руководством: Открываем новую ssh сессию, настраиваем переменную
export VAULT_ADDR="http://192.168.31.155:8200"
и выполняем первичную инициализацию хранилища. Кавычки имеют значение, проверяйте.
Пример неправильных кавычек:
получаем пять ключей (параметр вроде настраивается, но по умолчанию 5) и One Ring to rule them all и самый главный root токен. Схороните, распечатайте, а распечатку в сейф.
Пока все идет как по руководству
Если сейчас сходить в браузер, то получим запрос на ввод ключей разблокировки (unseal). Можно ввести там любые три из пяти. Можно в SSH –
vault operator unseal
Можно в GUI
Часть 2.4 Мои первые секреты
Для проверки работы авторизации создадим (из GUI) два key-value хранилища.
Path - kv_userAD – и в нем секрет adsecret-user c какой-то парой key/value
Path - kv_groupAD и в нем секрет adsecret-group c другой парой key/value
Часть 2.5 Проверка LDAP
Перед тем как идти дальше в Vault, проверим работу ldap search
ldapsearch -x -b "dc=contoso,dc=lab" -H ldap://192.168.31.151
и получим result: 1 Operations error
Сделаем чуть лучше, зря чтоли специального пользователя заводили?
Сначала посмотрим в AD, какой CN мы сотворили
Открываем RDP, AD users and computers, включаем advanced features
Идем в Attribute editor, листаем до CN
И DN (можно оттуда и скопировать, если печатать лень) –
CN=Vault connector,OU=Vault,OU=Robo base,DC=contoso,DC=lab
Выполняем
(-b searchbase, -x = Use simple authentication instead of SASL.)
ldapsearch -b "OU=Robo base,DC=contoso,DC=lab" -H ldap://192.168.31.151 -D "CN=Vault connector,OU=Vault,OU=Robo base,DC=contoso,DC=lab" -W
если у вас на этом этапе сыплются ошибки, при вроде правильном пароле - то проверьте кавычки, - или тире, и главное – журнал событий Windows, есть в нем ошибки входа или нет. Если ошибок входа нет – то проблема где-то в CN/OU/кавычках. Иначе вы должны видеть ошибку входа в Event viewer / Security
В Debian должны валиться ошибки:
ldap_bind: Invalid credentials (49)
additional info: 80090308: LdapErr: DSID-0C090436, comment: AcceptSecurityContext error, data 52e, v4f7c
Валятся? Отлично. В AD users and computers нажмите правую кнопку на юзере и смените ему пароль на Pa!!word2
Проверяем:
ldapsearch -b "OU=Robo base,DC=contoso,DC=lab" -H ldap://192.168.31.151 -D "CN=Vault connector,OU=Vault,OU=Robo base,DC=contoso,DC=lab" -W
Нам, между тем, нужен другой OU -
ldapsearch -b "OU=N Watch,OU=Zoo MSK,DC=contoso,DC=lab" -H ldap://192.168.31.151 -D "CN=Vault connector,OU=Vault,OU=Robo base,DC=contoso,DC=lab" -W