Harjoitus 1

a) Asenna ja konfiguroi jokin muu demoni kuin Apache.

Tunnilla käytiin läpi Puppetin käyttöä ja demonien asentamista (Apache) työkalun avulla. Kotitehtävänä täytyi siis asentaa jokin demoni Puppetia käyttäen ja myös asettaa demonin konfiguraatiot. Itse asensin tehtävässä SSH-demonin.

20.25 : Käynnistin koneen (Xubuntu 16.04) ja päivitin pakettien repot komennolla:

sudo apt-get update

20.28 : Asensin Puppetin komennolla:

sudo apt-get -y install puppet

20.29 : SSH:n konfigurointi oli hieman päässyt unohtumaan, joten päätin asentaa SSH:n ensin aivan manuaalisesti komennolla:

sudo apt-get -y install openssh-server

20.34 : SSH:n asennus loi asennushetkellä jo omia asetustiedostojaan. Linuxilla ne löytyvät aina /etc – hakemistosta. Siirryin SSH demonin kansioon komennolla:

cd /etc/ssh

20.36 : Pieni googlailu palautti mieleeni, että paketin asennuksen yhteydessä luotu asetustiedosto on nimeltään sshd_config. Tarkastelin tiedoston sisältöä komennolla:

sudoedit sshd_config

20.45 : Nyt tiesin mitä olin asentamassa, sekä millä tavoin voin vaikuttaa asennuksen jälkeen automaattisesti demonin asetuksiin. Loin seuraavaksi Puppetin modules-hakemistoon alihakemiston moduulia varten komennoilla:

cd /etc/puppet/modules/

sudo mkdir ssh

cd ssh

20.48 : Puppet tarvitsee toimiakseen hyvin tarkan hakemistorakenteen. Hakemiston alle loin vielä toisen hakemiston nimeltä manifests ja tähän kansioon tiedoston nimeltä init.pp.

20.58 : /etc/puppet/modules/ssh – polun alle tarvitsi vielä templates-kansion. Loin kansion ja siirryin sinne komennoilla:

sudo mkdir templates

cd templates

21.07 : Templates kansioon täytyi kopioida SSH:n asetustiedosto. Tein tämän komennolla:

sudo cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/templates/

21.11 : Siirryin kirjoittamaan itse moduulin koodia siirtymällä manifests kansioon ja editoimalla luomaani init.pp tiedostoa komennolla:

sudoedit init.pp

21.12 : Koiranpennun ulkoilutustauko.

21.32 : Muokkasin init.pp tiedoston seuraavanlaiseksi:

class ssh {
      File { owner => '0', group => '0', mode => '0644', }
      Package { ensure => 'installed', allowcdrom => true, }
      Service { ensure => 'running', enable => true, }

      package { 'openssh-server':}

      file { '/etc/ssh/sshd_config':
             content => template("ssh/sshd_config"),
             notify => Service['ssh'],
      }

      service { 'ssh': }
}

Eli tiedostossa aluksi määritetään moduulin oletuksia tiedostoille, paketeille ja demoneille. Tiedostot oletusarvoisesti omistaa root-käyttäjä root-ryhmässä ja kaikilla käyttäjillä on tiedostoihin lukuoikeus, mutta vain omistajalla on kirjoitusoikeus. Paketeista oletusarvoisesti varmistetaan, että ne ovat asennettuja ja hyväksytään mahdolliset varoitukset live-ympäristöistä. Demoneista varmistetaan, että ne ovat juuri nyt moduulia ajaessa päällä ja myös käynnistyvät koneen käynnistyksen yhteydessä.

Moduuli siis varmistaa, että SSH-demoni on asennettu ja sshd_config tiedosto löytyy polusta /etc/ssh/sshd_config. Jos näin ei ole, moduuli asentaa paketit ja/tai luo tiedostot. Asetustiedoston sisällöksi asetetaan templates-kansioon kopioidun asetustiedoston sisältö. Jos tiedostoa muutetaan tai se luodaan, moduuli käynnistää SSH-demonin automaattisesti uudestaan.

Lopuksi varmistetaan, että SSH-demoni on päällä ja että se käynnistyy koneen käynnistymisen yhteydessä.

21.49 : Moduuli oli nyt valmis. Testasin moduulin toimintaa ensin poistamalla SSH-demonin asennuksen komennolla:

sudo apt-get purge openssh*

22.02 : Käynnistin moduulini komennolla:

sudo puppet apply -e 'class {ssh:}'

22.03 : Tämä johti seuraavaan virheilmoitukseen:

Error: Could not parse for environment production: Syntax error at end of file at line 1 on node juhap.home

22.03 : Vian syy löytyi puuttuvasta asetuksesta etc/puppet/puppet.conf tiedostosta. Tähän tiedostoon täytyi lisätä seuraava rivi:

[main]

...

ordering = manifest

Tämä mahdollistaa sen, että moduulien manifestit luetaan ylhäältä alas. Olin kirjoittanut moduulini niin, ettei erilliset resurssit tarvitse “require” merkintöjä. Tämä vaatii myös tämän rivin lisäämiseen puppet.conf tiedostoon.

22.07 : Uusi yritys, moduuli päälle komennolla:

sudo puppet apply -e 'class {ssh:}'

22.09 : Terminaliin saatiin seuraava teksti:

Notice: Compiled catalog for juhap.home in environment production in 0.55 seconds
Notice: /Stage[main]/Ssh/Package[openssh-server]/ensure: ensure changed 'purged' to 'present'
Notice: Finished catalog run in 12.77 seconds

Moduuli oli havainnut SSH-demonin puuttuvaksi ja asensi sen. Näin ollen tila vaihtui “purged” tilasta tilaan “present”.

22.10 : Tarkistin SSH-demonin tilan alla olevalla komennolla ja tilaksi vahvistui “active (running)”.

sudo service ssh status

22.12 : Päätin testata asetustiedoston toimivuutta muokkaamalla templates kansiossa olevaa tiedostoa lisäämällä loppuun seuraavan rivin:

MaxAuthTries 3

22.15 : Ajoin moduulin uudestaan ja sain seuraavat rivit Terminaliin:

Notice: Compiled catalog for juhap.home in environment production in 0.57 seconds
Notice: /Stage[main]/Ssh/File[/etc/ssh/sshd_config]/content: content changed '{md5}bd3a2b95f8b4b180eed707794ad81e4d' to '{md5}888320981fe1d47f676dd670f38bd743'
Notice: /Stage[main]/Ssh/Service[ssh]: Triggered 'refresh' from 1 events
Notice: Finished catalog run in 0.25 seconds

SSH-demonia ei asennettu, sillä moduuli havaitsi sen olevan jo asennettuna. Sen sijaan, /etc/ssh/sshd_config tiedoston sisältöä muutettiin. Kun sisältöä muutettiin, moduuli laukaisi refreshin ja käynnisti demonin uudelleen. Kaikki toimi juuri niin kuin pitikin.

22.19 : Tarkistin vielä /etc/ssh/sshd_config tiedoston, että lisäämäni rivi oli varmasti siellä. Komento oli:

sudoedit /etc/ssh/sshd_config

 

Lisäämäni rivi löytyi myös asetustiedostosta.

LÄHTEET:

http://terokarvinen.com/2013/hello-puppet-revisited-%E2%80%93-on-ubuntu-12-04-lts

http://terokarvinen.com/2017/simpler-puppet-manifests-resource-defaults-and-manifest-ordering

http://terokarvinen.com/2013/ssh-server-puppet-module-for-ubuntu-12-04

Advertisements