h4

a) Laita hankkimallesi virtuaalipalvelimelle mahdollisuus tehdä kotisivuja normaalin käyttäjän oikeuksin.

Tehtävää aloittaessa minulla oli jo valmis tunnilla luotu VPS pyörimässä digitalocean.com:ssa, johon asennettuna Apache Web Server. Apachen asentamisesta voi lukea täältä.

Aluksi oli tärkeää laittaa päälle Apachen userdir-moduuli, mikä mahdollisti käyttäjien kotihakemistojen käytön. Tämä tapahtui komennolla sudo a2enmod userdir, jonka jälkeen Apache käynnistettiin uudestaan komennolla sudo systemctl restart apache2

Seuraavaksi loin testikäyttäjän user komennolla sudo adduser user ja vaihdoin tähän käyttäjään komennolla su – user. Testasin myös ettei käyttäjällä user ole sudo oikeuksia ajamalla komennon sudo -v. Sain takaisin viestin “Sorry, user user may not run sudo on linux-palvelimet.”, joten kyseessä oli nyt normaalikäyttäjä.

Tämän jälkeen loin käyttäjän kotihakemistoon public_html-kansion ja sinne index.html-sivun. Testasin sivua selaimessa osoitteessa laurihellsten.com/~user/ ja tehty sivu näkyi onnistuneesti.

s) Laita hankkimallesi virtuaalipalvelimelle käyttäjän kotihakemistoon tallennettu sivu näkymään Apachen oletussivuna.

Tämän vaiheen olin tehnyt jo tunnilla, joten käyn prosessin läpi lokaalisti kotikoneella tekemäni testikäyttäjän kautta

Aluksi vaihdoin sudo-oikeudet omaavaan käyttäjään ja loin käyttäjälleni uuden VirtualHostin komennolla sudoedit /etc/apache2/sites-available/user.conf ja lisäsin tähän tyhjään conf-tiedostoon tiedot:

<VirtualHost *:80>
ServerName testataan.com
ServerAlias www.testataan.com
DocumentRoot /home/user/public_html/
<Directory /home/user/public_html/>
Require all granted
</Directory>
</VirtualHost>

Tämän jälkeen lisäsin tehdyn VirtualHostin sites-enablediin komennolla sudo a2ensite user.conf

Tarkistin vielä, että tiedoston sisältö oli oikein komennolla sudo apache2ctl configtest, jonka jälkeen käynnistin Apachen uudestaan komennolla sudo systemctl restart apache2

Testatakseni domain-nimeä lokaalisti lisäsin yllä olevien vaiheiden lisäksi komennolla sudoedit /etc/hosts hosts-tiedostoon rivin 127.0.0.1 testataan.com, jolla selain tunnisti localhostiksi myös osoitteen testataan.com. Sain onnistuneesti näkyviin user-käyttäjän kotihakemistoon luodun kotisivun.

y) Etsi palvelimesi lokeista esimerkkejä murtautumisyrityksistä. Voit etsiä lisätietoa IP-osoitteista ottamatta niihin yhteyttä esimerkiksi komennoilla ipcalc, geoiplookup ja whois.

Aloitin asentamalla ohjelman whois komennolla sudo apt-get install -y whois

Seuraavaksi siirryin katsomaan auth.log-tiedostoa sijainnissa /var/log/auth.log komennolla tail -F auth.log. Lokissa olikin jo elämää heti suoraan, joten kokeilin tutkia vierailijoita whois-ohjelman avulla

