All Posts

Homework 1. Salt Master and Slave

Tehtävänanto on kopioitu Tero Karvisen sivulta:
http://terokarvinen.com/2018/aikataulu–palvelinten-hallinta-ict4tn022-3004-ti-ja-3002-to–loppukevat-2018-5p

a) Lue virallisesta Salt Getting Started Guide -kirjasta luvut Understanding SaltStack (noin 8 alasivua) ja SaltStack Fundamentals (6 alasivua, ei tarvitse asentaa demoympäristöä) ja SaltStack Configuration Management: Functions (1 alasivu). (Tätä lukutehtävää ei tarvitse raportoida).

b) Silmäile Laineen 2017 varastossa olevia salt -asetuksia. (Tätä lukutehtävää ei tarvitse raportoida).

c) Asenna Salt Master ja Slave pull-arkkitehtuurilla (eli master on server). Voit laittaa herran ja orjan myös samalle koneelle. Kokeile suorittamalla salt:illa komentoja etänä.

Aluksi asennetaan Salt Master.
Olen asentanut sen omalle koneelle pääkäyttäjälle.

$ sudo apt-get install salt-master

Salt:in kanssio löytyy:

$ cd /etc/salt/

Tarkistetaan oma IP-osoite komennolla:

$ hostname -I

Myöhemmin tarvitaan Master IP siihen, että pystytään yhdistää meidän Slave:in.

Että voidaan testata samalla koneella, luodaan toinen käyttäjä:

$ sudo adduser myslave

ja vaihdetaan käyttäjien keskenään komennolla:

$ su - myslave

tai otetaan SSH yhteys:

$ ssh myslave@localhost

Asennetaan salt-slave:

$ sudo apt-get install salt-minion

Muokataan minion tiedoston ja lisätään sinne Master IP ja Slave ID:

sudoedit /etc/salt/minion
master: 123.123.123.123
id: myslave

ja otetaan muutokset voimaan uudelleen käynistämällä demoni:

$ sudo systemctl restart salt-minion.servic

Otetaan slave avain vastaan master käyttäjällä:

Tarkistetaan, että toimii kysymällä kuka myslave on:

Komennot toimii.
Samat toiminnot suoritetaan, kun otetaan yhteys eri koneista.
Tämä tehtävä oli siis tehty yhdellä koneella.

e) Kerää laitetietoja koneilta saltin grains-mekanismilla.

Kerää tietoja meidän slave koneesta:

$ sudo salt 'myslave' grains.items

Esimerkki tiedot mitkä voi saada:

ITEM:
BIOS version and release date
CPU_flags
CPU_model and architecture
GPU
Group name and host
ID: myslave
ip_interfaces, ipv4, ipv6
kernel name and version
machine_id
manufacturer
OS name, family, architecture, version
serialnumber
server_id
virtual: physical or virtual

Nyt voidaan käyttää ylhällä olevia ‘item‘ kommenteja, jos halutaan löytää tietty tieto meidän slave:sta.

Tarkistaa onko myslave niminen slave virtuaali kone vai fyysinen kone:

$ sudo salt 'myslave' grains.item virtual
myslave:
    ----------
    virtual:
        physical

tai vaikka tarkistetaan mikä distro meidän orjalla on asennettu:

$ sudo salt 'myslave' grains.item lsb_distrib_description
myslave:
    ----------
    lsb_distrib_description:
        Linux Mint 19 Tara

f) Oikeaa elämää. Säädä Saltilla jotain pientä, mutta oikeaa esimerkiksi omalta koneeltasi tai omalta virtuaalipalvelimelta. (Kannattaa kokeilla Saltia oikeassa elämässä, mutta jos se ei onnistu, rakenna jotain oikeaa konettasi vastaava virtuaaliympäristö ja tee asetus siinä).

Lähetetään meidän slave:lle teksti tiedosto.

Ensin luodaan kansio mihin laitetaan kaikki ohjeet salt:lle:

mkdir -p
no error if existing, make parent directories as needed

$ sudo mkdir -p /srv/salt/

ja erikseen kansio hello mihin laitetaan meidän .sls ohje:

