Tag: LAMP


Linux palvelimet – kotitehtävät 4


Linux palvelimet – kotitehtävät 4

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

Harjoitusympäristönä Ubuntu 17.04 (Zesty Zapus) Daily Build

Harjoituskoneen tiedot:

Emolevy X79A-GD65 (8D)

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

16GiB RAM

Näytönohjain GeForce GTX 690

Asenna alusta lähtien LAMP. (Linux voi olla asennettu valmiiksi tai Live-USB).

AsennettinLAMP otettiin aikaa toimenpiteistä. Ensimmäinen osa on testikoneelle asennettu (L)inux Xubuntu 17.04. Seuraavaksi asennettiin Apache2 -webpalvelin.

$ sudo apt-get update

$ sudo apt-get install apache2

Seuraavaksi todettiin asennuksen onnistuneen käymällä verkkoselaimella osoitteessa http://localhost, jolloin saatiin Apache2:n oletussivu näkyville. Aikaa kului 5min 30sek (toimenpiteet + raportointi).

Selection_001.png

Seuraavaksi otettiin käyttöön käyttäjän kansio palvelimella ja luotiin käyttäjälle aloitussivu. Tähän käytettiin seuraavia komentoja:

$ sudo a2enmod userdir //käyttäjän kansion käyttöönotto

$ sudo service apache2 restart //apache2 -palvelun uudelleenkäynnistys

$ cd //siirryttiin käyttäjän kotihakemistoon

$ mkdir public_html //luotiin kansio tuleville julkisille html -tiedostoille

Linux oli asennettu testikoneelle valmiiksi ja käyttäjä (suomisim) luotu asennuksen yhteydessä. Siirtymällä osoitteeseen http://localhost/~suomisim/ päästiin kansioon, johon käyttäjän kotisivut tehtäisiin.

Selection_003.png

Palomuuri

Seuraava askel oli parantaa tietoturvaa ottamalla käyttöön palomuuri. Tähän käytettiin komentoa sudo ufw enable. Koska kokoonpanoa ei ohjattu eikä testattu etänä, jätettiin palomuuri ehjäksi eikä puhkottu siihen reikiä. Aikaa kului yhteensä 12min.

MySQL

Jatkettiin LAMP-kokoamista asentamalla MySQL -tietokantaohjelma. Samalla asennettiin seuraavissa tehtävissä tarvittavat PHP-lisäpalikat. Käytetyt komennot:

$ sudo apt-get update

$ sudo apt-get -y install mysql-server mysql-client libapache2-mod-php php-mysql

MySQL -asennus kysyi Root-käyttäjän salasanaa, salasanaksi annettiin tarpeeksi monimutkainen salasana. Seuraavaksi kirjauduttiin tietokantaan, luotiin uusi tietokanta sekä käyttäjä ks. tietokannalle.

$ mysql -u root -p //käyttäjä root, -p varmistaa, että salasanaa kysytään erikseen, jotta se pysyy poissa lokeista

create database suomisim character set utf8; //luotiin uusi tietokanta (suomisim) ja valittiin käytettävä merkkijärjestelmä UTF-8

grant all on suomisim.* to suomisim@localhost identified by 'sensuroitusalasana'; //annettiin käyttäjälle suomisim kaikki oikeudet tietokantaan suomisim(ja tuleviin tämän alaisiin tietokantoihin) annettua salasanaa vastaan.

exit //kirjauduttiin ulos root-käyttäjältä

mysql -u suomisim -p //kirjauduttiin käyttäjänä suomisim)

show databases; //näytettiin tietokannat, joihin ks. käyttäjällä on oikeus

Selection_004.png

Näin luotu käyttäjä ei pysty sotkemaan muita kuin oman tietokantansa. Seuraavaksi kokeiltiin automatisoida MySQL -kirjautumisprosessi käyttäjälle suomisim.

$ exit

$ cd