Feb 10 17:29:31 linux-palvelimet sshd[5725]: Invalid user testing from 206.189.204.75 port 54918
Feb 10 17:29:31 linux-palvelimet sshd[5725]: pam_unix(sshd:auth): check pass; user unknown
Feb 10 17:29:31 linux-palvelimet sshd[5725]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=206.189.204.75
Feb 10 17:29:33 linux-palvelimet sshd[5725]: Failed password for invalid user testing from 206.189.204.75 port 54918 ssh2
Feb 10 17:29:33 linux-palvelimet sshd[5725]: Received disconnect from 206.189.204.75 port 54918:11: Bye Bye [preauth]
Feb 10 17:29:33 linux-palvelimet sshd[5725]: Disconnected from invalid user testing 206.189.204.75 port 54918 [preauth]
Feb 10 17:29:33 linux-palvelimet sshd[5723]: Failed password for root from 61.184.247.3 port 60176 ssh2
lauri@linux-palvelimet:/var/log$ whois 206.189.204.75
#
ARIN WHOIS data and services are subject to the Terms of Use
available at: https://www.arin.net/whois_tou.html
#
If you see inaccuracies in the results, please report at
https://www.arin.net/resources/whois_reporting/index.html
#
Copyright 1997-2019, American Registry for Internet Numbers, Ltd.
#
NetRange: 206.189.0.0 - 206.189.255.255
CIDR: 206.189.0.0/16
NetName: DIGITALOCEAN-30
NetHandle: NET-206-189-0-0-1
Parent: NET206 (NET-206-0-0-0-0)
NetType: Direct Allocation
OriginAS:
Organization: DigitalOcean, LLC (DO-13)
RegDate: 1995-11-15
Updated: 2018-03-26
Ref: https://rdap.arin.net/registry/ip/206.189.0.0
OrgName: DigitalOcean, LLC
OrgId: DO-13
Address: 101 Ave of the Americas
Address: 10th Floor
City: New York
StateProv: NY
PostalCode: 10013
Country: US
RegDate: 2012-05-14
Updated: 2019-02-04
Comment: http://www.digitalocean.com
Comment: Simple Cloud Hosting
Ref: https://rdap.arin.net/registry/entity/DO-13
OrgNOCHandle: NOC32014-ARIN
OrgNOCName: Network Operations Center
OrgNOCPhone: +1-347-875-6044
OrgNOCEmail: noc@digitalocean.com
OrgNOCRef: https://rdap.arin.net/registry/entity/NOC32014-ARIN
OrgAbuseHandle: ABUSE5232-ARIN
OrgAbuseName: Abuse, DigitalOcean
OrgAbusePhone: +1-347-875-6044
OrgAbuseEmail: abuse@digitalocean.com
OrgAbuseRef: https://rdap.arin.net/registry/entity/ABUSE5232-ARIN
OrgTechHandle: NOC32014-ARIN
OrgTechName: Network Operations Center
OrgTechPhone: +1-347-875-6044
OrgTechEmail: noc@digitalocean.com
OrgTechRef: https://rdap.arin.net/registry/entity/NOC32014-ARIN
#
ARIN WHOIS data and services are subject to the Terms of Use
available at: https://www.arin.net/whois_tou.html
#
If you see inaccuracies in the results, please report at
https://www.arin.net/resources/whois_reporting/index.html
#
Copyright 1997-2019, American Registry for Internet Numbers, Ltd.
lauri@linux-palvelimet:/var/log$ whois 61.184.247.3
% [whois.apnic.net]
% Whois data copyright terms http://www.apnic.net/db/dbcopyright.html
% Information related to '61.183.0.0 - 61.184.255.255'
% Abuse contact for '61.183.0.0 - 61.184.255.255' is 'anti-spam@ns.chinanet.cn.net'
inetnum: 61.183.0.0 - 61.184.255.255
netname: CHINANET-HB
descr: CHINANET Hubei province network
descr: Data Communication Division
descr: China Telecom
country: CN
admin-c: CH93-AP
tech-c: CHA1-AP
mnt-by: MAINT-CHINANET
mnt-lower: MAINT-CN-CHINANET-HB
status: ALLOCATED NON-PORTABLE
last-modified: 2008-09-04T06:50:00Z
source: APNIC
role: CHINANET HB ADMIN
address: 8th floor of JinGuang Building
address: #232 of Macao Road
address: HanKou Wuhan Hubei Province
address: P.R.China
country: CN
phone: +86 27 82862199
fax-no: +86 27 82861499
e-mail: hbadd@189.cn
remarks: send spam reports to hbadd@189.cn
remarks: and abuse reports to hbadd@189.cn
remarks: Please include detailed information and
remarks: times in GMT+8
admin-c: YZ83-AP
admin-c: ZC77-AP
tech-c: YZ83-AP
tech-c: ZC77-AP
nic-hdl: CHA1-AP
notify: hbadd@189.cn
mnt-by: MAINT-CN-CHINANET-HB
last-modified: 2013-08-06T11:09:18Z
source: APNIC
person: Chinanet Hostmaster
nic-hdl: CH93-AP
e-mail: anti-spam@ns.chinanet.cn.net
address: No.31 ,jingrong street,beijing
address: 100032
phone: +86-10-58501724
fax-no: +86-10-58501724
country: CN
mnt-by: MAINT-CHINANET
last-modified: 2014-02-27T03:37:38Z
source: APNIC
% This query was served by the APNIC Whois Service version 1.88.15-46 (WHOIS-UK3)

Seuraavaksi päätin katsella palomuurin lokia komennolla tail -F ufw.log