/srv/salt $ sudo mkdir hello

luodaan .txt tiedosto ja kirjoitetaan siihen meidän tervehdys:

/srv/salt/hello $ sudoedit hello.txt

/srv/salt/hello $ cat helloslave.txt
Hello my slave :)

kansiossa /srv/salt/ luodaan .sls tiedosto ja annetaan ohjeet mistä haetaan meidän tervehdys tiedosto:

/srv/salt $ sudoedit hello.sls

/tmp/helloslave.txt:
  file.managed:
    - source: salt://hello/helloslave.txt

Nyt voidaan lähettää ‘myslave’:lle tiedoston:

$ sudo salt 'myslave' state.apply hello

ja tarkistetaan onko tiedosto saapunut myslave:lle:

myslave@s174rd-GL552VW:~$ cd /tmp/
myslave@s174rd-GL552VW:/tmp$ ls
helloslave.txt

Luodaan top.sls tiedosto, että slave:it ottaavat automaattisesti ohjeet käyttöön:

/srv/salt $ sudoedit top.sls

base:
  'myslave':
    - hello

jos halutaan ottaa ohjeet heti:

$ sudo salt 'myslave' state.highstate

Asennetaan vielä whois meidän slave:lle.
Aluksi luodaan uuden kasion ja kaksi uutta tiedostoa:

$ sudo mkdir /srv/salt/common

siihen luodaan tiedosto joka hae tietoja meidän toisesta tiedostosta packages.sls:

$ sudoedit init.sls

include:
  - common.packages

ja toinen:

$ sudoedit packages.sls

common_packages:
  pkg.installed:
    - pkgs:
      - whois

ja se on valmis! Voidaan asentaa komennolla:

sudo salt 'myslave' state.apply /common/init

Homework 6. Hello World and Calculator

Tehtävänanto on kopioitu Tero Karvisen sivulta:
http://terokarvinen.com/2018/aikataulu–linux-palvelimet-ict4tn021-3003-to-8-14-alkusyksy-2018p1–5-op

a) Kirjoita ja suorita “Hei maailma” kolmella kielellä. Asenna tarvittavat ympäristöt.

Bash
Nanon kautta luodaan homework.sh tiedoston.
Kirjoitetaan koodi:

echo "Hei Maailma"

ja tallennetaan.
Ajetaan ohjelma: bash homework.sh

homework6

Python 3
Nanon kautta luodaan homework.py tiedoston.
Kirjoitetaan koodi:

print ("Hei Maailma")

 ja tallennetaan.
Ajetaan ohjelma: python3 homework.pyhomework6.1

Java
Nanon kautta luodaan homework.java tiedoston.
Kirjoitetaan koodi:

public class homework
{
 public static void main(String[] args)
 {
 System.out.println("Hei Maailma");
 }
}

ja tallennetaan.

Tarkistetaan javan versio, ja onko se asennettu.

java -version

Jos ei, niin asennetaan Java Runtime Environment (JRE):

sudo apt-get install openjdk-8-jre

Ja asennetaan Java Development Kit (JDK), että pystyy ajaa Java ohjelmat.

sudo apt-get install openjdk-8-jdk

Ajetaan ohjelma:

javac homework.java #antaa lupaa ajaa java tiedoston ilman .java päätettä.

homework6 java2

b) (vapaaehtoinen) Kirjoita kullakin kielellä yksinkertainen ohjelma, jolla on jokin käyttötarkoitus. Ideoita: hyödynnä kielen vahvuuksia. Ota käyttäjältä syöte, tee jokin lasku ja tulosta vastaus (input-processing-output).

Java laskin:
Luodaan Java tiedosto:

nano Laskin.java

Kirjoitetaan koodi:

Java Laskin

Ajetaan:

Java Laskin 2

Homework 5. Linux_Apache2_MariaDB_PHP

Tehtävänanto on kopioitu Tero Karvisen sivulta:
http://terokarvinen.com/2018/aikataulu–linux-palvelimet-ict4tn021-3003-to-8-14-alkusyksy-2018p1–5-op

a) Asenna LAMP (M=MariaDB).
http://terokarvinen.com/2018/install-mariadb-on-ubuntu-18-04-database-management-system-the-new-mysql

