Kotitehtävä #7

a) Vanhan arvioitavan laboratorioharjoituksen ratkaiseminen.

Linkki tehtävänantoon: Tero Karvisen Linux palvelimet -kurssisivu. (Harjoitus 7)

Harjoitusta varten suoritan toimet “puhtaalta pöydältä”, eli Xubuntu 16.04.03 LTS -livetikulta.

Valitsemani harjoitus: Arvioitava laboratorioharjoitus – Linux palvelimet ict4tn021-2 (uusi OPS) alkukeväällä 2017 p1.

Puran harjoituksen tähän pala palalta ja selitän jokaisessa kohdassa tekemäni toimenpiteet.

Haluamme tehdä PHP-kotisivuja etäältä.

Työntekijöitämme ovat Jorma Mähkylä, Pekka Hurme, Ronaldo Smith, Håkan Petersson, Einari Mikkonen, Einari Vähäkäähkä, Eija Vähäkäähkä. Tee heille HTML5-esimerkkikotisivut siten, että kunkin testisivun otsikossa lukee omistajan käyttäjätunnus.Maija Virtanen jatkaa ylläpitoa, tee hänelle sudo-tunnus.

Maija haluaa käyttäjätunnuksen “maija”.

Kotisivuja on kätevä ajaa Apache-palvelimella, joten aloitan tehtävän käynnistämällä terminaalin ja ajamalla seuraavat komennot:

setxkbmap fi (saadaan ääkköset toimimaan)
sudo apt-get update (päivitetään pakettilistaus)
sudo apt-get -y install apache2 libapache2-mod-php (asennetaan apache2 ja php-modi siihen)

Asennuksen jälkeen kokeilin selaimella osoitetta http://localhost (tai http://127.0.0.1), josta saan varmistuksen “Apache2 Ubuntu default page” -sivun muodossa, että Apache2 on onnistuneesti asentunut.

Asennan samalla myös pwgen-ohjelman, jolla on helppo luoda turvallisia salasanoja, joita tulen tarvitsemaan kun luon käyttäjien salasanoja.

sudo apt-get -y install pwgen (pwgenin asennus)
pwgen -sC 12 8 > passut.txt (s-parametri tekee salasanoista täysin randomeja, C-parametri pistää ne kolumneihin, 12 = salasanan pituus, 8 = salasanojen määrä), > passut.txt tallettaa ne passut.txt-tiedostoon)

Nyt kun salasanat on tehty, voin aloittaa tunnuksien luomisen. Kirjaan tunnukset myös kyseiseen passut.txt-tiedostoon. Tunnukset aion tehdä muodossa: etunimen ensimmäinen kirjain + sukunimen 5 ensimmäistä kirjainta. Jos eteen tulee ääkkösiä tai jotain erikoisempia tapauksia, niin muutan ne “jenkkimäiseksi”, esim: ä -> a. Einari ja Eija Vähäkäähkän kohdalla päätin erottaa heidän tunnuksensa numerolla, Eija saa numeron kaksi tunnuksensa perään.

Tunnusten luonti:

sudo adduser jmahky (rinse and repeat kaikille muillekin tunnuksille, paitsi Maija Virtaselle ja Eija Vähäkäähkälle)

Maija tarvitsi sudo-oikeudet, joten hänen tunnuksen kohdalla tarvittiin vielä luonnin jälkeen:

sudo adduser maija sudo (lisää maijan sudo-ryhmään)

 

Kuva passut.txt-tiedostosta:

tunnus

Kuva passwd:stä:

tunnus2.png

Passut.txt-tiedostoa muokkasin vielä niin, että vain minulla on oikeus nähdä ja lukea sitä. Se onnistui komennolla:

sudo chmod go-rwx passut.txt (go = groups ja others, - = poistaa, rwx = read, write ja execute)

 

chmodpassut.png

Public_html-kansion luonti käyttäjille

Käyttäjät tarvitsivat public_html-kansion omaan kotihakemistoonsa, johon he voivat tallettaa tekemiään kotisivujaan. Tässä vaiheessa on hyvä kirjautua käyttäjän tunnuksilla sisään ja testata samalla salasanan toimivuus, sekä luoda kansio käyttäjänä itsenään, niin käyttöoikeusryhmätkin menevät oikein. Jos loisin kansiot roottina, niihin tulisi omistajaksi ja ryhmäksi “root”.