lauri@linux-palvelimet:/var/log$ tail -F ufw.log
Feb 10 17:33:00 linux-palvelimet kernel: [452907.130836] [UFW BLOCK] IN=eth0 OUT= MAC=72:d0:af:18:f4:85:f4:a7:39:d7:8a:7d:08:00 SRC=185.254.122.5 DST=167.99.41.9 LEN=40 TOS=0x00 PREC=0x00 TTL=246 ID=37973 PROTO=TCP SPT=45299 DPT=3224 WINDOW=1024 RES=0x00 SYN URGP=0
Feb 10 17:33:25 linux-palvelimet kernel: [452931.914892] [UFW BLOCK] IN=eth0 OUT= MAC=72:d0:af:18:f4:85:f4:a7:39:d7:8a:7d:08:00 SRC=191.101.128.41 DST=167.99.41.9 LEN=44 TOS=0x00 PREC=0x00 TTL=241 ID=54321 PROTO=TCP SPT=54665 DPT=3389 WINDOW=65535 RES=0x00 SYN URGP=0
Feb 10 17:33:38 linux-palvelimet kernel: [452944.448561] [UFW BLOCK] IN=eth0 OUT= MAC=72:d0:af:18:f4:85:f4:a7:39:d7:82:7d:08:00 SRC=37.218.35.19 DST=167.99.41.9 LEN=40 TOS=0x00 PREC=0x00 TTL=53 ID=4618 PROTO=TCP SPT=14507 DPT=5555 WINDOW=33760 RES=0x00 SYN URGP=0
Feb 10 17:34:17 linux-palvelimet kernel: [452983.457443] [UFW BLOCK] IN=eth0 OUT= MAC=72:d0:af:18:f4:85:f4:a7:39:d7:82:7d:08:00 SRC=31.184.193.53 DST=167.99.41.9 LEN=40 TOS=0x00 PREC=0x00 TTL=249 ID=33168 PROTO=TCP SPT=59091 DPT=8088 WINDOW=1024 RES=0x00 SYN URGP=0
Feb 10 17:34:29 linux-palvelimet kernel: [452995.819418] [UFW BLOCK] IN=eth0 OUT= MAC=72:d0:af:18:f4:85:f4:a7:39:d7:8a:7d:08:00 SRC=47.106.139.119 DST=167.99.41.9 LEN=53 TOS=0x00 PREC=0x00 TTL=46 ID=7969 PROTO=UDP SPT=36892 DPT=27015 LEN=33

Palomuuri näytti estävän paljon liikennettä, joten katsoin jälleen muutaman ip-osoitteen whoisin avulla.

lauri@linux-palvelimet:/var/log$ whois 37.218.35.19
% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See http://www.ripe.net/db/support/db-terms-conditions.pdf
% Note: this output has been filtered.
% To receive output for a database update, use the "-B" flag.
% Information related to '37.218.0.0 - 37.218.63.255'
% Abuse contact for '37.218.0.0 - 37.218.63.255' is 'abuse@euskaltel.com'
inetnum: 37.218.0.0 - 37.218.63.255
netname: EUSKALTEL-MOV
descr: Global Telecommunication Service Provider
descr: of the Basque Country in Spain
country: ES
admin-c: EU41-RIPE
tech-c: EU41-RIPE
status: ASSIGNED PA
mnt-by: EUSKALTEL-MNT
created: 2015-08-12T10:02:23Z
last-modified: 2015-08-12T10:02:23Z
source: RIPE # Filtered
role: EUSKALTEL RIPE
address: Edificio 809
address: Parque Tecnologico de Zamudio
address: 48160 Derio (BIZKAIA)
address: Spain
phone: +34 94 4011000
admin-c: MLP363-RIPE
admin-c: NG1816-RIPE
tech-c: MLP363-RIPE
tech-c: NG1816-RIPE
nic-hdl: EU41-RIPE
remarks:
remarks: For information, visit:
remarks: http://www.euskaltel.com
remarks:
mnt-by: EUSKALTEL-MNT
created: 2002-03-05T08:15:07Z
last-modified: 2015-06-30T13:39:09Z
source: RIPE # Filtered
abuse-mailbox: abuse@euskaltel.com
% Information related to '37.218.0.0/17AS12338'
route: 37.218.0.0/17
descr: Euskaltel
origin: AS12338
mnt-by: EUSKALTEL-MNT
created: 2012-04-04T10:43:04Z
last-modified: 2012-04-04T10:43:04Z
source: RIPE
% This query was served by the RIPE Database Query Service version 1.92.6 (HEREFORD)
lauri@linux-palvelimet:/var/log$ whois 185.254.122.5
% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See http://www.ripe.net/db/support/db-terms-conditions.pdf
% Note: this output has been filtered.
% To receive output for a database update, use the "-B" flag.
% Information related to '185.254.122.0 - 185.254.122.255'
% Abuse contact for '185.254.122.0 - 185.254.122.255' is 'abuse@sshvps.net'
inetnum: 185.254.122.0 - 185.254.122.255
netname: ARTURAS
country: LT
admin-c: AZ7180-RIPE
tech-c: AZ7180-RIPE
status: ASSIGNED PA
mnt-by: media-land-llc
created: 2018-11-15T13:02:39Z
last-modified: 2018-12-27T13:38:33Z
source: RIPE
person: Media Land LLC
address: Zastavskaya str. 33
address: Sankt-Peterburg
address: Russia
phone: +88124991601
nic-hdl: AZ7180-RIPE
mnt-by: media-land-llc
created: 2018-04-06T15:04:59Z
last-modified: 2018-10-20T12:22:07Z
source: RIPE # Filtered
% Information related to '185.254.122.0/24AS206485'
route: 185.254.122.0/24
origin: AS206485
mnt-by: media-land-llc
created: 2019-01-14T17:23:31Z
last-modified: 2019-01-14T17:23:31Z
source: RIPE
% This query was served by the RIPE Database Query Service version 1.92.6 (BLAARKOP)