Ennen kuin asennetaan MariaDB, avataan 22/tcp portti komennolla:

$ sudo ufw allow 22/tcp
$ sudo ufw enable

Linux on asennettu. PHP asennetaan tehtävässä b).

Asennetaan Apache2:

sudo apt-get install apache2
sudo a2enmod userdir
mkdir public_html

Asennetaan MariaDB komennolla:

$ sudo apt-get install mariadb-client mariadb-server

hw5 mariadb1

Hoidetaan perus tietoturva asetukset MariaDB asennuksen jälkeen. Komento:

$ sudo mysql_secure_installation

Eli painetaan Enter alussa, koska meilla ei ole root salasana asennettu viela.
Asetetaan uusi root salasana MariaDB:lle.
Seuraavissa neljassa kysymyksessa painetaan Yes.

hw5 mariadb2.png
Seuraavaksi luodaan uusi tietokanta ja käyttäjä tunnuksen.
Kirjaudutaan root:na. Root:ia kaytetaan vain tunnuksen ja tietokannan luomiseen.
Komento:

$ sudo mariadb -u root

CREATE DATABASE nimi; == Luo uuden tietokannan
SHOW DATABASES; == Näyttää kaikki tietokannat.
GRANT ALL ON nimi.* TO nimi@localhost IDENTIFIED BY ‘salasana’;  == Luodaan käyttäjätunnus ja salasana sekä annetaan oikeus käyttää tiettyn tietokantan.

hw5 mariadb3
Kirjaudutaan tavallisena User tililla komennolla:
mariadb – u name -p
Tarkistetaan, että tavallinen käyttäjä ei pysty luomaan tietokantoja:
hw5 mariadb 4
Luodaan taulukkoja:
Valitaan tietokanta komennolla: USE nimi;
Luodaan taulukko komennolla(tiedot voi pistaa erillaiset): CREATE TABLE nimi (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(1024), price FLOAT);hw5 mariadb 6
Pistetään uudet tiedot taulukkoon:
Komennot:
INSERT INTO nimi(name, price) VALUES (“Tietokone”, 2500.0); == Lisätään arvoja taulukkon.
UPDATE nimi SET price=2250.0 WHERE id=1; == Päivitetään tietoja.
DELETE FROM nimi WHERE price<1000; Poistetaan tietoja.

hw5 mariadb 7

b) Tee PHP-ohjelma, joka lukee tietueita MariaDB-tietokannasta.
http://terokarvinen.com/2016/read-mysql-database-with-php-php-pdo

Asennetaan kaksi tärkeä pakettia, että voidaan käyttää tietokantoja web palvelimella ja että se toimisi PHP:n kanssa(LAMP pitää olla asennettuna):

sudo apt-get install libapache2-mod-php php-mysql

Varmista, että userdir on otettu käyttöön ja php7.2.conf tiedostossa seuraavassa tekstissä pitää kommentoida IfModule:

#<IfModule mod_userdir.c>
# <Directory /home/*/public_html>
# php_admin_flag engine Off
# </Directory>
#</IfModule>

Käynistä uudelleen apache2!

$ sudo a2enmod userdir
$ sudoedit /etc/apache2/mods-available/php7.0.conf
$ sudo systemctl restart apache

Tarkistetaan, että PHP toimii!
Seuraavaksi luodaan public_html kansioon index.php tiedoston ja kirjoitetaan PHP koodi, mihin syötetään meidän tietokantan tiedot:
koodi oli lainattu tästä: http://terokarvinen.com/2016/read-mysql-database-with-php-php-pdo

hw5-korjaus.png
Toimi!
hw5 php2

c) Lisää PHP-ohjelmaasi mahdollisuus lisätä tietueita tietokantaan.
Koodi on lainattu:
http://terokarvinen.com/2018/php-database-select-and-insert-example-php-pdo

hw5-php-3.png

Jostain syystä hinta ei tullut näkyville, yritin vähän koodata ja muuttaakoodia, mutta epäonnistuin.
hw5-php4-e1537983348661.png

