2024. április 19., péntek

Gyorskeresés

Útvonal

Cikkek » Számtech rovat

SaltStack#2: Központosított telepítések

  • (f)
  • (p)
Írta: |

Három részes sorozatom második részében az "állapotokkal" ismerkedünk meg, és elkezdünk összerakni egy webkiszolgálóhoz szükséges alap rendszert.

[ ÚJ TESZT ]

Userek és sablonok

Mi az ötlet? Szeretném, ha bizonyos felhasználók az összes gépen lennének, amit kezelek. Ehhez ugyancsak van egy előre megírt salt state-modul: users Legyek mindenhol ott sudo joggal és jelszóval. Legyen egy alap joggal rendelkező felhasználó jelszóval és kitiltottam valakit, ezért ő kerüljön eltávolításra.

/srv/salt/users.sls
sysadmin:
user.present:
- home: /home/sysadmin
- fullname: Rendszer Ura
- shell: /bin/bash
- password: iVA9O/XSTO9bs
- enforce_password: True
- uid: 1100
- gid: 1100
- groups:
- sudo
- adm

felhasznalo:
user.present:
- home: /home/felhasznalo
- fullname: Rendszer Felhasznalo
- shell: /bin/bash
- password: iVA9O/XSTO9bs
- enforce_password: True
- uid: 1200
- gid: 1200

moricka:
user.absent

Futtassuk is le, de ne alkalmazzuk (gondolom senki nem akarja a saját gépén ezt a két felhasználót létrehozni, és mórickának amúgy is szívás lenne):

sudo salt \* state.sls users test=True

Ha kérditek, hogyan generálom a titkos jelszavat, akkor a legegyszerűbb verziót most megmondom:
openssl passwd -crypt Password!
Ennél vannak jobb megoldások is, de most ez a legegyszerűbb. De ne erőltessétek komoly rendszereken, mert több sebből vérzik (többszöri futtatásra pl ugyanazt adja vissza, 8 karakterig működik, utána nem nő a titkos jelszó hossza...). Persze a hozzászólásokban lehet javasolni más módszereket is jelszógenerálásra.

Több gép kezelése:

Hozzuk létre a /srv/salt/top.sls fájlt. Ebbe megadhatjuk a becsatlakoztatott minionökre érvényes state-eket. Tehát ha azt szeretném hogy minden gépen legyenek eszközeim, de csak egygépen a felhasználók is, akkor a következő tartalommal töltöm ki:

base:
'*':
- packages
'raspberrypi':
- users

Majd parancsként futtatom: sudo salt \* state.highstate

A korábbi state.sls hívással ellentétben a state.highstate nem egyesével küldi le az állapotokat, hanem a top.sls fájlban található leírás alapján az összeset kiküldi a megfelelő minionra. A példában a packages az összes gépre, a users csak a raspberrypi gépre.

Itt már lehet érezni a hatalmat, de ne érjük be ennyivel! Szeretném azt, hogy a state fájljaim többszörösen felhasználhatóak legyenek. írjuk át ezért template alakba úgy, hogy a mezei felhasználót tudjam cserélgetni. Ehhez viszont meg kell ismerkedni a pillar fogalmával.
Lényeg: Statukus és érzékeny adatokat tárolunk egy rendszerről, amit a state-től függetlenül tudunk módosítani.

Bővebben: úgy képzeljük el, mint egy hipermarketben az árcímke készítőt, megvan, hogy mi a sablon (state) és csak adattal töljük fel (pillar), ami termék specifikus. Minden termékhez külön pillar tartozik, de pl. a húsok egységes lejárati idővel rendelkeznek, így ezt az adatot erre a termékcsoportra elérhetővé kell tenni. Illetve a cégnév ott van minden terméken, de az csak arra az egységre érvényes.

Ezen példa alapján a pillar top.sls struktúra:
base:
'*':
- cegnev
'husi-*':
- lejarat
'husi-pipi':
- elnevezesek.pipi
'husi-boci':
- elnevezesek.boci

...stb., lehetne folytatni (az elnevezések p .mappában vannak, mint elnevezesek/pipi.sls), de nézzük inkább a felhasználókra:

A /srv/pillar/top.sls tartalma a következő:
base:
'raspberrypi':
- andras
'sysadmin-remote':
- elek

Módosítsuk a meglévő /srv/salt/users.sls fájl közepét a következőre:

{{ pillar['user']['short'] }}:
user.present:
- home: /home/{{ pillar['user']['short'] }}
- fullname: {{ pillar['user']['full'] }}
- shell: /bin/bash
- password: {{ pillar['user']['pass'] }}
- enforce_password: True
- uid: {{ pillar['user']['uid'] }}
- gid: {{ pillar['user']['gid'] }}

Itt is a jinja template jön képbe, a kapcsos zárójel helyettesítve lesz a benne található adatnak megfelelően, amit így adunk meg

/srv/pillar/andras.sls

user:
short: andras
full: András
pass: iVA9O/XSTO9bs
uid: 1201
gid: 1201

/srv/pillar/elek.sls

user:
short: elek
full: Elek
pass: iVA9O/XSTO9bs
uid: 1202
gid: 1202

Lefuttatva most a state.highstate végű parancsot, csak andrás kerül létrehozásra a raspberrypin. Az ok a alt/top.sls ben van, mert csak az egyiken engedélyeztük az állapot futtatását. De ha state.sls-sel csináljuk, akkor mindkét felhasználó a maga gépén jön létre. A state.sls-sel vigyázni kell emiatt, mert nem veszi figyelembe a salt/top.sls fájt, tehát olyan telepítést is meg tudunk csinálni, amit amúgy nem akartunk, ha rosszul adjuk meg a minion_id-re vonatkozó shell glob-ot. (pl.\* az minden) . Erről itt.

Megsúgom, van lehetőség for ciklusba rakni jinja template-tel a felhasználó létrehozást, ha a pillar adatokat iteráljuk, így lehetőség van több felhasználó létrehozására is. Illetve ez akkor is működik, ha pl minden gépen szeretnénk andrást, de csak egy gépen eleket. A pillar adatokat ugyanis összefűzi a salt, bár ekkor kicsit máshogy kell felépíteni a pillar adatokat. Ez viszont túlmutat a mostani írásomon, hiszen még wordpresst kell telepíteni.

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

Előzmények

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.