Tunkeutumisyrityksiä näytti tulevan ympäri maailmaa ja niitä tuli myös varsin pelottavaa vauhtia. Hyvä siis pitää palomuuri päällä ja salasanat vahvoina.

b) Tee weppisivuja paikallisella koneellasi ja kopioi ne palvelimelle scp-komennolla.

Päätin kokeilla siirtää lokaalisti kotikoneella tekemäni user-käyttäjän kotisivun virtuaalipalvelimelleni. Katsoin ensin mikä virtuaalikoneeni ip-osoite on komennolla hostname -I ja sen jälkeen siirryin kotikoneellani siirrettävän tiedoston kansioon /home/user/public_html/. Seuraavaksi siirsin index.html-tiedoston virtuaalipalvelimelleni komennolla scp index.html user@167.99.41.9:/home/user/public_html. Scp kysyi käyttäjän user salasanaa ja sen annettuani siirsi tiedoston.

Koska kohdekansiossa oli jo index.html -niminen tiedosto, oletin sen ylikirjoittuvan ja niin kävikin. Katsoessa selaimesta virtuaalipalvelinta näkyi siellä onnistuneesti lokaalisti tekemäni index.html


c) Laita palvelimellesi jokin yksinkertainen PHP-sivu. Voit esimerkiksi tulostaa käyttäjän IP-osoitteen$_SERVER[‘REMOTE_ADDR’] tms. Ole huolellinen, jos otat vastaan syötteitä lomakkeilla (forms).

Palvelimellani oli jo valmiiksi PHP asennettuna. PHP:n asentamisesta voi lukea täältä.

Aluksi siirryin käyttäjän user public_html-kansioon /home/user/public_html ja nimesin index.html-tiedoston .php päätteiseksi komennolla mv index.html index.php. Tämän jälkeen lähdin muokkaamaan Nanolla tiedostoa (nano index.php). Lopputuloksena sivu, joka näyttää clientin ip-osoitteen.

Lähteet:

Karvinen, Tero 2019. Suullinen tiedonanto.

Karvinen, Tero 2017. First Steps on a New Virtual Private Server – an Example on DigitalOcean and Ubuntu 16.04 LTS. Luettavissa: http://terokarvinen.com/2017/first-steps-on-a-new-virtual-private-server-an-example-on-digitalocean

Karvinen, Tero 2016. New Default Website with Apache2 – Show your homepage at top of example.com, no tilde. Luettavissa: http://terokarvinen.com/2016/new-default-website-with-apache2-show-your-homepage-at-top-of-example-com-no-tilde

Linuxize 2018. How to Use SCP Command to Securely Transfer Files. Luettavissa: https://linuxize.com/post/how-to-use-scp-command-to-securely-transfer-files/

Itman 2016. How to get client IP address in PHP. Luettavissa: http://itman.in/en/how-to-get-client-ip-address-in-php/

Advertisements

h3

a) Asenna Apache, laita käyttäjien kotisivut (http://example.com/~tero) toimimaan. Testaa esimerkkikotisivulla.

Avasin ensin palomuuriin portit 22 ja 80 komennolla sudo ufw allow 22/tcp ja sudo ufw allow 80/tcp ja käynnistin palomuurin komennolla sudo ufw enable. Varmistin myös, että oikeat portit ovat sallittu komennolla sudo ufw status.

Seuraavaksi asensin Apachen komennolla sudo apt-get -y install apache2. Asennuksen jälkeen siirryin selaimessa osoitteeseen “localhost” katsomaan, että apache oli onnistuneesti asentunut ja toiminnassa.

Muokkasin Apachen default-sivun erilaiseksi komennolla echo jes | sudo tee /var/www/html/index.html, mikä korvasi default-sivun sisällön tekstillä “jes”.

Ajoin komennon sudo a2enmod userdir, jotta pääsisin käyttämään käyttäjien kotihakemistoja. Apache oli tämän jälkeen käynnistettävä uudestaan komennolla sudo systemctl restart apache2

Tämän jälkeen siirryin oletuskäyttäjä xubuntun kotihakemistoon /home/xubuntu ja loin sinne kansion public_html ja kansioon index.html-tiedoston. Testasin osoitteessa localhost/~xubuntu, ja sivu näytti olevan onnistuneesti toiminnassa.

b) Surffaa oman palvelimesi weppisivuja. Etsi Apachen lokista esimerkki onnistuneesta (200 ok) sivulatauksesta ja epäonnistuneesta (esim 404 not found) sivulatauksesta. Analysoi rivit.