$ nano .my.cnf //luotiin tiedosto, johon kirjattiin seuraavat kirjautumistiedot:
[client]
user="suomisim"
password="sensuroitusalasana"
database="suomisim"

Kun tämän jälkeen ajettiin komento mysql, päästiin kirjautumaan oikeaan tietokantaan oikealla käyttäjällä ilman hidasta kirjautumisprosessia. Aikaa kului alusta yhteensä 29 minuuttia. Lopuksi otettiin vielä PHP käyttöön ja varmistettiin sen toimivuus:

PHP asennus ja testaus

$ cd /etc/apache2/ //siirryttiin apache2 asetuskansioon

$ grep -ir php * //haettiin ks. kansion tiedostoista merkintöjä PHP

$ sudoedit /etc/apache2/mods-available/php7.0.conf //muokattiin tiedostoa, joka löytyi edellisen haun perusteella

Tiedostosta otettiin alla olevat asetukset pois päältä lisäämällä rivien eteen kommenttimerkin #.

Selection_005.png

$ sudo service apache2 restart 

$ cd

$ cd public_html

$ nano index.php

Lisättiin index.php -tiedostoon seuraava rivi: <?php print(2+2+”\n\n”); ?>

http://localhost/~suomisim/ -sivulla näkyi PHP-koodilla kirjoitetun laskutoimituksen tulos -> PHP toimii. Kokomaisaika LAMP-harjoituksen läpikäyntiin ja raportointiin oli n. 45 minuuttia.

Tee weppisivu, joka lukee PHP:lla rivejä tietokannasta.

Harjoitukseen käytettiin edellisessä tehtävässä asennettua LAMP:ia. Aloitettiin harjoitus luomalla tietokantataulu käyttäjälle suomisim. Tämän jälkeen lisättiin tietoja ja varmistettiin, että tiedot tallentuivat tietokantaan.

$ mysql //kirjauduttiin sisään

use suomisim; //valittiin oma tietokanta

create table pizza(id int auto_increment primary key, name varchar(1024), taste varchar(1024)); //luotiin tietokanta pizza ja siihen arvot id, name, taste

insert into pizza(name) values ('Kinkku'); //lisättiin tietokantaan pizza tietue kinkku

insert into pizza(name) values ('Tonnikala');

insert into pizza(name) values ('Ananas');

update pizza set taste="Herkullinen" where name="Kinkku"; //lisättiin tietueelle kinkku arvo Herkullinen

update pizza set taste="OK" where name="Tonnikala";

update pizza set taste="Menettelee" where name="Tonnikala";

select * from pizza; 

Selection_006.png

Näin varmistettiin, että tietokannan tiedot ovat ajan tasalla. Seuraavaksi luotiin websivu, joka hakee tiedot tietokannasta. Harjoituksen vuoksi luotiin ja muokattiin tiedosto Geany-tekstieditorilla, joka toimi erinomaisesti. Lähteenä PHP-koodille käytettiin w3schools.com -sivua. Koodia muokattiin omaan tietokantaan soveltuvaksi alla olevan kuvan mukaisesti.

-PHPo.php - -home-suomisim-public_html - Geany_007.png

Lopputuloksena tuotantoon valmis websivu, joka hakee pizzojen tiedot MySQL -tietokannasta. Alla kuvankaappaus sivusta.

Selection_008.png

Laita liitteeksi tai linkiksi raporttiisi tällä komenolla kerätty log.txt:

tail /var/log/syslog /var/log/auth.log /etc/lsb-release /var/log/apache2/*.log /proc/uptime >log.txt

==> /var/log/syslog <==
Feb 12 20:25:30 thor anacron[1281]: Job `cron.daily’ terminated
Feb 12 20:25:30 thor anacron[1281]: Normal exit (1 job run)
Feb 12 20:27:26 thor kernel: [ 421.746964] [UFW BLOCK] IN=eno1 OUT= MAC=d4:3d:7e:01:b0:4b:30:59:b7:8b:f5:60:08:00 SRC=192.168.1.112 DST=192.168.1.87 LEN=515 TOS=0x00 PREC=0x00 TTL=128 ID=24564 PROTO=UDP SPT=1900 DPT=59052 LEN=495
Feb 12 20:27:27 thor kernel: [ 422.991959] [UFW BLOCK] IN=eno1 OUT= MAC=d4:3d:7e:01:b0:4b:30:59:b7:8b:f5:60:08:00 SRC=192.168.1.112 DST=192.168.1.87 LEN=515 TOS=0x00 PREC=0x00 TTL=128 ID=24565 PROTO=UDP SPT=1900 DPT=59052 LEN=495
Feb 12 20:27:28 thor kernel: [ 423.897291] [UFW BLOCK] IN=eno1 OUT= MAC=d4:3d:7e:01:b0:4b:30:59:b7:8b:f5:60:08:00 SRC=192.168.1.112 DST=192.168.1.87 LEN=515 TOS=0x00 PREC=0x00 TTL=128 ID=24566 PROTO=UDP SPT=1900 DPT=59052 LEN=495
Feb 12 20:27:29 thor kernel: [ 424.973855] [UFW BLOCK] IN=eno1 OUT= MAC=d4:3d:7e:01:b0:4b:30:59:b7:8b:f5:60:08:00 SRC=192.168.1.112 DST=192.168.1.87 LEN=515 TOS=0x00 PREC=0x00 TTL=128 ID=24567 PROTO=UDP SPT=1900 DPT=59052 LEN=495

==> /var/log/auth.log <==

==> /etc/lsb-release <==
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=17.04
DISTRIB_CODENAME=zesty
DISTRIB_DESCRIPTION=”Ubuntu Zesty Zapus (development branch)”

==> /var/log/apache2/access.log <==

==> /var/log/apache2/error.log <==
[Sun Feb 12 20:25:29.382208 2017] [mpm_prefork:notice] [pid 1442] AH00163: Apache/2.4.23 (Ubuntu) configured — resuming normal operations
[Sun Feb 12 20:25:29.382233 2017] [core:notice] [pid 1442] AH00094: Command line: ‘/usr/sbin/apache2’

==> /var/log/apache2/other_vhosts_access.log <==

==> /proc/uptime <==
461.12 5351.63

Tee pinta-alan laskuri PHP:lla. Eli käyttäjä syöttää lomakkeella (form) pellon pituuden ja leveyden, laskuri kertoo weppisivulla pellon alan.

Pinta-ala-ohjelma toteutettiin Geany-tekstieditorilla, jolla luotiin kaksi .php tiedostoa, pala.php (pääsivu) ja pala-action.php.

pala.php

<!doctype html>

<html lang="en">
<head>
 <meta charset="utf-8">
 <title>Pinta-ala-Ohjelma</title>
 <meta name="author" content="Simo Suominen">
 <link rel="stylesheet" href="css/styles.css?v=1.0">

</head>

<body>
 http://js/scripts.js
 
 
 <form action="pala-action.php" method="post">
 <p>Anna pellon leveys metreissä: <input type="number" name="leveys" /></p>
 <p>Anna pellon pituus metreissä: <input type="number" name="pituus" /></p>
 <p><input type="submit" /></p>
</form>
 
</body>
</html>

pala-action.php

Pellon leveys on <?php echo htmlspecialchars($_POST['leveys']); ?> metriä
<p></p>
Pellon pituus on <?php echo htmlspecialchars($_POST['pituus']); ?> metriä

<p></p>
Pellon kokonaispinta-ala on

<?php

$first_number = htmlspecialchars($_POST['leveys']);
$second_number = htmlspecialchars($_POST['pituus']);
$sum_total = $second_number * $first_number;

print ($sum_total);

?>

neliömetriä.

Lopputuloksena oli yksinkertainen websivu, joka kysyi käyttäjältä pellon pituutta ja leveyttä ja laski niiden perusteella pellon pinta-alan.

Selection_010.png

Selection_012.png

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