Palvelinten hallinta – kotitehtävät 3


Palvelinten hallinta kotitehtävät 3

Lähde  Tero Karvinen 2017: Linux kurssi, http://terokarvinen.com

Harjoitusympäristönä asennettu Xubuntu 16.04, Xenial Xerus

Harjoituskoneen tiedot:

Emolevy X79A-GD65 (8D)

Prosessori Intel(R) Core(TM) i7-3930K

16GiB RAM

Modulit Gitistä. Tee skripti, jolla saat nopeasti modulisi kloonattua GitHubista ja ajettua vaikkapa liverompulle. Voit katsoa mallia terokarvinen/nukke GitHub-varastosta.

Harjoituksen tavoitteena oli varmistaa, että moduulit ovat saatavilla eri laitteilla ja nopeasti otettavissa käyttöön missä tahansa. Harjoituksen lähtötilanteessa moduuleilla oli oma Github repository puppet.

Livetikulle tallennettiin scripts -kansioon getgit -skripti. Vaihtoehtoisesti sama skripti löytyy Githubista. Skripti ajaa apt-get update -komennon, asentaa git ja puppet -paketit sekä kloonaa käyttäjän puppet-repositoryn käyttäjän kotikansioon. . Livetikkua käytettäessä moduulit saadaan käyttöön esim. seuraavasti:

$ wget https://raw.githubusercontent.com/suomisim/puppet/master/getgit

$ sudo bash getgit

Käyttäjälle oli nyt asennettu tarvittavat ohjelmat moduulien käyttöönottoa varten. Moduulien luonti, kopiointi ja ajaminen suorittiin tämän jälkeen skriptien avulla. Moduulit luodaan käyttäjän kotihakemistoon puppet/modules/ -kansioon, josta ne siirretään ajettavaksi /etc/puppet/modules/ -kansioon. Käytetyt skriptit löytyvät GitHubista.

Package-File-Server. Asenna ja konfiguroi jokin demoni package-file-server -tyyliin. Tee jokin muu asetus kuin tunnilla näytetty sshd:n portin vaihto.

Harjoitustyön tavoitteena oli asentaa LAMP. Toinen tavoite oli kerrankin suorittaa yksi pieni osa asennuksesta kerrallaan, jolloin virheiden selvittäminen olisi huomattavasti helpompaa. Tehtävän kaikki vaiheet käydään läpi, mutta yksinkertaisimpia komentoja on jätetty pois selkeyden vuoksi. Osa komennoista tehdään skriptien avulla (moduulien kansioiden luonti, moduulien kopiointi ja suorittaminen jne.)

Harjoituksen tavoite täyttyi ja moduuli asentaa LAMP -ohjelmistot onnistuneesti. Moduulia ei voi suositella laajempaan käyttöön koska se ei ole tietoturvan kannalta optimaalinen eikä sitä vielä ole testattu kuin testikokoonpanolla.

Apache asennus

Aloitettiin luomalla apache2 -paketin asennus moduuliin.

class lamp {
    
    package { 'apache2':
        ensure => 'installed',
    }
}

Moduulin suorittaminen onnistui ilman virheilmoituksia ja osoitteesta http://localhost saatiin näkyviin Apachen aloitussivu. Seuraavaksi otettiin käyttöön käyttäjän kansio, johon moduuli siirtää halutun websivun templates-kansiosta. Templates-kansioon luotiin yksinkertainen html-sivu index.html.erb. Käyttäjän kansion käyttöönottoon haettiin vinkkejä Lauri Soivin blogista. Alla päivitetty init.pp.

class lamp {
    
    package { 'apache2':
        ensure => 'installed',
    }
#
#    file { '':
#        content => template(''),
#        notify => Service[''],
#        require => Package[''],
#
#    }
#    
    service { 'apache2':
        ensure  => 'true',
        enable  => true,
        require => Package['apache2'],
    }




    file { '/home/suomisim/public_html':
        ensure => 'directory',
     
    }
    
    
    file { '/home/suomisim/public_html/index.html':
        content => template('lamp/index.html.erb'),
        require => File['/home/suomisim/public_html'],
    
    
    }
    
    file { '/etc/apache2/mods-enabled/userdir.load':
        ensure => 'link',
        target => '/etc/apache2/mods-available/userdir.load',
        notify => Service["apache2"],
        require => Package["apache2"],
    }

    file { '/etc/apache2/mods-enabled/userdir.conf':
        ensure => 'link',
        target => '/etc/apache2/mods-available/userdir.conf',
        notify => Service["apache2"],
        require => Package["apache2"],
        }




}

Moduulin ajon jälkeen websivu osoitteessa http://localhost/~suomisim näytti halutun sivun. Tämän jälkeen moduuli valitettavasti toimii ainoastaan käyttäjällä suomisim. Käyttäjästä riippumattomiin ratkaisuihin täytyy palata myöhemmin. Tässä vaiheessa ajettiin commit-skripti, jotta pystyttäisiin palaamaan toimivaan moduulin versioon tarvittaessa.

PHP asennus

Aloitettiin PHP asennus lisäämällä seuraavat rivit edelliseen init.pp -tiedostoon:

    package {'libapache2-mod-php':
        ensure => installed
    }

Tämän jälkeen moduuli ajettiin uudestaan. Tämä tehtiin siksi, että päästäisiin käsiksi asennuksen mukana tulleeseen asetustiedostoon php7.0.conf. Tämä tiedosto kopioitiin moduulin templates-kansioon ja annettiin sille jälleen .erb -pääte. Tiedostoa muokattiin niin, alla oleville riveille lisättiin kuvan mukaisesti kommenttimerkki #:

Selection_005.png

Näin saatiin PHP toimimaan myös käyttäjän kansioissa. Tämän jälkeen tehtiin tarvittavat muutokset init.pp -tiedostoon. Muutokset liittyivät /etc/apache2/mods-available/php7.0.conf -tiedoston muokkaukseen. Tämän lisäksi .html -tiedostot vaihdettiin .php tiedostoiksi sekä index.php.erb -tiedostoon lisättiin yksinkertainen php -koodi:

          <?php
              echo "Hello World!";
          ?>
class lamp {

 package { 'apache2':
 ensure => 'installed',
 }

 service { 'apache2':
 ensure => 'true',
 enable => true,
 require => Package['apache2'],
 }


 file { '/home/suomisim/public_html':
 ensure => 'directory',

 }


 file { '/home/suomisim/public_html/index.php':
 content => template('lamp/index.php.erb'),
 require => File['/home/suomisim/public_html'],


 }

 file { '/etc/apache2/mods-enabled/userdir.load':
 ensure => 'link',
 target => '/etc/apache2/mods-available/userdir.load',
 notify => Service["apache2"],
 require => Package["apache2"],
 }

 file { '/etc/apache2/mods-enabled/userdir.conf':
 ensure => 'link',
 target => '/etc/apache2/mods-available/userdir.conf',
 notify => Service["apache2"],
 require => Package["apache2"],

 }


 package {'libapache2-mod-php':
 ensure => installed
 }

 file { '/etc/apache2/mods-available/php7.0.conf':
 content => template('lamp/php7.0.conf.erb'),
 require => Package["libapache2-mod-php"],
 notify => Service["apache2"],
 }

}

Moduulin ajon jälkeen luotu index.php -tiedosto toimi osoitteessa http://localhost/~suomisim. Tässä vaiheessa tehtiin taas git commit -toimenpiteet. Moduulista otettiin git -kansioon vielä kopio nimellä phpapache, koska moduuli toimi hyvin.

MySQL asennus

Jatkettiin LAMP -asennusta asentamalla MySQL -tietokantaohjelmisto sekä tarvittavat PHP-kilkkeet (php-mysql -paketti). Ongelmana MySQL -asennuksessa oli root-käyttäjän salasanan asetus asennusvaiheessa. Tässä vaiheessa kurssia osaaminen ei riittänyt salasanan piilottamiseen mihinkään vaan se tallennettiin selkokielellä init.pp -tiedostoon. Tämä oli tietoturvariski, mutta moduuli haluttiin saada toimivaksi harjoitusta varten. Alla on nähtävissä viimeinen versio init.pp -tiedoston sisällöstä.

class lamp {

     
    package { 'apache2':
        ensure => 'installed',
    }
   
    service { 'apache2':
        ensure  => 'true',
        enable  => true,
        require => Package['apache2'],
    }

    file { '/home/suomisim/public_html':
        ensure => 'directory',

    }
    
    
    file { '/home/suomisim/public_html/index.php':
        content => template('lamp/index.php.erb'),
        require => File['/home/suomisim/public_html'],
    
    }
    
    file { '/etc/apache2/mods-enabled/userdir.load':
        ensure => 'link',
        target => '/etc/apache2/mods-available/userdir.load',
        notify => Service["apache2"],
        require => Package["apache2"],
    }

    file { '/etc/apache2/mods-enabled/userdir.conf':
        ensure => 'link',
        target => '/etc/apache2/mods-available/userdir.conf',
        notify => Service["apache2"],
        require => Package["apache2"],
    }

    package {'libapache2-mod-php':
        ensure => 'installed',
    }
    
    file { '/etc/apache2/mods-available/php7.0.conf':
        content => template('lamp/php7.0.conf.erb'),
        require => Package["libapache2-mod-php"],
        notify => Service["apache2"],
    }
    
    package {'mysql-server':
        ensure => 'installed',
    }

    $mysqlpw = "ChangeOnFirstStart!"

    exec { 'mysqlpw':
        path => ["/bin", "/usr/bin"],
        command => "mysqladmin -uroot password $mysqlpw",
        require => Package["mysql-server"],
    }
    
    service { 'mysql':
        ensure  => 'true',
        enable  => 'true',
        require => Package['mysql-server'],
    }
    
    package {'php-mysql':
        ensure => 'installed',
        require => Package['mysql-server'],
    }
        
}

Moduuli toimi ilman virheilmoituksia. Poikkeuksena käsin suoritettuun MySQL -asennukseen kirjautuminen root-tunnuksilla vaati sudo-käyttäjänä kirjautumista. Kun tietokantaan luotiin uusi käyttäjä, käyttäjänä oli mahdollista kirjautua ohjelmaan myös ilman sudo-oikeuksia. Yllä oleva koodi jäi ensimmäiseksi versioksi lamp-moduulista. Koodiin jäi kehittämistä, mm. käyttäjäsidonnaisuuden poistaminen, tietoturvan parantaminen sekä yleinen koodin siistiminen sekä riippuvuuksien korjaaminen/parantaminen.

Vapaaehtoinen: Vaihda Apachen default VirtualHost Puppetilla siten, että sivut ovat jonkun kotihakemistossa ja niitä voi muokata normaalin käyttäjän oikeuksin.

Harjoitus tuli toteutettua edellisessä harjoituksessa.

Vapaaehtoinen vaikea: Konfiguroi jokin muu demoni (kuin Apache tai SSH) Puppetilla.

 

 

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 3 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html

Simo Suominen