Edelliseen tehtävään Etusivulle Seuraavaan tehtävään

Anna Kröger 2020-03-17

Vanha arvioitava labraharjoitus

Tämä on Tero Karvisen Linux palvelimet -kurssin seitsemännen kotitehtävän raportti. Tässä linkki kurssisivulle.

Tehtävänanto (h7):

Varsinaisen tehtävänantona oli: Ratkaise valitsemasi vanha arvioitava laboratorioharjoitus tältä kurssilta.

Valitsin tämän:
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”. Jorma aikoo kehittää uuden sivun sleep.example.com. Laita Jorman kotisvu näkymään myös tästä osoitteesta. Voit simuloida nimipalvelun toimintaa hosts-tiedoston avulla. Suojaa kone tulimuurilla. Tee Pythonilla uusi komento ‘wowstats’, joka tulostaa käyttäjälle tervehdyksen. Sen tulee toimia jokaisella käyttäjällä työhakemistosta riippumatta. Linuxilla voi kuulemma tehdä metapaketteja, eli paketteja, jotka asentavat toisia ohjelmia – vieläpä uusimpina versioina ja kaikkine päivityksineen. Haluamme itsellemme metapaketin nimeltä kurssikuru-coding, joka asentaa suosikkityökalumme git, ipython3, meld, gedit. Tee tällainen metapaketti ja asenna se. Katso vinkkejä Googlesta “karvinen equivs”. Liitä metapaketin lähdekoodi (ilman kommenttirivejä) lab.txt:n perään. Paketin nimen pitää olla “kurssikuru-coding”. Tee kaikki niin realistisesti, kuin se labrassa on mahdollista: käytä järkeviä käyttäjätunnuksia ja salasanoja. Testaa kaikki palvelut niin julkisilla nimillä tai IP-osoitteilla, kuin labrassa on mahdollista.


PHP ja Apache toimimaan

Aloitin asentamalla Apachen, laittamalla palomuurin päälle ja vaihtamalla apachen oletus-etusivun. Tarkistin selaimessa localhostin tilanteen ensin ennen apachen asennusta, sen jälkeen ja muutettuani etusivua.

$ sudo apt-get -y install apache2

$ sudo ufw enable

$ sudo ufw allow 80/tcp

$ echo "Apachen uusi etusivu" | sudo tee /var/www/html/index.html

Koska "Haluamme tehdä PHP-kotisivuja", asensin siis myös PHP:n.

$ sudo apt-get -y install libapache2-mod-php

Tämän jälkeen, jotta kaikilla tulevilla käyttäjillä voisi olla omat etusivunsa:

$ sudo a2enmod userdir

$ sudo systemctl restart apache2

Testasin tätä luomalla omalle xubunut käyttäjälleni etusivut

$ cd

$ mkdir public_html

$ cd public_html

$ nano index.html #(-> "Xubuntun etusivu")

Tarkastin localhosti/~xubuntu selaimessa, ja siellähän käyttäjäni etusivu näkyi. Seuraavaksi halusin saada sen toimimaan PHP:llä. Koskin muistin tunnilta, että PHP ei automaattisesti toimi käyttäjillä, käytin näitä ohjeita ottaakseni PHP:n käyttöön.

$ sudoedit /etc/apache2/mods-available/php7.2.conf

Sieltä laitoin alla olevan osion kommentteihin

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

Seuraavaksi kokeilin toimiko juuri tekemäni muutos, muokkaamalla index.html sivua ja vaihtamalla sen nimeä.

$ mv index.html index.php

$ nano index.php xubuntu index php

Käyttäjät ja heidän etusivut

Tämän jälkeen ryhdyin luomaan tehtävässä haluttuja uusia käyttäjiä. Sekä käyttäjätunnuksien että käyttäjien koko nimien oli oltava ilman ääkkösiä. Loin myös kaikille hyvät salasanat.

Käyttäjätunnus Koko nimi
jormamahkyla Jorma Mähkylä
pekkahurme Pekka Hurme
ronaldosmith Ronaldo Smith
hakanpetersson Håkan Petersson
einarimikkonen Einari Mikkonen
einarivahakaahka Einari Vähäkäähkä
eijavahakaahka Eija Vähäkäähkä
maija Maija Virtanen (sudokäyttäjä)

Loin siis käyttäjät kaikille yksitellen komennolla

$ sudo adduser *käyttäjätunnus*

Käyttäjän maija lisäsin lopuksi vielä sudo-ryhmään.

$ sudo adduser maija sudo

Seuraavaksi aloitin luomaan kaikkien kotihakemistoihin heille esimerkkikotisivuja, joissa otsikko lukee omistajan käyttäjätunnus. Koska en osannut tehdä sitä mitenkään järkevämmin, niin loin ne kaikille yksitellen.