Aiheutti tämän:
hw5 php 5

Homework 4. How to rent a dedicated server

Tehtävänanto on kopioitu Tero Karvisen sivulta:
http://terokarvinen.com/2018/aikataulu–linux-palvelimet-ict4tn021-3003-to-8-14-alkusyksy-2018p1–5-op

a) Vuokraa virtuaalipalvelin ja tee sille alkutoimet (ssh, tulimuuri, normaali sudo-käyttäjä, root lukkoon, päivitys).

OK, aluksi olen luonut uuden droplet:in DigitalOcean.com kautta.
Valitaan Ubuntu 18.04 x64 uuden version, 1GB ram muisti,  1cpu, 25 GB SSD ja 1 TB siirto nopeuden (transfer).
Valitaan lähin serveri.
Valitaan hostname eli serverin nimi.
Monta droplets halutaan luoda? = 1.
Sitten kun kaikki asetuksen on valittu. Painetaan luoda ja venataan pari minuttia.

Seuraavaksi otetaan yhteyttä palvelimelle komennolla ssh root@”tähän serverin ip”
esim. ssh root@123.45.678.90 ja salasana minkä saatiin.

Heti vaihdetaan salasana! Se pitää olla vahva. Sisältää numeroita, merkkeja, tarpeeksi pitkä. Ei saa liittyä mitenkään teidän arkki elämään tai lempi asioihin. Esim. koiran nimi on huono.

Otetaan firewall käyttöön!
Ennen sitä otetaan portti 22 tcp auki, että voidaan kirjautua normaali käyttäjänä myöhemmin. Komento: sudo ufw allow 22/tcp
Ja firewall kayttöön: sudo ufw enable

firewall enbale

Otetaan 80 portti auki heti, että voidaan myöhemmin avata web sivuja.
sudo ufw allow 80/tcp

Tarkistetaan, että muutoksetovat voimassa komennolla:
sudo ufw status verbose
verbose.png

Seuraavaksi luodaan käyttäjä, jonka kautta jatkossa kirjaudutaan sisään serverille.
Salasana keksitään erillainen kun root:lle!!!
Komento: sudo adduser “username”
Lopussa kirjoitetaan omat tiedot, mutta ei ole pakko.
adduser

Lisäksi lisätään meidän tekemä account kolmen ryhmän sudo, adm ja admin.
Komennot:

$ sudo adduser "username" sudo
$ sudo adduser "username" adm
$ sudo adduser "username" admin

Tarkistetaan, että yhteys meidän uuden käyttäjän toimii.
ssh “username”@”server ip”

Jos toimii, niin voi sulkea root account komennolla:

$ sudo usermod --lock root

Ja otetaan pois käytöstä ssh yhdeyden ottaminen root:ina.

$ sudoedit /etc/ssh/sshd_config

    # ...
    PermitRootLogin no
    # ...

$ sudo service ssh restart

permitrootlogin_no.png

Tarkistetaan ja ladataan viimeiset päivitykset:
sudo apt-get update
sudo apt-get upgrade

b) Asenna Apache ja laita käyttäjän kotisivut näkyviin

Asennetaan apache2 serverille:

$ sudo apt-get install apache2

otetaan käyttöön userdir modulin:

$ sudo a2enmod userdir
$ sudo systemctl restart apache2

Luodaan kansio mihin tulee websivut:

$ mkdir public_html

Poistetaan apache2 etusivun, ja tehdään uusi tyhjä index.html

cd /var/www/html
sudo rm index.html
sudo nano index.html

Luodaan käyttäjän etusivu:
cd public_html
nano index.html
nothing
Katsotaan, että toimii. Webselaimessa kirjoitat omat tiedot:
http://123.45.678.90/~username/

c) Vuokraa (tai lainaa) domain-nimi osoittamaan palvelimeesi.

Vuokrasin itselleni oman domainin NameCheap palvelusta.
Miten liitetään sitä oman serverin ip osoitteseen?

Mennään asetuksin Domain List –> Advanced DNS –> Luodaan uusi Record –> A Record –> www –> oman serverin ip osoite –> automatic –> VALMIS.