Esimerkki:

su jmahky (vaihdetaan tunnus pois xubuntusta)
cd (siirrytään kotihakemistoon)
pwd (varmistetaan polku)
mkdir public_html (luodaan kansio)

Sama toimenpide toistetaan muillekin tunnuksille.

Userdir ja PHP:n enablointi

Ennen kuin käyttäjät pääsevät säheltämään html:n ja php:n kanssa tulee vielä Apachen asetuksista sallia käyttäjähakemistot, sekä enabloida PHP:n suorittaminen käyttäjähakemistoissa.

Nämä saavutetaan vastaavasti:

sudo a2enmod userdir (käyttäjähakemistot sallitaan)
cd /etc/apache2 (mennään Apachen asetuksia koskevaan kansioon)
grep -ri php (etsitään hakusanalla PHP, -r = rekursiivisesti, -i = ei väliä onko iso vai pieni kirjain)
sudo nano mods-available/php7.0.conf (haku vahvasti viittasi, että täältä löytyy haluamani asetus)
kommentoidaan rivit ohjeiden mukaisesti, ctrl + x + y tallennus
sudo systemctl restart apache2.service (Apachen restarttaus)

Esimerkkisivut käyttäjille (ja php:n testaus)

Kun jokaisella käyttäjällä on public_html-kansio, niin sinne voidaan myös luoda index.php-tiedosto. Tein itse kuvan mukaisia tiedostoja, joihin vaihdoin <title> </title> -tagien sisään aina käyttäjän käyttäjätunnuksen.

jmahkyphp.png

Tiedoston sisältö ja testaus, kaikki näyttäisivät olevan ok!

Pekka Hurmeelle oma tietokanta

EDIT: Tein vahingossa kaiken Jorman tunnuksilla, mutta samat komennot pätisivät myös Pekan kohdalla (nimiä olisi varmasti hyvä vähän vaihtaa).

Jotta Pekka pääsisi sörkkimään tietokantoja, tulee minun asentaa ja conffata MySQL. Sitä lähdin suorittamaan näin:

Asennetaan MySQL ja php-lisäkilke.

sudo apt-get -y install mysql-client mysql-server php-mysql
sudo systemctl restart apache2.service (hyvä resetoida apache2 tässä välissä)

Jossain vaiheessa asennusta MySQL kysyy salasanaa rootille. Syötin tähän vahvan salasanan.

Kun asennus oli valmis kirjauduin sisään MySQL:ään roottina:

mysql --user=root --password
syötin asennusvaiheessa antamani salasanan -> sisällä ollaan

Luon databasen:

mysql > CREATE DATABASE jmahky CHARACTER SET utf8;

Annan jmahky-tunnukselle oikeudet ja salasanan:

mysql > GRANT ALL ON jmahky.* TO jmahky@localhost IDENTIFIED BY '887bRu3eSjkY';
exit

Nyt voin kirjautua MySQL:ään jmahkyn oikeuksin ja lisätä asioita tietokantaan:

mysql --user=jmahky --password (-> passun syöttö)
mysql> USE jmahky; (valitaan jmahky database)
mysql> CREATE TABLE makkarat(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(1024)); (luodaan taulukko 'makkarat')
mysql> INSERT INTO makkarat(nimi) VALUES('juustomakkara'); (lisätään sinne asioita)
mysql> SELECT * from makkarat;

makkarat.png

Testausta varten minun tulee luoda .php-tiedosto, joka kutsuu tietueita. Omat php-taitoni ovat aika olemattomat, mutta onneksi Tero Karvisen sivuilta löytyy mainio pätkä, jota vähän muokkaamalla saadaan toimimaan tässä harjoituksessa:

makkarat2.png

Ok!

Jorman kotisivu osoitteeseen http://sleep.example.com

Koska aiemmassa kohdassa tein kaiken vahingossa Jorman tunnuksilla, niin teen tällä kertaa kaiken Pekan tunnuksilla.

  1. Nimipalvelun simulointi hosts-tiedostosta
sudo nano /etc/hosts/
lisätään rivi: 127.0.0.1 sleep.example.com