Seuraavaksi siirryin kansioon /var/log/apache2 ja ajoin komennon tail -F access.log. Löysin useamman onnistuneen GET-pyynnon tekemistäni aiemmista sivun päivityksistä. Kokeilin muutaman kerran vielä päivittää sivua ja sain takaisin tasaisesti 200 statusta. Viestissä näytti lukevan järjestyksessä vasemmalta oikealle clientin ip-osoite, pyynnön päivämäärä ja aika, pyynnön kohdesijainti palvelimella, http-protokolla, vastauksen status-koodi, palautetun objektin koko ja tietoja clientin selaimesta. Mielenkiintoisena sivuhavaintona päivittäessä sivua normaalisti (ctrl+r tai selaimen reload-nappula), palautetun objektin koko oli aina 479, kun taas päivittäessä sivun painaen myös shift-nappulaa, oli objektin koko hieman suurempi 480.

Saadakseni 404-statuksen kokeilin kirjoittaa osoiteriviin erilaisia päätteitä ja sain tällä tavalla takaisin “Not Found”-sivun, koska tässä vaiheessa olin tehnyt vain index.html-sivun ja kansiossa ei ollut muuta.

c) Tee virhe weppipalvelimella ajettavaan koodiin (esim PHP tai Python), etsi se lokista ja analysoi tuo lokirivi

Asensin aluksin PHP-moduulin komennolla sudo apt-get install libapache2-mod-php. Apache oli käynnistettävä uudestaan komennolla sudo systemctl restart apache2. Tämän jälkeen muokkasin komennolla sudoedit tiedostoa php7.2.conf sijainnissa /etc/apache2/mods-available/php7.2.conf

Tiedoston viisi viimeistä riviä oli kommentoitava, jotta käyttäjien kotihakemistoissa voitaisiin käytää PHP:tä. Tein tämän ja käynnistin Apachen taas uudestaan ja testasin toimintaa kirjoittamalla nopean PHP-skriptin aiemmin tekemääni index.html-sivuun. Nimesin tiedoston uudestaan .php-päätteiseksi komennolla mv index.html index.php.

Tein koodin virheen kirjoittamalla rivin $file=fopen(“doesntexist.txt”,”r”), joka joka lukisi tiedostosta doesntexist.txt, mutta koska kyseistä tiedostoa ei ollut olemassa, sain virheilmoituksen Apachen error.log-lokiin.

[Sun Feb 03 20:34:59.823056 2019] [php7:warn] [pid 10951] [client 192.168.1.115:57566] PHP Warning:  fopen(doesntexist.txt): failed to open stream: No such file or directory in /home/xubuntu/public_html/index.php on line 13

Rivissä näkyi virheilmoituksen aika ja päivämäärä, varoituksen tyyppi, prosessin tunniste, asiakkaan osoite ja virheen syy. Tässä tapauksessa virheen syy oli, että kyseistä tekstitiedostoa ei löytynyt kohdekansiosta.

d) Tee virhe johonkin Apachen asetustiedostoon, etsi ja analysoi tuo rivi. Etsimiseen sopivat esimerkiksi Apachen omat lokit, syslog sekä ‘apache2ctl configtest’.

Siirryin Apachen kotihakemistoon /etc/apache2 ja aloin etsiä sopivaa tiedostoa muokattavaksi. Apache2.conf vaikutti mielenkiintoiselta, joten aloin muokkaamaan sitä komennolla sudoedit apache2.conf

Heti tiedoston alkupäässä löytyi kohta DefaultRuntimeDir, jonka päätin tehdä virheelliseksi lisäämällä siihen tekstiä. Käynnistin Apachen uudestaan ja sainkin heti vastaan virheviestin:

Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.

Ajoin komennon apache2ctl configtest, joka antoi vastaukseksi viestin:

[Sun Feb 03 21:42:46.145865 2019] [core:warn] [pid 11731] AH00111: Config variable ${APACHE_RUN_DIRasdfasdfasdfsadf} is not defined
apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot
Action 'configtest' failed.
The Apache error log may have more information.

Viestin mukaan kyseessä oli SyntaxError, jossa Apache ei käsitykseni mukaan tunnistanut DefaultRuntimeDir:iin annettua hakemistoa.

Ajoin myös Linuxin aiemmin suosittelemat komennot systemctl status apache2.service ja journalctl -xe, jotka antoivat myös samantyylisiä vastauksi ongelman syyksi.

g) Tee palvelimella ajettava weppiohjelma, joka käyttää tietokantaa. Voit tehdä jonkin yksinkertaisen CRUD-ohjelman, esimerkiksi TODO-listan

Korjasin apache2.conf-tiedoston takaisin normaaliksi ja käynnistin Apachen uudestaan. Seuraavaksi asensin MariaDB-tietokannan ja pwgen-salasanageneraattorin komennolla sudo apt-get -y install mariadb-client mariadb-server pwgen.

Käynnistin ohjelman root-käyttäjänä komennolla sudo mariadb -u root ja loin komennolla CREATE DATABASE test; tietokannan nimeltä test. Annoin oikeudet uudelle test-nimiselle käyttäjälle tähän tietokantaan komennolla GRANT ALL ON test. * TO test@localhost IDENTIFIED BY ‘pwgenilläSatunnaisestiLuotuSalasana’;