Siirretään meidän uuden osoitteeseen http://www.gurinkonstantin.com

d) Laita käyttäjän kotihakemistossa olevat sivut näkymään palvelimen etusivulla. (name based virtual hosting, default website)

Eli luodaan uusi Name Based Virtual Host

$ sudoedit /etc/apache2/sites-available/home.gurinkonstantin.com.conf $ cat /etc/apache2/sites-available/home.gurinkonstantin.com.conf

Kirjoitetaan sinne allaoleva teksti.
Eli merkataan sivun alanimi home ja päänimi gurinkonstantin.com

namebased1

Otetaan käyttöön site ja päivitetään:

$ sudo a2ensite home.gurinkonstantin.com
$ sudo systemctl restart apache2

namebased2.png

Luodaan kansioita ja etusivu uudelle websivulle home.gurinkonstantin.com:

$ mkdir -p /home/s174rd/publicsites/home.gurinkonstantin.com/

namebased3.png

Testaillaan:

$ curl -H 'Host: home.gurinkonstantin.com' localhost
$ curl localhost

namebasedtest.png

Vastaus home –> on home.gurinkonstantin.com
Vastaus Moi! –> on gurinkonstantin.com

Jostain syystä se näyttää, että toimii. Mutta kun yritän mennä home.gurinkonstantin.com linkkin kautta, se ei toimi…

Ratkaistu: Piti namecheapin kautta säätää sen osoitteen erikseen.
https://www.namecheap.com/support/knowledgebase/article.aspx/9776

e) Etsi palvelimen lokeista esimerkkejä murtautumisyrityksistä. Mistä maista ja miltä operaattoreilta murtautujat tulevat (host, geoiplookup, whois)

Komennolla katsotaan viimeiset logit:

$ cd /var/log
/var/log$ tail -F syslog

host 46.161.42.118
Host 118.42.161.46.in-addr.arpa. not found: 3(NXDOMAIN)
https://www.whois.com/whois/46.161.42.118

organisation:   ORG-WS171-RIPE
org-name:       Barbarich_Viacheslav_Yuryevich
org-type:       OTHER
address:        Russia
address:        Marks
address:        5-ya liniya, d.17
abuse-c:        ACRO5735-RIPE
admin-c:        BVY17-RIPE
tech-c:         BVY17-RIPE
mnt-ref:        MNT-PIN
mnt-ref:        MNT-PINSUPPORT
mnt-by:         MNT-PINSUPPORT
created:        2017-04-01T16:43:45Z
last-modified:  2018-05-01T21:23:09Z
source:         RIPE # Filtered

TÄSTÄ IP:STA LÖYTYI ARTIKKELI!

https://krebsonsecurity.com/tag/barbarich_viacheslav_yuryevich/

IP General Information

IP Address:
46.161.42.118
Hostname:
46.161.42.118
ISP:
Petersburg Internet Network ltd.

IP Geolocation Information

Continent:
Europe (EU)
Country:
Russia (RU) RU
City:
Moscow
Time Zone:
Europe/Moscow
Latitude:
55.7522 (55°45’7.92″ N)
Longitude:
37.6156 (37°36’56.16″ N)

host 78.128.112.54
54.112.128.78.in-addr.arpa domain name pointer ip-112-54.4vendeta.com.

IP General Information

IP Address:
78.128.112.54
Hostname:
78.128.112.54
ISP:
Lir.bg EOOD

IP Geolocation Information

Continent:
Europe (EU)
Country:
Bulgaria (BG) BG
City:
Time Zone:
Europe/Sofia
Latitude:
42.7 (42°42’0″ N)
Longitude:
23.3333 (23°19’59.88″ N)

host 196.52.43.90
Host 90.43.52.196.in-addr.arpa. not found: 3(NXDOMAIN)

IP General Information

IP Address:
196.52.43.90
Hostname:
196.52.43.90
ISP:
LogicWeb Inc

IP Geolocation Information

Continent:
North America (NA)
Country:
United States (US) US
City:
Edison
Time Zone:
America/New_York
Latitude:
40.4981 (40°29’53.16″ N)
Longitude:
-74.3194 (74°19’9.84″ S)