hosts.png

2. Luodaan uusi conf-tiedosto Apacheen

sudo nano /etc/apache2/sites-available/phurme.conf

3. Lisätään luotuun tiedostoon seuraavat pätkät

<VirtualHost *:80>
 DocumentRoot /home/phurme/public_html/
 ServerName sleep.example.com
 ServerAlias www.sleep.example.com

<Directory /home/phurme/public_html/>
 Require all granted
 </Directory>
</VirtualHost>

4. Otetaan uusi conf-tiedosto käyttöön ja resetoidaan apache

sudo a2ensite phurme.conf
sudo systemctl restart apache2.service

5. Testataan toimivuus

sleepexample

 

Toimii!

Koneen suojaus tulimuurilla

Avataan muutamat tärkeät portit ja laitetaan tulimuuri päälle

sudo ufw allow 22/tcp (22 = ssh)
sudo ufw allow 80/tcp (80 = http)
sudo ufw allow 443/tcp (443 = encrypted https)
sudo ufw enable

ufw

 

Uusi komento “wowstats” – komento näyttää tietoja koneen tilasta

Päätin asentaa tietokoneelle sysstat-ohjelman.

sudo apt-get install -y sysstat

Sar-komentoa varten minun piti muokata sysstatin asetustiedostoa.

sudo nano /etc/default/sysstat
muokataan false -> true -> tallennus
sudo systemctl restart sysstat.service

Nyt voin luoda komennon wowstats:

nano wowstats

Lisäsin seuraavat rivit tiedostoon:

#!/bin/bash
whoami
pwd
sar

Annetaan kaikille oikeus suorittaa komento:

sudo chmod a+x wowstats

Kopioidaan wowstats /usr/local/bin-polkuun niin kaikki käyttäjät voivat käyttää sitä:

sudo cp wowstats /usr/local/bin

Varmistetaan toimivuus toisella käyttäjällä:

wowstats.png

Komento pelittää juuri niin kuin pitääkin!

 

b) (Vapaaehtoinen) Käytä Linuxia kurssin ulkopuolella

Tämä kohta täyttyikin hieman ennen kurssin alkua. Olin nimittäin asentanut Linux Mintin omalle läppärilleni juurikin siitä syystä, että halusin oppia käyttämään Linuxia paremmin. Aivan ongelmitta ei ole elämä linux-läppärin kanssa mennyt, mitä nyt wifi-verkkojen ja akkukulutuksen kanssa on muun muassa joutunut paljon Googlea käyttämään, mutta tämmöisetkin tilanteet miellän vain oppimistilanteina.

Kurssin aikana hommattu virtuaalipalvelin pääsi minulla heti “oikeaan” käyttöön. Asensin siihen aika nopeasti irssin, jota olen sittemmin aktiivisesti käyttänyt. Kaverin koulutehtävää varten tuli myös asennettua MTA-ohjelma ja sen jopa jollain ihmeellä sain toimimaan. (Google tosin antoi bannivasaraa kun kaikki sata testiviestiäni lähtivät samaan aikaan liikkeelle.)

On myös hyvin mahdollista,  että annan tulevaisuudessa kavereilleni tunnuksia palvelimelleni. Ennen sitä täytyy tosin selvittää mm. miten rajoitetaan käyttäjien kotihakemiston kokoa / tallennuskapasiteettia.

Lähteet:

Tero Karvinen – Install Apache Web Server on Ubuntu. URL: http://terokarvinen.com/2008/install-apache-web-server-on-ubuntu-4

Tero Karvinen – Read MySQL Database with PHP. URL: http://terokarvinen.com/2016/read-mysql-database-with-php-php-pdo

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

Tero Karvinen – Instant Firewall. URL: http://terokarvinen.com/2016/instant-firewall-sudo-ufw-enable

Tero Karvinen – Shell Scripting. URL: http://terokarvinen.com/2007/shell-scripting-4

Digital Ocean – How to set up Apache Virtual Hosts on Ubuntu. URL: https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-14-04-lts

Crybit – Simple steps to install and configure sar (sysstat) on Ubuntu/Debian servers. URL: https://www.crybit.com/sysstat-sar-on-ubuntu-debian/

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s