Suljin tietokantaohjelman komennolla exit ja kirjauduin uudestaan sisään, nyt käyttäjänä test (sudo mariadb -u test -p). Ohjelma kysyi käyttäjän test salasanaa ja sen annettuani pääsin onnistuneesti sisään tietokantaan. Siirryin tietokantaan test komennolla USE test; ja seuraavaksi loin tietokantaan uuden taulun tasks komennolla CREATE TABLE tasks (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(1024)); 

Testasin taulua lisäämällä sinne viestin “osta ruokaa” komennolla INSERT INTO tasks (name) VALUES (“osta ruokaa”); ja testasin vielä, että viesti oli mennyt onnistuneesti tauluun komennolla SELECT * FROM tasks;

Seuraavaksi avasin uuden terminaali-ikkunan ja siirryin kansioon /home/xubuntu/public_html/ muokkaamaan siellä olevaa index.php-tiedostoa.

Hain osoitteesta http://terokarvinen.com/2018/php-database-select-and-insert-example-php-pdo templaten PHP-tietokantayhteydelle ja muokkasin sen vastaamaan oman tasks-tietokantani tietoja ja sisältöä. Kokeilin selaimessa, mutta en nähnyt lisäämiäni muutoksia sivulla, joten menin katsomaan /var/log/apache2/error.log:ia. Sieltä sain virheilmoituksen

 [Sun Feb 03 22:44:58.992052 2019] [php7:error] [pid 11887] [client 192.168.1.115:58196] PHP Fatal error:  Uncaught PDOException: could not find driver in /home/xubuntu/public_html/index.php:16\nStack trace:\n#0 /home/xubuntu/public_html/index.php(16): PDO->__construct('mysql:host=loca…', 'tasks', 'XXXXXXXXX')\n#1 {main}\n  thrown in /home/xubuntu/public_html/index.php on line 16

Jonkin sortin ajuri näytti siis puuttuvan, ja myös muistikuvani tunnilta oli, että tällainen ehkä tarvittiin. Etsin komennolla apt-cache search php | grep -i php | grep -i mariadb, mutta en löytänyt mitään. Kokeilin uudestaan komennolla
apt-cache search php | grep -i php | grep -i mysql ja sain sitä kautta osumia. php-mdb2-driver-mysql -paketti vaikutti lupaavalta, joten asensin sen. Tietokantaohjelma ei kuitenkaan vielä tämänkään jälkeen toiminut. Nyt virheviestiksi tuli

[Sun Feb 03 23:14:33.191449 2019] [php7:error] [pid 16659] [client 192.168.1.115:58381] PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000] [1698] Access denied for user 'tasks'@'localhost' in /home/xubuntu/public_html/index.php:16\nStack trace:\n#0 /home/xubuntu/public_html/index.php(16): PDO->__construct('mysql:host=loca…', 'tasks', 'XXXXXXXXXX')\n#1 {main}\n  thrown in /home/xubuntu/public_html/index.php on line 1

Hetken ihmettelyn ja Googlailun jälkeen, tajusin että olin kirjoittanut koodiin usernamen kohdalle käyttämäni taulun nimen ja tämän korjattuani tietokantayhteys toimi normaalisti.

Lähteet:

Karvinen, Tero 2019. Suullinen tiedonanto.

Apache 2019. Log Files. Luettavissa: https://httpd.apache.org/docs/2.4/logs.html

Karvinen, Tero 2018. Install MariaDB on Ubuntu 18.04 – Database Management System, the New MySQL. Luettavissa: http://terokarvinen.com/2018/install-mariadb-on-ubuntu-18-04-database-management-system-the-new-mysql

Karvinen, Tero 2018. PHP Database SELECT and INSERT Example – php-pdo. Luettavissa: http://terokarvinen.com/2018/php-database-select-and-insert-example-php-pdo

h2


a) Aiheuta lokiin kaksi eri tapahtumaa: yksi esimerkki onnistuneesta ja yksi esimerkki epäonnistuneesta tai kielletystä toimenpiteestä. Analysoi rivit yksityiskohtaisesti.

Loin onnistuneen tapahtuman asentamalla ohjelman Nginx komennolla “sudo apt-get install nginx”. Asennuksen jälkeen siirryin var/log/-hakemistoon, jossa yritin ensin etsiä syslogista mainintoja tapahtumasta komenolla “grep nginx syslog”. En kuitenkaan saanut mitään mainintaa tapahtumasta tällä tavalla, joten yritin seuraavaksi hakea kaikista hakemiston tiedostoista komennolla “grep -Hrn nginx .”. Tällä tavalla sain onnistuneesti näkymään hakusanan “nginx” sisältäviä lokitiedostoja ja niiden sijainnin. Maininnat keskittyivät enimmäkseen dpkg.log-lokiin ja apt-kansiossa sijaitsevaan term.log-lokiin, jotka molemmat näyttivät listaavan ohjelman asennusta koskevia tapahtumia. Tämän lisäksi löysin vielä auth.log:sta yhden maininnan, joka näytti listaavan käyttämäni sudo-komennon, sekä apt-kansion history.log:sta maininnan komentoriviin kirjoittamastani apt-get -komennosta, sekä yhden lokituksen Nginx-ohjelman asentamisesta.

