Linux palvelimet harjoitus 6 ICT4TN021-5

Kolme yksinkertaista “Hello World!”- ohjelmaa eri kielillä.

-html
-php
-python3

Apache2 palvelimelle “Hello World!” käyttäen html:ää

Ladataan apache2.

‘sudo apt-get apache2’

Sitten tein oman kansio johon laitamme sivumme.

‘mkdir public_html’ -tein kansion
‘cd public_html’ -menin kansioon
‘nano index.html’ – tein kansioon tiedoston

Tiedoston sisällöksi.

<!doctype html>
<html>
<head>
<title>Hello World</title>
<meta charset=”utf-8″ />
</head>
<body>
<h1>Hello world!</h1>

</body>
</html>

Sallin sivuni komennolla:

‘sudo a2enmod userdir’

Ja uudelleen käynnistin apachen.

‘sudo service apache2 restart’

Lopputulos:

kolw

PHP-kielellä tehty “Hello World!”

Alustavasti hankin tarvittavat ohjelmat komennolla:

‘sudo apt-get install apache2 libapache2-mod-php’

Eli siis asensin apache2 jolla ajoin sivuni, jolla ohjelmani pyörii ja toinen asia jonka asensin oli apache2:n php liitos, jonka avulla pystyin ajamaan php-koodia palvelimellani.

Sitten tein kotisivulle kansion ja sinne itse sivun:

‘mkdir public_html’ -tein kansion
‘cd public_html’ -menin kansioon
‘nano index.php’ – tein kansioon tiedoston

Sitten sallin kotisivut

‘sudo a2enmod userdir’

Sitten sallin php:käytön

‘sudoedit /etc/apache2/mods-available/php7.0.conf’

Sieltä kommentoin tämän kohdan.

komkoht

Sitten käynnistin apachen uudelleen:

‘sudo service apache2 restart’

Itse sisältö index.php:hen

<!doctype html>
<html>
<head>
<title>Hello World</title>
<meta charset=”utf-8″ />
</head>
<body>
<p>Perus html:ää</p>
<?php print(“Hello World!!”); ?><br>
<?php print(2+2); ?>
</body>
</html>

Nyt sivuni tulosti tämän.

ekw

Kuten koodissa ja itse sivulla erittelin html ja php-koodin. Php myös selkeästi toimii, koska php tagit eivät näy sivulla ja tulostaa halutun lasku toimituksen. Lisäsin sen juuri siksi että näkee että itse php laskee sen.

Python3:lla “Hello World!”-ohjelma testiserverille

Tein ohjelman toimivaksi vain testi serverille, mutta siinä jo näkyy että python3 toimii, jos haluaa

Aluksi hankin python3 ja flaskin.

‘sudo apt-get -y install python3-flask’

Sitten tein tälle oman kansion.

‘mkdir flask’
‘cd flask’
‘nano main.py’

main.py kansioon laitetaan

from flask import Flask
app = Flask(__name__)

@app.route(“/”)
def hello():
return “Hello world!”

if __name__ == “__main__”:
app.run(debug=True)

Huomioi sisennykset.

Tiedoston sisältö ja ohjeet joita seuraan löytyy terokarvinen.com.

Nyt sivuni näyttää tältä

tokw

HUOM! Tämä on vain yksinkertainen tulostus pythonilla ja toistan ohjelma pyörii nyt testi palvelimella ja tällä todistan vain että itse python3 toimii alustavasti, jos haluaa tuotantoon asti ohjeet suosittelen Tero Karvisen ohjetta siihen, myös aikaisemmasta blogi lisäyksessä käyn tämä prosessin läpi.

Lähteet:

http://terokarvinen.com/2017/hello-python-flask-web-app-development-server-install-on-ubuntu-16-04

http://terokarvinen.com/2016/read-mysql-database-with-php-php-pdo

Cyber Security Nordic 2017 – Messurapotti

Vierailin Messukeskuksessa olevilla Cyber Securiy Nordic messuilla  ja toisella puolella olevissa Finnsec messuissa. Cyber Security:sta jäi kuitenki mieleen parit tuotteet ja kojut.

lavamesta

F-Secure

F-Secure Sense

