Zentyal migration
Egy régi Samba 4.2.4 AD kiszolgáló és Zentyal DC-k migrálása a legfrissebb Zentyal környezetbe. A virtuális környezetet Proxmox, a hálózati háttértárat GlusterFS biztosítja.
Célszerű azt az elvet betartani, hogy a régi és az új AD-ban lévő felhasználók, csoportok is mind ékezet nélküliek legyenek, ugyanis az export és import során belefuthatunk némi kellemetlenségbe.
A környezet kialakításához ansible-t használtam, minimálisra csökkentve a manuális munkát.
Az új környezetet biztosító VM-ek elszeparáltan egy router-en keresztül, vlan tag-gel ellátott hálózatban kommunikálnak, így használható a korábban használt IP cím, egyedüli beállítást az új VM-ek elérése a router mögött igényel, a szükséges portátirányítások után már nincs gond.
Github: zentyal-migration
A megoldásban használt technológiák:
- cloud-init
- Ansible
- Docker
Az Ansible control node egy Docker image lesz.
Az új környezet előkészítése
Az alábbi lépések megkezdése előtt szükséges lesz egy ansible collection telepítésére:
Ansible Collection telepítése
./run.sh galaxy collection install community.general -p ./collections
Az alábbi sorrendet figyelembe véve hozható létre az új Zentyal környezet.
1. Control node docker image létrehozása
Az image Jamal jóvoltából készült, de ArchLinux image-t használva.
Image létrehozás
docker/build.sh
Ansible playbook futtatás az image-n belül
Jogosultságoktól függően, a lenti script alapértelmezetten sudo-n keresztül fut, amennyiben erre nincs szükség, mert rendelkezünk olyan jogokkal, akkor a parancs előtt használjuk NO_SUDO=1
./run.sh playbook <any other options> <any.yml>
2. Inventory fájlok beállítása
inventory/hosts
Régi DC és AD kiszolgálók beállítása az alábbi csoportokban
- [dc_old]
- [ad_old]
inventory/besenyoi.proxmox.yml
Ansible-el lekérdezzük a proxmox-ban futó gépeket, adott tag (dc) alapján csoportosítjuk, hozzáférést a Datacenter alatt állítottam, PVEAuditor jogosultsággal (info@pve).
3. Változók, jogosultságok beállítása
group_vars/all/vars
Ebben a fájlban állítom be:
- az ansible-nek szükséges adatokat:
- felhasználói név
- jelszó
- milyen módon szerzünk root jogot
- a root jog megszerzéséhez szükséges jelszót
- a proxmox környezet elérési és működtetési adatokat:
- felhasználói név
- jelszó
- hol érhető el a proxmox környezet
- alapértelmezetten használt VM template nevét
- egy dinamikusan generált VM template nevet (év, hónap alapján)
- a proxmox hoszt nevét
- a létrehozandó VM-ek neveit
- néhány egyedi elérési adatot
- vlan tag
- átirányított ssh port
- néhány egyedi elérési adatot
- a környezet előkészítésekor használt
- suffix
- az új környezett előtt lévő router IP címe
- zentyal hálózati backup fájlokat
- alapértelmezett (dhcp)
- éles környezet (éles hálózati beállítások)
- tartományra vonatkozó beállításokat
- tartomány neve
- annak a kiszolgálónak a neve, amiből kimentjük az AD felhasználókat és csoportokat
group_vars/all/vault
Ebben a fájlban az érzékeny információt titkosítva tároljuk. Megtekintéshez, szerkesztéshez az alábbi parancsot használjuk.
./run vault edit group_vars/all/vault
4. Zentyal sablon létrehozása
create_zentyal_template.yml
A 3. pontban jelzett változókkal kapcsolatos beállításról már szó esett, ebben a playbook-ban a pve_base_zentyal_image változó értékét használva készül egy teljes VM másolat, amin használjuk a soros port kimenetet a bootolási folyamat SSH kapcsolaton keresztül történő felügyeletére.
Ennek a lehetőségnek a használatához be kell jelentkeznünk SSH-n keresztül a Proxmox cluster azon node gépére ahol a VM fut és rácsatlakozni az érintett VM-re az alábbi paranccsal:
111 - a VM azonosítója, cseréld le a nálad aktuálisra
qm terminal 111
További műveletek:
- grub soros porti beállítások.
- rendszer csomagok frissítése, (dependency cycle miatt dpkg futtatása…).
- cloud-init telepítés.
- a fenti csomag telepítése miatt lepucoljuk a korábbi zentyal-network csomagot hogy ne kérjen a rendszer duplán IP címet, mert lefut a netplan, és a régi interfaces címkérés is.
- dhclient config módosítás
- dhclient lease állományának törlése
- cloud-config létrehozása
- machine-id törtlése
- netplan config módosítása
- VM leállítása
Ne felejtsük el a létrejött VM-et VM sablonná alakítani (Convert to template).
Valamint adjunk a Hardware fül alatt hozzá egy CloudInit Drive elemet.
./run playbook --ask-vault-pass create_zentyal_template.yml
Alternatívaként használható a cloud-init-env.yml playbook adott IP használatával.
./run.sh playbook -i <IP>, cloud-init-env.yml --ask-vault-pass
5. Zentyal tartomány létrehozása
zentyal_iac.yml
A teljes Zentyal infrastruktúra kialakításához használandó.
Végrehajtott műveletek:
- Zentyal kiszolgálók létrehozása
- a Zentyal VM sablon felhasználásával elkészül a vm_list változóban jelzett mennyiségű gép
- dc tag-el megjelöljük ezeket a gépeket, ezt az információt a dinamikus inventory során használjuk, hogy tudjuk melyik új VM-el van dolgunk
- VM-ek indítása
- Zentyal kiszolgálók beállítása
- rendszer csomagok frissítése, szükség szerint VM-ek újraindítása
- a korábban eltávolított zentyal-network csomag visszatelepítése, egyúttal a cloud-init csomag törlődik
- hostname és ssl kulcsok beállítása
- az alapértelmezett hálózati beállítás élesítése (alapértelmezetten DHCP címe lesz a VM-nek), újraindítás
- felkerülnek a tartomány kiszolgálásához szükséges csomagok, valamint az éles környezetben használt hálózati beállítások, ezek után a VM rövid ideig nem lesz elérhető, mert megváltozik az elérés módja ezekkel a beállításokkal
- VM-ek hálózati elérésének előkészítése
- VM-ek leállítása
- hálózati beállítások, vlan jellegű beállítások, mert az új környezetet elszeparáltan, a régi mellett indítjuk, elésére csak egy közbeiktatott router-en keresztül lehetséges
- VM-ek indítása, korábbi dc tag eltávolítása
- AD felhasználók és csoportok exportálásának előkészítése
- egyik meglévő DC-n hajtjuk végre a felhasználók és csoportok exportálását
- letöltés
- Zentyal által biztosított mentés készítése
- mentés készítése, ha a korábbi mentés egy napnál régebbi
- a biztonsági mentésből kivesszük a megosztásokra vonatkozó adatokat
- Az új kiszolgálók elérésének ellenőrzése
Amennyiben a fenti lépések lefutottak, elkészíthetjük az AD kiszolgálónkat a már ismert Zentyal webes felületen.
./run playbook --ask-vault-pass zentyal_iac.yml
6. AD felhasználók, csoportok, jelszavak beállítása
csv.yml
A Zentyal által készített felhasználók és csoportok mentés, egy adott logika szerint tagolt CSV fájl.
Ennek mintájára létrehoztam egy kurtított, szintén CSV állományt, amiben jelezni tudom, mely felhasználókra van az új környezetben szükség, ki az, akire már nincs.
Alapértelmezetten a Zentyal mentés a jelszavakat nem tudja kimenteni az AD-ból, password értékkel helyettesíti azokat.
Az általunk létrehozott CSV állományba ezeket ki tudjuk tölteni és a playbook összefésüli a két állományt egy Zentyal által használható mentéssé, amit egyszerűen webes felületről, vagy parancssorból importálhatunk később.
Az állomány létrehozásakor az alábbi oszlop tagolást használjuk:
id;userName;name;password;status;comment;remove;extra
Példa:
a status mezőben jelzem magamnak, hogy az AD-ban a felhasználó letiltott állapotú
a remove mezőben a generálásnál jelzem a sablonban, hogy a felhasználót már nem akarom felvenni az új környezetbe
1;user;User;Jelszavam;disabled;;Remove;
files/csv/ …
Bemeneti értékek:
- felhasználók mentés állomány
- az általunk létrehozott jelszó állomány
- csoportok mentés állomány
Ha friss mentést (mai nap készült) használunk, akkor alapértelmezetten csak entert nyomva adhatjuk meg a felhasználók és csoport mentés állományát, a másodjára kért jelszó állományt, amennyiben eltér a mai nap dátumától, akkor be kell gépelni.
./run playbook --ask-vault-pass csv.yml
Az import állományok létrehozása után célszerű elkészíteni a tartomány kiszolgálót, élesíteni az AD-t, hogy legyen hova beimportálni a felhasználóinkat!
7. Csoport, felhasználó importálás
setup_users_groups.yml
Az előző lépésben létrejött felhasználó és csoport CSV állományokat felhasználva először a csoportotkat, majd a felhasználókat importálja.
Egyik lépés során vizsgáljuk, hogy van-e olyan felhasználónk, akinek nincs jelszava, vagyis az AD-ban szerepelt, de a mi állományunkban nem. Ennek eredménye visszakereshető a kimeneti képernyőn.
Importálás után böngéssz el a további tartomány kiszolgálóidhoz és léptetsd be azokat is az új tartományodba.
./run playbook --ask-vault-pass setup_users_groups.yml
8. Megosztások, jogosultságok importálása
setup_shares.yml
Futtatás előtt, ha szükséges további diszkek hozzáadása, beállítása.
./run playbook --ask-vault-pass setup_shares.yml
9. AD környezet törlése
stop_and_remove.yml
Amennyiben elölről kell kezdenünk a környezet létrehozását…
NO_SUDO=1 ./run.sh playbook stop_and_remove.yml --ask-vault-pass
Felhasznált eszközök, megoldások, tények:
- a Zentyal mentések a /var/lib/zentyal/conf/backups/ alá készülnek
- mentést manuálisan, parancssorból is készíthetünk
/usr/share/zentyal/make-backup <backup file neve>
- egy meglévő Zentyal AD/DC-ből exportálhatóak a felhasználók, csoportok
/usr/share/zentyal-samba/users-export.pl <mentési útvonal…>
/usr/share/zentyal-samba/groups-export.pl <mentési útvonal…>
-
Zentyal mentésből adott modul mentésének kimásolása
- Samba modul mentésének kimásolásához az alábbit használtam, csak a
megosztások miatt.
tar --occurrence=1 \ -xf zentyal_2021-06-23-115205.tar eboxbackup/files.tgz \ --to-command='tar -O -xvzf - ./samba.bak/samba.bak' | tail -n +13 > samba.bak - Hálózati modul mentés kimásolásához.
tar --occurrence=1 \ -xf zentyal_2021-06-23-115205.tar eboxbackup/files.tgz \ --to-command='tar -O -xvzf - ./network.bak/network.bak' > network.bak tar --occurrence=1 \ -xf zentyal_2021-06-23-115205.tar eboxbackup/files.tgz \ --to-command='tar -O -xvzf - ./network.bak/network.state' > network.state
- Samba modul mentésének kimásolásához az alábbit használtam, csak a
megosztások miatt.
-
Zentyal modul visszatöltése az alábbi Perl metódus felhasználásával, files/redis.pl <redis file>
/usr/share/perl5/EBox/Config/Redis.pm
EBox::Config::Redis import_dir_from_file -
samba-tool domain passwordsettings
change policy for password probe…
samba-tool domain passwordsettings set --account-lockout-duration=5 samba-tool domain passwordsettings set --reset-account-lockout-after=5 samba-tool domain passwordsettings set --account-lockout-threshold=0show password policy settings
samba-tool domain passwordsettings show