Kielletyn toimenpiteen lokitus osoittautui hieman vaikeammaksi. Yritin ensin tehdä kielletyn toimenpiteen yrittämällä poistaa home-kansion komennolla “rmdir home”. Tämä antoi minulle terminaaliin viestin rmdir: failed to remove ‘home’: Permission denied. Yritin seuraavaksi etsiä grepillä mainintaa tästä hakusanalla “rmdir”, mutta haku ei tuottanut osumia. Lyhyen Internet-etsinnän jälkeen minulle selvisi, että tällaisia tapahtumia ei kerätä lokiin, joten tällä tavalla en onnistunut saamaan lokitusta kielletystä toimenpiteestä.

Seuraavaksi kokeilin aiheuttaa epäonnistuneen toimenpiteen käyttäjän salasanaa vaihtamalla. Komennolla “passwd” pääsin vaihtamaan oletuskäyttäjä xubuntun salasanaa. Komentorivi kysyi heti alkuun käyttäjän vanhaa salasanaa. Oletuksen mukaisesti oletuskäyttäjällä ei ollut vielä salasanaa, joten tämä kohta olisi pitänyt ohittaa painamalla Enter. Sen sijaan kirjoitin jotain sekalaista salasanaksi ja sain takaisin viestin passwd: Authentication token manipulation error. Kokeilin ensin “tail syslog” -komennolla etsiä syslogista mahdollisia virheilmoituksia, mutta tällä tavalla en löytänyt mitään. Seuraavaksi kokeilin etsiä tailin avulla auth.log:sta, josta sain onnistuneesti vastaani authentication failure -lokituksen. Lokitus näyttäisi kertovan epäonnistuneesta autentikointiyrityksestä käyttäjälle xubuntu.

c) Tee unelmien apt-get -komento: yksi komentorivi, joka asentaa suosikkiohjelmasi. 

Ajoin komennon “sudo apt-get -y install gimp deluge nodejs npm”, jolla sain suoraan asennettua aiemmin kokeilemani kuvankäsittelyohjelma GIMP:n sekä torrent-ohjelma Delugen. Tämän lisäksi laitoin mukaan vielä Nodejs:n ja NPM:n javascript-kehitystä varten. Tarkistin GIMP:n ja Delugen asennukset ajamalla ne työpödällä, sekä Noden ja NPM komennoilla “node -v” ja “npm -v”, joka listasi minulle molempien versionumerot.


d) Asenna komentokehotteen paketinhallinnasta kolme itsellesi uutta komentorivillä toimivaa ohjelmaa. Kokeile kutakin ohjelmaa sen pääasiallisessa käyttötarkoituksessa.

Ensimmäisenä asensin tekstiedotori Vim:n (“sudo apt-get install -y vim”). Komennolla “vim foobar.txt” loin foobar-nimisen tekstitiedoston ja kirjoitin sinne hieman tekstiä.

Seuraavaksi asensin ohjelman cURL komennolla “sudo apt-get install -y curl”. Testasin ohjelmaa hakemalla aiemmin asentamaani Nodejs:aan uusimman version asennuspaketit komennolla “curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -“. Tämän jälkeen ajoin komennon “sudo apt-get install -y nodejs” ja Node päivittyi onnistuneesti versiosta 8.10.0 versioon 10.15.0.

Lopuksi kokeilin vielä ohjelmaa Htop asentamalla sen komennolla “sudo apt-get install htop” ja käynnistämällä sen komennolla “htop”. Ohjelma antoi hyvän ja kattavan näkymän taustalla pyöriviin prosesseihin.

Lähteet:

ITNext 2018. 10 CLI Tools that You Will Love. Luettavissa: https://itnext.io/10-cli-tools-that-you-will-love-d214bc73d856

AskUbuntu 2011. How to use “grep” command to find text including subdirectories. Luettavissa: https://askubuntu.com/questions/55325/how-to-use-grep-command-to-find-text-including-subdirectories

WebsiteForStudents 2018. Install The Latest Node.Js And NPM Packages On Ubuntu 16.04 / 18.04 LTS. Luettavissa: https://websiteforstudents.com/install-the-latest-node-js-and-nmp-packages-on-ubuntu-16-04-18-04-lts/

h1

a) Tee oma Linux-livetikku. Kokeile sitä jossain muussa kuin koulun koneessa

Latasin xubuntu-18.04-desktop-amd64.iso -tiedoston osoitteesta http://ubuntu.ipacct.com/xubuntu/18.04/release/

Latasin UNetbootin-ohjelman Windowsille osoitteesta https://unetbootin.github.io/ ja liitin tyhjän USB-tikun tietokoneeseen.