F-Securen kojulla esiteltiin heidän tuotettaan, jonka tarkoituksena on turvata kaikki laitteet kotonasi. Perimmillään ideana on, että koko maailmasta tulee yhdistyneempi, tv:stä jääkaappeihin ja näihin “smart device” ei ole tällä hetkellä monia turva toimia. Tähän markkina reikään F-Secure yrittää päästä tuotteellaan. Tuote ei pelkästään suojaa vaan toimii samalla perus modeemina ja tätä kautta rajaa yhteyden älylaitteisiin tämän kautta. Viisaasti ei laiteta turvaa itse laitteisiin mikä olisi perin mahdotonta, vaan suppiloidaan yhteydet laitteen kautta, joka suojaa älylaitteita. Tietenkin “F-Secure SENSE” sisältää myös mahdollisuuden tarkkailla yhteyksiäsi heidän pivlipalvelimensa avulla ja tämän saa appin kautta puhelimeensikin. Mukaan tulee myös vpn palvelu mikä on plussaa. Ominaisuuksia oli monia, mutta en valitettavasti selvittänyt miten kaikki toimivat tarkalleen. Mutta kiinnostavimmat olivat käytösperusteinen esto ja vasta-seuranta, mutta olettaisin että yhteyden otto toimii säännöllisesti ja oudosti se estetään heti ja laite yrittää selvittää mistä yhteys yritykset tai hyökkäykset tulevat. Tietenkin ennen ostoa kannattaa selvittää tarkalleen kaikki ominaisuudet.

Tuotteelle löytyy kilpailua varsinkin kun älylaitteet rupeavat yleistymään. Esimerkiksi nopealla etsimisellä löytyi Bitdefender box joka maksaa 99$, tuote ei tosin toimi täysin samlla tavalla ja mukana ei ole F-Secure:n turvallista ja tunnettua nimeä. Mutta kilpailua kyllä on ja tulee, mutta tällä hetkellä F-Secure Sense voi olla sen arvoista.  Jos jollakin on varaa niin moneen älylaitteeseen, että niitä täytyy turvata erikseen on heillä varaa myös Senseen.

CySec Vault

CySec Vault on CySec Ice Wall Oy:n tekemä tuote, jonka pääideana on seurata kaikkea liikennettä omistajan verkossa.  Eli tarkoitus ei ole suojaus vaan seuranta. Tämä saattaa kiinnostaa yrityksiä, jotka ovat jo joutuneet ongelmiin jonkin sortin hyökkäyksen takia. CySec Vault, ei pelkästään seuraa vaan myös säilyttää liikenteen pitkiksi ajoiksi. Esimerkkinä oli jos, joku tekee pahaa verkollasi, sinulla on todistus aineistoa CySec Vault:ssa. Itse holviin päästetään vain rajattu ja valtuutettu määrä ihmisiä. Se myös toimii “näkymättömästi”, ettei edes käyttäjät näe toimintaa, saati sitten hyökkääjät.

Tuote kyllä kiinnosti, mutta olisin halunnut nähdä sisäistä toimintaa enemmän ja valitettavasti ei tullut kysyttyä. Hyökkäys seuranta ja jäljitys kiinnostaa minua ja tuote mahdollistaa jäljityksen teon paremmin, mutta jos yrityksellä on tarvetta seurata hyökkäyksiä useasti, ei tietoturva tee tehtäväänsä ja kannattaa mielummin investoida estoon kuin seurantaan. Kilpailua yrityksellä on varmasti, koska monet yrityksen jo seuraavat työntekijöiden netti selailuja, mutta voi olla että CySec Vault vetoaa, firmoihin jotka haluavat varmistaa kaiken eli syyttömyytensä mahdollisen rikoksen edessä, ja ovat valmiita investoimaan siihen.

Finnsec

Vaikka tarkoituksena oli Cyber Security messujen raportointi, jäi Finnsec puolelta parikin tuotetta mieleen.

-Ariki Smart

scanneri

Tuote tarjosi sisään pääsyturvaa biometri skanneri laitteilla, kuten sormen, silmän ja liikkeen tunnistamisella. Silmät ja sormet toimivat kuten yleensäkin eli yritys lisää työntekijän sormen ja silmän tunnustiedot tietokantaan, ja skannerit päästävät heidät läpi. Tuotteeseen kuului myös liike tunnistin joka esti toista henkilöä hyödyntämästä, ensimmäisen tunnistautumisesta johtavaa oven avausta. Eli liike tunnistin tunnistaa jos henkilöitä on useampi ja estää ovea avautumasta. Kysyin hintaa ja aloitus yhdelle ovella voisi olla 1000e paikkeilla, riippuen asennuksen laajuudesta. He myös tarjoavat pilvipalvelua joka yllä pitää tunnistautumis tietoja.

Tuotteelle varmasti löytyy kilpailua, mutta voi olla että Suomen markkinoilla ei ole niin paljon.