$ cd /home/*käyttäjätunnus*

$ sudo mkdir public_html

$ sudoedit public_html/index.php

Loin kaikille samanlaisen etusivun, joista muokkasin lähinnä otsikkoon jokaisen käyttäjätunnuksen. Aina lopuksi, kun olin luonut käyttäjälle kaikki yllämainitut, piti vielä muuttaa kansion ja tiedoston omistajaa, jotta käyttäjällä myös olisi oikeus sitä muokata. (Tarkastin oikeudet aina komennolla ls -l)

$ sudo chown käyttäjätunnus:käyttäjätunnus /home/käyttäjätunnus/public_html/

$ sudo chown käyttäjätunnus:käyttäjätunnus /home/käyttäjätunnus/public_html/* Käyttäjien sivut

Seuraavaksi laitoin Jorma Mähkylän sivun näkymään sleep.example.com sivulta, muokaten hosts-tiedostoa. Aloitin siitä, että lisäsin sleep.example.com hosts-tiedostoon.

$ sudoedit /etc/hosts
Sudoedit hosts

Tässä vaiheessa osoitteessa näkyy sama, kun mitä localhostissa näkyy. Seuraavaksi loin apachelle uuden .conf tiedoston sites-available -kansioon.

$ sudoedit /etc/apche2/sites-available/sleep.example.com.conf
sleep.com.conf
$ sudo a2ensite sleep.example.com.conf

$ sudo systemctl restart apache2
sleep.com.conf toimii

Komento Pythonilla

Kaikki loput osat harjoituksesta, olivatkin sitten sellaisia, joita en ollut ikinä ennen tehnyt. Seuraava osuus oli "Tee Pythonilla uusi komento ‘wowstats’, joka tulostaa käyttäjälle tervehdyksen. Sen tulee toimia jokaisella käyttäjällä työhakemistosta riippumatta." Tehtävä kuulosti siltä, että tarkoitus oli tehdä shell-komento pythonilla, mutta niin en osaa tehdä, joten lähdin vain yksikertaisemmin tekemmään python-ohjelmaa, jota kaikilla käyttäjillä oli oikeudet käyttää.

Aloitin luomalla tiedoston. Se ei ollut itsessään mikään ongelma, mutta sen sijainti oli hankala. Aloitin kuitenkin siitä, että loin sen omaa kotihakemistooni.

$ nano heips.py #print("Heipsunhei")

Seuraavaksi lähdin etsimään Googlesta apua. Löysin monelta keskustelufoorumilta erilaisia keskuteluja aiheesta.
(Tässä pari linkkiä "Make python file accessible from anywhere by all users",
"How do I install a script to run anywhere from the command line?")

Tein tätä osuutta tehdessäni virheen. En testaillut toimivuutta eri vaiheissa. Se tarkoittaa sitä, että sain sen nyt kyllä toimimaan, mutta en rehellisesti ole ihan varma miten ja missä vaiheessa.

Aloitin sillä, että lisäsin heips.py tiedostoni alkuun #!/usr/bin/python. Sen jälkeen muutin sen ajo-oikeuksia

$ chmod +x heips.py

Sen jälkeen tein aika monta asiaa, joiden järjestyksestä en nyt ole ihan 100 % varma. Kopion tiedoston /bin -hakemistoon ja nimesin sen siellä uudestaan heips -nimiseksi (poistin .py osuuden). Erilaisia foorumeilla ehdotettuja ratkaisuja kokeillen kokeilin mm. näitä seuraavia komentoja, vaikka en oikein tiedäkään mitä ne tekevät. (Toisesta tuli jotain erroria siitä, ettei jotakin hakemistoa löydy).

$ export PATH="$PATH:$HOME/bin"

$ ln -s $HOME/myscript.py $HOME/bin/hello

Tämän jälkeen luulin olevani jumissa (vaikka en siis ollutkaan testannut mitään). Kaikkia mahdollisia ohjeita katsoa, olin nyt tehnyt suurimman osan kaikista mahdollisista asioista, joita olin löytänyt. Jostain syystä päätin tässä vaiheessa vasta kokeilla, että toimisiko se. Ja sehän toimi. Kokeilin eri hakemistoissa ja eri käyttäjillä joilla oli eri oikeuksia.

Komenti heips

Metapaketti

Harjoituksen viimeinen osuus oli tehdä metapaketti (nimeltä kurssikuru-coding), joka asentaa työkalut: git, ipython3, meld ja gedit. Tämäkin oli asia, jota en ollut ikinä aikaisemmin tehnyt. Aloitin siis osion noudattamalla Tero Karvisen ohjeita "Create deb metapackage in 5 minutes".

$ sudo apt-get -y install equivs

$ equivs-control anna-ipknow.cfg

$ nano annan-ipknow.cfg equivPackage
$ equivs-build annan-ipknow.cfg

Tässä vaiheessa kaikki on tietääkseni valmista. Ajoin vielä Teron ohjeiden viimeisen komennon

$ sudo gdebi -n annan-ipknow_0.1_all.deb

Mitään varsinaisia virheitä siitä ei tullut. "Need to be root to install packages". Tulkitsin tämän niin, että homma toimi oikein. Tässä vaiheessa huomasin/muistin, että metapaketin nimi piti olla kurssikuru-coding. Tein kaikki hommat siis uudelleen.

$ equivs-control kurssikuru-coding.cfg

$ cp annan-ipknow.cfg kurssikuru-coding.cfg

$ nano kurssikuru-coding.cfg #muokkasin paketin nimen

$ equivs-build kurssikuru-coding.cfg

$ sudo gdebi kurssikuru-coding_0.1_all.deb

Ja niin näyttikin kaikki toimivan oikein!

Ohjelmat asennettu

Käyttämäni lähteet

Karvinen, Tero: Oppitunnit 2020-03-12, Linux palvelimet -kurssi
http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/

Karvinen, Tero: 2017-03-15, Arvioitava laboratorioharjoitus – Linux palvelimet ict4tn021-3 (uusi OPS) alkukeväällä 2017 p1
http://terokarvinen.com/2017/arvioitava-laboratorioharjoitus-linux-palvelimet-ict4tn021-3-uusi-ops-alkukevaalla-2017-p1

Karvinen, Tero: 2011-02-15, Create deb metapackage in 5 minutes
http://terokarvinen.com/2011/create-deb-metapackage-in-5-minutes