Käynnistin UNetbootin-ohjelman ja valitsin kohdan ”Levykuva” ja siihen lataamani iso-tiedoston. Tyypiksi valitsin USB-aseman ja painoin “OK”, mikä suoritti asennuksen.

USB-asennuksen jälkeen käynnistin tietokoneen uudelleen ja painoin F12-mikä vei minut Windows Boot Manageriin. Valitsin vaihtoehdon “USB HDD: Kingston DataTraveler 3.0” ja sain auki onnistuneesti Xubuntun näkymän.

b) Listaa testaamasi koneen rauta (‘sudo lshw -short -sanitize’)

Avasin Xubuntun terminaalin ruudun vasemmasta ylälaidasta aukeavasta valikosta ja kirjoitin komennon ” sudo lshw -short -sanitize”

c) Asenna kolme itsellesi uutta ohjelmaa. Kokeile kutakin ohjelmaa sen pääasiallisessa käyttötarkoituksessa

Latasin GIMP-kuvaeditorin kirjoittamalla terminaaliin komennon “sudo apt-get install gimp”. Ohjelma asentui nopeasti ja toimi mukavan helposti suoraan paketista.

Seuraavaksi kokeilin bittorrent-sovellusta Deluge. Asennus onnistui samalla tavalla suoraan terminaalista (“sudo apt-get install deluge”). Sovelluksen käyttöliittymä muistutti todella paljon Windowsista minulle aiemmin tuttua uTorrentia, joten käyttöönotto oli vaivatonta. Testasin sovellusta kokeilemalla ladata Xubuntu 18.04:n iso-tiedostoa.

Lopuksi asensin vielä Kazam-sovelluksen näyttökuvien tallennusta varten (“sudo apt-get install kazam”). Itse sovelluksen käyttö kävi helposti, mutta sovellus piilottaa kuvaa ottaessa itsensä, joten päädyin lopulta kuitenkin ehkä hieman koomisesti käyttämään vielä tässä vaiheessa kuitenkin Ubuntun sisäistä screenshot-ominaisuutta.

d) Mitä lisenssiä kukin näistä ohjelmista käyttää? Selitä lyhyesti, mitä oikeuksia ja velvolisuuksia tuosta lisenssistä seuraa.

GIMP käyttää Creative Common sAttribution-ShareAlike 4.0 International (CC BY-SA 4.0) -lisenssiä. Sen mukaan sovellusta saa jakaa ja muokata vapaasti, sekä myös muokattuna myydä ehdoilla, että alkuperäinen luoja mainitaan, mukaan liitetään linkki lisenssiin ja kerrotaan tehdyistä muokkauksista. Jos alkuperäismateriaalia muokataan tai sen päälle rakennetaan, on uuden version jakelu tehtävä samaa alkuperäisen version käyttämää lisenssiä käyttäen.

Deluge ja Kazam käyttävät molemmat GNU GPL v3 -lisenssiä, jonka mukaan sovelluksien lähdekoodiä saa kopioida, jakaa vapaasti ja muokata, mutta tehdyistä muokkauksista tulee mainita ja myös muokatut versiot pitää tämän saman lisenssin alla niiden mahdollisesta maksullisuudesta huolimatta.

e) Listaa käyttämäsi ohjelmat (esim. MS Word), kunkin ohjelman käyttötarkoitus (esim. Tekstinkäsittely) ja vastaava vapaa Linux-ohjelma (esim. LibreOffice Writer). Jos johonkin tarkoitukseen ei löydy vapaata Linux-ohjelmaa, listaa sekin

  • VScode (koodaus) -> VScode/Atom
  • Steam (pelaaminen) -> Steam
  • MS Office (tekstinkäsittely, presentaatiot) -> LibreOffice
  • uTorrent (torrent-client) -> Deluge
  • Google Chrome -> Google Chrome/Chromium/Mozilla Firefox
  • Photoshop (kuvankäsittely) -> GIMP
  • GIT bash (versionhallinta) -> Git bash
  • HWMonitor (laitteiston seuranta) -> Open Hardware Monitor
  • Avira/Malwarebytes (antivirus, antimalware) -> ClamAV, Comodo, Sophos

Lähteet:

Karvinen, Tero 2019. Suullinen tiedonanto.

Ubuntupit 2018. Best Linux Software: Our Editorial List of Essential Linux Apps. Luettavissa: https://www.ubuntupit.com/best-linux-software-our-editorial-list-of-essential-linux-apps/

Techradar 2018. Best Linux apps of 2018. Luettavissa: https://www.techradar.com/news/best-linux-apps

Creative Commons. Attribution-ShareAlike 4.0 International (CC BY-SA 4.0). Luettavissa: https://creativecommons.org/licenses/by-sa/4.0/

tldrLegal. GNU General Public License v3 (GPL-3). Luettavissa: https://tldrlegal.com/license/gnu-general-public-license-v3-(gpl-3)

GNU 2014. A Quick Guide to GPLv3. Luettavissa: https://www.gnu.org/licenses/quick-guide-gplv3.html