-Dedrone DroneTracker

drone

Drone uhkia vastaan tehty sensori, petyin että itse dronen maahantuontiin tarvitaan kolmannen osapuolen tuotteita, mutta sensorit ja toiminnallisuuden laajuus oli kiinostava. Skanneri siis tunnistaa dronen näöllä, kuulolla ja tajuus sensoreilla. Kuvittelisin että dronen lähettämä signaali paljastaa dronen. Kaiken tämän prosessoi DroneTrackerin ohjelma.

Suomessa tosin toistaiseksi turha tuote, mutta henkilökohtaisesti mielenkiintoista.

Linux palvelimet harjoitus 5 ICT4TN021-5

Sisältö:

  1. Oma “Hello World Ohjelma Flask testipalvelimella
  2. Tuotantotyyppinen asennus Python Flaskista (Apache mod_wsgi)
  3. Tietueitten luku Postgre-tietokannasta Flaskilla

“Hello World” Flask testipalvelimella

Alustavat ohjelmat joita vaaditaan, sain tällä komennolla:
‘sudo apt-get -y install python3 ipython3 python3-flask curl’

Tämän jälkeen loin flask kansion ja sinne hello.py tiedoston.
‘mkdir flask’
‘cd flask’ – mennään flask kansioon, jonne hello.py luodaa
‘nano hello.py’

Tiedostoon sisällöksi:

from flask import Flask
app = Flask(__name__)

@app.route(‘/’)
def hello_world():
return ‘Hello World’

if __name__ == ‘__main__’:
app.run(host=’0.0.0.0′, port=5000)

