K1 · Kodune õpe ja kodutöö¶
Kodutöö on vabatahtlik boonus: hinne tuleb klassitöö kontrollidest K1–K5. Kodutöö läheb samasse reposse, kuhu klassitöö. Tähtaeg on kirjas Classroom 50-s. Kodutöö on klassitööst raskem: juhiseid on vähem ja parameetrid otsid ansible-doc-ist ise. Kui jääd kinni, küsi Discordis või ava oma repos issue Vajan abi. Kirjuta sinna käsk ja veateade.
| Osa | Mida teed | Esitad | Hinne |
|---|---|---|---|
| I | loed, uurid mooduleid, vastad küsimustele | markmed.md, vastused.md |
boonus |
| H1 | kasutajad, võtmed, sudo, chrony, motd | admin.yml + logi |
boonus |
| H2 | SSH turvamine | hardening.yml + logi |
boonus |
| H3 | paketid nimekirjast | baas.yml + logi |
boonus |
| H4 | raport faktidest | raport.yml, raportid/ |
boonus |
| H5–H6 | cron ja drift | cron.yml + logi, logid/drift_check.txt |
boonus |
| III | eneseanalüüs | vastused.md lõpus |
– |
Tulemust näed pärast iga push'i: Actions → Autograde. Kodutöö kontrollide nimi algab sõnaga BOONUS ja need punkte ei anna: iga läbitud boonuskontroll annab laboritahvlil tähe ja XP-d. Punane rist Actionsis tähendab ainult, et boonus on tegemata.
I · Lugemine ja küsimused¶
Enne küsimusi loe läbi:
| Mida | Kus |
|---|---|
| Loeng: klassis käsitlemata osad §2–§3, §6–§7, §9–§17 | K1 loeng |
| Getting started: sissejuhatus, inventar, esimene playbook | docs.ansible.com |
| Check mode ja diff | docs.ansible.com |
| Faktid | docs.ansible.com |
Uuri mooduleid → markmed.md¶
Ava ansible-doc-iga moodulid user ja service. Kirjuta kummagi kohta kolm parameetrit, mida klassis ei kasutanud. Lisa ühe lausega, milleks need on. Näiteks user: shell, groups + append, state: absent + remove.
Vasta küsimustele → vastused.md¶
Vasta lühidalt oma sõnadega, üks-kaks lauset igale.
- Miks on
useradd deployshelli skriptis ohtlikum kuiansible.builtin.user? Mis juhtub kummagagi teisel jooksul? (A2, loeng §5) PLAY RECAPnäitab ühel masinalunreachable=1, teistelchanged=0. Mida sa selle masina olekust tead ja mida teed järgmiseks? (loeng §14)- Mis vahe on privaat- ja avalikul võtmel? Kuhu kumbki käib ja mida teed, kui privaatvõti lekib? (loeng §15)
II · Harjutused¶
Kõik harjutused käivad grupi veeb vastu.
Soovitatav töökäik iga playbooki puhul
ansible-playbook <fail>.yml --check --diffansible-playbook <fail>.yml --limit vm1ansible-playbook <fail>.yml- teine jooks tõendiks:
ansible-playbook <fail>.yml | tee logid/<fail>_teine_jooks.txt
H1 · Loo kasutajad ja ligipääs · boonus¶
Selle ülesande lõpuks on igas masinas kasutaja deploy, kes pääseb võtmega sisse ja saab sudo't ilma paroolita.
Playbook admin.yml viib iga veeb-grupi masina sellisesse olekusse:
- kasutajad
deployjamonitoron olemas, mõlemad luuakse ühe task'iga; - mõlemal on sinu avalik SSH-võti;
deployon grupiswheelja saab sudo't ilma paroolita;- kellaaja teenus
chronyon paigaldatud ja käib; /etc/motdsisaldabHallatud Ansible'iga - <masina nimi>.
Vihje: moodulid ja parameetrid
- üks task mitmele kasutajale:
loop; - võti:
ansible.posix.authorized_key; - paroolita sudo: fail
/etc/sudoers.d/deploysisugadeploy ALL=(ALL) NOPASSWD: ALL(copy,mode: "0440",validate: visudo -cf %s); - AlmaLinuxis on teenuse nimi
chronyd, paketi nimichrony.
Valmis, kui
-
ssh deploy@vm1 sudo -n trueõnnestub - failis on
loopjaauthorized_key(Autograde otsib neid) - teine jooks
changed=0
Esitad
admin.yml, logid/admin_teine_jooks.txt
H2 · Turva SSH · boonus¶
Selle ülesande lõpuks ei saa masinatesse sisse root'ina ega parooliga, ainult võtmega.
Playbook hardening.yml:
- keelab SSH-s root'i sisselogimise ja parooliga sisselogimise;
- kontrollib enne rakendamist, et konf on korrektne;
- taaskäivitab
sshdainult siis, kui konf muutus.
Tähelepanu: võid end masinast välja lukustada
- Hoia teine SSH-sessioon lahti.
- Jooksuta esmalt
--check --diff, siis--limit vm1. - Kontrolli uuest terminalist, et sisse saad. Alles siis kõigil.
Kui lukustasid end välja, kirjuta README-sse, mis juhtus ja kuidas said tagasi.
Vihje: moodulid ja parameetrid
/etc/ssh/sshd_config:PermitRootLogin nojaPasswordAuthentication no(lineinfile, uuriregexp);- süntaksikontroll:
validate: sshd -t -f %s; - taaskäivitus ainult muutusel:
notifyjahandlers.
Valmis, kui
-
ssh root@vm1keeldub - failis on
lineinfile,validatejahandlers(Autograde otsib neid) -
ssh vm1töötab võtmega - teine jooks
changed=0ja handler ei käivitu
Esitad
hardening.yml, logid/hardening_teine_jooks.txt
H3 · Halda pakette nimekirjast · boonus¶
Selle ülesande lõpuks on vajalikud paketid igas masinas olemas ja keelatud paketid puuduvad.
Playbook baas.yml:
- paigaldab nimekirja
paigalda: vähemaltcurl,git,tree,wget,tar; - tagab, et nimekirja
eemaldapaketid puuduvad: vähemalttelnet; - mõlemad nimekirjad on muutujad, mitte task'i sees.
Kontroll: paigalda telnet käsitsi ühte masinasse ja jooksuta playbook. telnet peab kaduma ja teistes masinates peab jääma changed=0.
Vihje: moodulid ja parameetrid
vars plokk kahe nimekirjaga; ansible.builtin.package võtab name-ile terve nimekirja; puudumine on state: absent.
Valmis, kui
- teine jooks
changed=0 - käsitsi paigaldatud
telneteemaldati - failis on
state: absent(Autograde otsib seda)
Esitad
baas.yml, logid/baas_teine_jooks.txt
H4 · Kogu masinatest raport · boonus¶
Selle ülesande lõpuks on vm1-s iga masina kohta raport, mis on tehtud faktide põhjal.
Playbook raport.yml:
- loob igas masinas faili
/tmp/raport.txt: masina nimi, distributsioon ja versioon, IP-aadress, mälu MB-des, protsessorite arv, kõik võetud faktidest; - toob raportid vm1 kausta
raportid/, iga masina oma eraldi failis.
Vihje: moodulid ja parameetrid
Faili toomine: ansible.builtin.fetch, uuri flat: true. Failinimi inventari nime järgi: raportid/{{ inventory_hostname }}.txt, muidu kirjutavad raportid üksteist üle.
Valmis, kui
- kaustas
raportid/on kolm faili, igaüks oma masina andmetega - failis on
fetch(Autograde otsib seda)
Esitad
raport.yml, raportid/
H5 · Ajasta varundus¶
Selle ülesande lõpuks tehakse igas masinas igal ööl /etc varukoopia.
Playbook cron.yml tagab igas masinas:
- skripti
/usr/local/bin/varunda.sh, mis pakib/etcfaili/var/backups/etc-<kuupäev>.tar.gz; - cron-töö, mis käivitab skripti iga päev kell 02:30.
Tähelepanu: AlmaLinuxis puudub kaks asja
Kausta /var/backups ja paketti tar pole vaikimisi olemas. Ilma nendeta skript ei tee midagi ega anna ka viga. Playbook peab need looma.
Vihje: moodulid ja parameetrid
Kaust: ansible.builtin.file + state: directory. Skript: ansible.builtin.copy + mode: "0755". Cron: ansible.builtin.cron (name, minute, hour, job).
Kontrolli vm1-s:
ssh -t vm1 sudo /usr/local/bin/varunda.sh
ssh -t vm1 sudo ls /var/backups
ssh -t vm1 sudo crontab -l -u root
Oodatav tulemus
Näed tänase kuupäevaga arhiivi ja täpselt ühte cron-rida, ka pärast playbooki teist jooksu.
Valmis, kui
- arhiiv tekib
- cron-rida on üks
- failis on
cronmoodul (Autograde otsib seda) - teine jooks
changed=0
Esitad
cron.yml, logid/cron_teine_jooks.txt
H6 · Leia ja paranda drift¶
Selle ülesande lõpuks oskad --check-iga leida masinad, kus keegi on midagi käsitsi muutnud. Ja oskad selle playbookidega parandada.
- Tekita igasse masinasse erinev drift: ühes kustuta kasutaja
monitor, teises muuda/etc/motdsisu, kolmandas peatachronyd. - Jooksuta kõik oma playbookid
--checkrežiimis ja salvesta väljund faililogid/drift_check.txt. - Paranda drift päris jooksuga.
- Kirjuta
vastused.md-sse lõik: kas iga drift tuli--check-iga välja ja millise playbooki järgi? Kui see kontroll jookseks igal ööl automaatselt, kes peaks teate saama?
Esitad
logid/drift_check.txt, lõik vastused.md-s
III · Eneseanalüüs¶
vastused.md lõppu kolm vastust, igaüks üks lause:
- Mis töötas esimese korraga?
- Kus jäid kinni ja mis aitas edasi?
- Mida tahad järgmisel kohtumisel küsida?
Vabatahtlik: boonus ja lint
Boonus: kirjuta boonus.yml, mis proovib paigaldada paketti, mida pole olemas. Püüa viga kinni block/rescue-ga nii, et playbook kirjutab veast teate ega kuku. Selgita vastused.md-s, millal on selline vea püüdmine mõistlik ja millal ohtlik.
Lint: jooksuta ansible-lint *.yml ja paranda, mis parandada saad. Mida ei parandanud, selgita vastused.md-s.