Eli flaskista tuodaan flask ja laitetaan app nimiseen muuttujaan. App:in reitti tulee ‘/’ eli tämä on viittaus sivulle jossa tiedosto pyörii. Eli jos ‘/’ lisäksi olisi hello (/hello) löytyisi  sivu (http://0.0.0.0:5000/hello).
Sisällä funktio hello_world ajetaan ja se palauttaa tekstin “Hello World”. Lopussa tiedosto ajetaan 0.0.0.0 osoitteessa ja portti 5000.

Tiedoston luonnin jälkeen minun piti vielä ajaa tiedosto komennolla:
‘python3 hello.py’

Nyt pitäisi olla tälläinen näkymä, sivulla ‘http://0.0.0.0:5000/&#8217; tai ‘http://localhost:5000&#8217;

HelloWorld0.1

2.Tuotantotyyppinen asennus Python Flaskista (Apache mod_wsgi)

Aikaisempien ohjelmien lisäksi tarvitsin Apache.
‘sudo apt-get -y install apache2’

Seuraavaksi hankin wsgi modin, jolla voin ajaa pythonia apache palvelimelta komennolla:
‘sudo apt-get -y install libapache2-mod-wsgi-py3’

Sitten tein wsgi tiedoston samaan kansioon kuin hello.py eli flask kansioon:
‘nano hello.wsgi’

Sisällöksi:

import sys

if sys.version_info[0]<3: # require python3
raise Exception(“Python3 required! Current (wrong) version: ‘%s'” % sys.version_info)

sys.path.insert(0, ‘/home/xubuntu/flask/’)
from hello import app as application

 

Loin virtualhostin komennolla:
‘sudoedit /etc/apache2/sites-available/hello.conf’

Tiedostoon sisällöksi:

## /etc/apache2/sites-available/hello.conf
<VirtualHost *>
ServerName rane.example.com

WSGIDaemonProcess hello user=xubuntu group=xubuntu threads=5
WSGIScriptAlias / /home/xubuntu/flask/hello.wsgi

<Directory /home/xubuntu/flask/>
WSGIProcessGroup hello
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On

Require all granted
</Directory>
</VirtualHost>

Huom! Varmista, että tiedosto polut ja tiedosto nimet ovat samat mitä olet itse käyttänyt. Esim user= on xubunutu koska se on käyttäjäni nimi.

Sitten tein hello.conf oletukseksi komennoilla:
‘sudo a2dissite 000-default.conf’
‘sudo a2ensite hello.conf’

Uudelleenkäynnistin apache2:n komennolla:
‘sudo service apache2 restart’

HUOM! Että 1. kohta on tehty ja että kaikkien tiedosto nimet ja polut ovat oikein.

helloworld0.2

Vakuutin itseni komennolla:
‘curl -sI localhost|grep Server’

Joka näyttää että serverinä toimii apache

proof

3.Tietueitten luku Postgre-tietokannasta Flaskilla

Alusavasti asensin itse PostgreSQL:n komennolla:
‘sudo apt-get -y install postgresql’
Tein databasen ja käyttäjän:
‘sudo -u postgres createdb xubuntu’
‘sudo -u postgres createuser xubuntu’

Huom!Käytä xubuntu:n sijasta omaa käyttäjänimeäsi.

‘psql’ komennolla tietokanta käynnistyi ja tietokantaan pystyi luomaan pöytiä ja niihin tietoa. Miltein samalla tavalla kuin muihinkin sql tietokantoihin.

Seuraavaksi loin Tero Karvisen esimerkin mukaisen tavan jolla tietoa haetaan ja laitetaan tietokantaan.

Hankitaan sqlalchemy ja psycopg2 modit:
‘sudo apt-get -y install python3-flask-sqlalchemy python3-psycopg2’

Muokataan hello.py:

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
app.config[‘SQLALCHEMY_DATABASE_URI’] = ‘postgresql:///xubuntu’
app.config[‘SECRET_KEY’] = ‘k377AglooNex+932.asdjReajeIxane436’

def sql(rawSql, sqlVars={}):
“Execute raw sql, optionally with prepared query”
assert type(rawSql)==str
assert type(sqlVars)==dict
res=db.session.execute(rawSql, sqlVars)
db.session.commit()
return res

@app.before_first_request
def initDBforFlask():
sql(“CREATE TABLE IF NOT EXISTS hellos (id SERIAL PRIMARY KEY, name VARCHAR(160) UNIQUE);”)
sql(“INSERT INTO hellos(name) VALUES (‘Bonjour’) ON CONFLICT (name) DO NOTHING;”)
sql(“INSERT INTO hellos(name) VALUES (‘Hola’) ON CONFLICT (name) DO NOTHING;”)
sql(“INSERT INTO hellos(name) VALUES (‘Moi’) ON CONFLICT (name) DO NOTHING;”)
sql(“INSERT INTO hellos(name) VALUES (‘Hello’) ON CONFLICT (name) DO NOTHING;”)

@app.route(“/”)
def hello():
return “Hello World! <a href=’/hellos’>List of different hellos</a>\n”

@app.route(“/hellos”)
def hellos():
hellos=sql(“SELECT * FROM hellos;”)
return render_template(“hellos.html”, hellos=hellos)

if __name__ == “__main__”:
from flask_sqlalchemy import get_debug_queries
app.run(debug=True)

Eli aluksi luon yhteyden tietokantaan, sitten luon itse pöydän tietokantaan ja tiedot sinne, jos niitä ei vielä ole. Sitten tulostan ‘/’ sivulle vain “Hello World!”:in ja linkin toiselle sivulle (/hellos) ja /hellos sivulle tuon tiedot tietokannastamme.

Esimerkissä käytetään templateja, joten niin minäkin eli tein flask kansioon ‘templates’ kansion johon tein hellos.html ja base.html

Hellos.html laitoin:

{% extends “base.html” %}

{%block title%} Hellos {%endblock title%}

{% block contents %}
<h1>Hellos</h1>
{% for hello in hellos %}
<p>{{ hello.name }}</p>
{% endfor %}
{% endblock contents %}

Eli Sivulle tulee Hellos otsikkona ja <p> kohtaan kaikki hellosin sisältämät tiedot, yksi kerrallaan, kiitos for loopin.

Sitten base.html vain täytteeksi (huom ei väliä)

<!doctype html>
<html>
<head>
<title>
{%block title%}
Hello World
{%endblock title%}
</title>
<meta charset=”utf-8″ />
</head>
<body>
{% block contents %}
<h1>Hello World</h1>
{% endblock contents %}
</body>
</html>

Huom! Jos saat 500 internal server erroria, yksi mahdollinen virhe on voinut tulla hello.py muokatessa, jos sisennykset eivät ole oikein. Tämä vain yksi asia jonka itse koin tehdessäni.

Lopulta restarttasin apachen ja lopputulos oli tämä.

localhellossecondhellos

Lähteet:

Tehtävänanto:
http://terokarvinen.com/2017/aikataulu-linux-palvelimet-ict4tn021-4-ti-ja-5-to-alkusyksy-2017-5-op

Ohjeet asennuksille:
terokarvinen.com/2016/deploy-flask-python3-on-apache2-ubuntu

Postgre tietokanta esimerkki:
http://terokarvinen.com/2017/database-connection-from-python-flask-to-postgre-using-raw-sql