a) Captain obvious. Linuxissa on paketinhallinta, joten ohjelmien asentaminen on yksinkertaista. Tee tila, joka asentaa 10 suosikkiohjelmaasi paketinhallinnasta. Tässä a-kohdassa voit jättää ohjelmat oletusasetuksille.
Päätin käyttää jo olemassa olevaa installs-tilaa ja muokata sen asentamaan useamman paketin kerralla. Tein tämän koska halusin pitää saltin mahdollisimman siistinä. Linux-aloittelijalle vaikeinta oli keksiä ohjelmia, joita asentaa.
Ennen:
vim:
pkg.installed
libreoffice:
pkg.installed
Jälkeen:
installs:
pkg.installed:
- pkgs:
- vim
- libreoffice
- curl
- httpie
- atool
- net-tools
- util-linux
Ajoin tilan paikallisesti debug-modissa, koska halusin testata tilaa ja seurata mitä tapahtuu.
$ sudo salt-call --local -l debug state.apply installs

Tämä onnistui hyvin, joten sen jälkeem ajoin tilan molemmille minioneille.
Mikä ei taas onnistunut yhtä hyvin.

Näyttää siltä, että minion2:lla on verkkoyhteysongelmaa, joten testaan sillä, että kaikki kunnossa. Ajan minion2:lla updaten ja testaan yhteyden.

Kaikki kunnossa, joten ajan installs-tilan uudelleen, ja tällä kertaa onnistuneesti. Ilmeisesti tilapäinen verkkohikka.

Tarkistan vielä minion2:lla, että ohjelmat ovat asennettu.

b) Sammakko ja skorppioni. Lisää Microsoftin pakettivarasto ja asenna Visual Studio Code.
En millään löytänyt asennusohjeet, joita käytimme tunnilla tätä varten, joten tyydyin googlettamaan. Löysin sivulla https://linuxize.com/post/how-to-install-visual-studio-code-on-ubuntu-18-04/ seuraavat asennusvaiheet, jotka vaikuttivat tutulta.
Vaihe 1.
$ sudo apt update
$ sudo apt install software-properties-common apt-transport-https wget
Vaihe 2.
$ wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
Vaihe 3.
$ sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
Vaihe 4.
$ sudo apt install code
Jokaisen vaiheen välissä tarkistan viimeisimmät muuttuneet tiedostot ($ sudo find -printf ‘%T+ %p\n’|sort|tail’).
Vaihe 1. asennettu riippuvuudet

Vaihe 2. lisätty avain

Vaihe 3. haettu varasto

Vaihe 4. asennettu Visual Studio Code

Tämän jälkeen tutkin muutetut tiedostot tarkemmin.
Selkeyden ja harjoituksen vuoksi siirsin VSC:n varaston tiedostosta /etc/apt/sources.list omaan tiedostoon /etc/apt/sources.list.d/microsoft.list.


Tämän jälkeen luon salt-tilan, jonka avulla voin asentaa VSC minioneille. Tila asentaa Visual Studio Code ja ajaa updaten sekä käyttää saltissa määriteltyjä tiedostoja.
/srv/salt/vscode/init.sls
/etc/apt/trusted.gpg.d/microsoft.gpg:
file.managed:
- source: salt://vscode/microsoft.gpg
/etc/apt/sources.list.d/microsoft.list:
file.managed:
- source: salt://vscode/microsoft.list
code:
pkg.installed:
- refresh: True
Ja kopion ajankohtaiset tiedostot tilaan.

Kun tila on valmis, poistan Visual Studio Coden ja tiedostot.
$ sudo apt purge code
$ sudo rm /etc/apt/trusted.gpg.d/microsoft.gpg
$ sudo rm /etc/apt/sources.list.d/microsoft.list

Asennan VSC minioneille salt-tilan avulla.
Onnistunut asennus molemmille.

Lopuksi testaan minion2:lla, että SVC avautuu onnistuneesti.

c) CSI Pasila. Tiedostoista saa aikajanan ‘cd /etc/; sudo find -printf ‘%T+ %p\n’|sort|tail’.
- Anna esimerkki aikajanasta

Edellisessä tehtävässä juuri asennettu Visual Studio Code, eli viimeisimmät tiedostot koskevat sitä.
- Selitä jokainen kohta komennosta, jolla aikajana tehdään. Vinkki: ‘%T+’ löytyy ‘man find’ kohdasta printf.
find = etsitään tietoa
printf = find-komennon parametri, print format, eli tulostaa tulokset määrätyn muodon mukaisesti
%T = tiedoston viimeisin käyttöaika
%p = tiedoston nimi
\n = lisää rivinvaihtoja (helpottaa lukemista)
sort = järjestää tulokset aikajärjestyksessä
tail = näyttää viimeiset 10 riviä, eli uusimmat tulokset
- Aja jokin komento, joka muuttaa järjestelmän yhteisiä asetustiedostoja
$ sudo apt update
$ sudo apt upgrade
- Ota uusi aikajana ja etsi muutos sieltä

- Onko samalla hetkellä muutettu yhtä vai useampaa tiedostoa?
Päivitettävää oli aika paljon, joten paljon tiedostoja myös muutettiin.
c) Tiedän mitä teit viime kesän^H^H^H komennolla. Säädä jotain ohjelmaa ja etsi sen muuttamat tiedostot aikajanasta. Tee sitten tästä oma Saltin tila.
Tässä tehtävässä asennan vsftpd – very secure ftp daemon. Asennan sen ensin käsin, ja sen jälkeen luon salt tilan kun olen selvittänyt mitä asennuksessa tapahtuu.
Käytän apuna asennuksessa ohjeet sivuilla https://phoenixnap.com/kb/install-ftp-server-on-ubuntu-vsftpd ja https://www.digitalocean.com/community/tutorials/how-to-set-up-vsftpd-for-a-user-s-directory-on-ubuntu-18-04
Aluksi asennan päivitykset ja vsftpd-daemonin. Lisäksi teen konfiguraatiotiedostosta varmuuskopion.
Vaihe 1. Asennus
$ sudo apt update
$ sudo apt install vsftpd
$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf_default
Tutkittu mitkä tiedostot muuttuivat.

Avattu palomuuri FTP:lle (portit 20 ja 21) ja TLS:lle (portti 990).
Vaihe 2. Palomuuri
$ sudo ufw allow 20/tcp
$ sudo ufw allow 21/tcp
$ sudo ufw allow 990/tcp

Luon testikäyttäjän.
Vaihe 3. Käyttäjä
$ sudo adduser testuser
$ sudo mkdir /home/testuser/ftp
Set ownership:
$ sudo chown nobody:nogroup /home/testuser/ftp
Remove write permission:
$ sudo chmod -R a-w /home/testuser/ftp
Verify permissions:
$ sudo ls -la /home/testuser/ftp
Directory for file uploads:
$ sudo mkdir /home/testuser/ftp/files
$ sudo chown testuser:testuser /home/testuser/ftp/files
Add test file:
$ echo "vsftpd test file" | sudo tee /home/testuser/ftp/test.txt

Vaihe 4. Yhdistä FTP palvelimeen
$ sudo ftp ubuntu-ftp
Vaihe 4. Konfiguraatiotiedoston muokkaus
$ sudo nano /etc/vsftpd.conf
write_enable=NO => YES
# käyttäjä voi tehdä muutoksia kotihakemistossa
chroot_local_user=YES
# poista kommentti, rajaa käyttäjän kotihakemistoon
$ sudo systemctl restart vsftpd.service
Tämän jälkeen testaan, että FTP yhteys toimii. Testaamisessa esiintyi aika paljon ongelmia hakemistojen ja tiedostojen oikeuksissa, joten niitten kanssa joutui hieman jumppaillemaan, mutta lopulta onnistui.

Lopuksi kävin vielä läpi asennus- ja konfiguraatiovaiheet. Poistin turhat vaiheet (esim. testitiedosto ja tls) ja selkeytin osan (chroot_local_user kommentoitu pois).
Vaihe 1. Asennus
$ sudo apt update
$ sudo apt install vsftpd
Vaihe 2. Palomuuri
$ sudo ufw allow 20/tcp
$ sudo ufw allow 21/tcp
Vaihe 3. Käyttäjä
$ sudo adduser testuser
$ sudo mkdir /home/testuser/ftp
Set ownership:
$ sudo chown nobody:nogroup /home/testuser/ftp
Remove write permission:
$ sudo chmod a-w /home/testuser/ftp
Directory for file uploads:
$ sudo mkdir /home/testuser/ftp
$ sudo chown testuser:testuser /home/testuser/ftp
Vaihe 4. Konfiguraatiotiedoston muokkaus
$ sudo nano /etc/vsftpd.conf
write_enable=NO => YES
# käyttäjä voi tehdä muutoksia kotihakemistossa
$ sudo systemctl restart vsftpd.service
Nyt kun käsin asennettu daemoni on todistettu toimivaksi ja muutetut tiedostot kaivettu esiin, rakennan Saltille tilan. Lisäksi kopioin tarvittavat tiedostot uuteen vsftpd-tilan hakemistoon. Tein ensin tilan, jossa oli sekä vsftpd että ufw, mutta päätin sittenkin tehdä palomuurille oma tila.
/srv/salt/vsftpd/init.sls
install and configure vsftpd:
pkg.installed:
- name: vsftpd
file.managed:
- name: /etc/vsftpd.conf:
- source: salt://vsftpd/vsftpd.conf
service.restart:
- name: vsftpd
- watch:
- file: /etc/vsftpd.conf
/srv/salt/ufw/init.sls
install and run:
pkg.installed:
- name: ufw
service.running:
- name: ufw.service
/etc/ufw/user.rules:
file.managed:
- source: salt://ufw/user.rules
/etc/ufw/user6.rules:
file.managed:
- source: salt://ufw/user6.rules
Palomuurisäännöille kuvittelisin, että on joku helpompi tapa millä saa säännöt määriteltyä saltilla. Käyttämäni ratkaisu ei ole kovin hyvä, sillä se määrittää palomuurisäännöt master-palvelimen mukaan eikä ota huomioon muita ohjelmia, eli luo ongelmia. Googlettamalla löytyikin jotain ratkaisuja, joissa on hyödynnetty pillaria. Pillar on kuitenkin vielä hieman epäselvä käsite, joten pysyttelen tässä tuttuun file.managed moduuliin. Useamman konfiguraatiotiedoston muokkaaminen on myös kysymysmerkki. En löytänyt tähän mitään selkeätä ohjetta, joten tässäkin pysyn tutussa ja turvallisessa tavassa. Se on kuitenkin asia, jonka kanssa voisi joskus jumppailla.
Tarkistan vielä, että kaikki tiedostot ovat lopulta oikeissa hakemistoissa.

Lisäksi luon erillisen tilan testikäyttäjälle, eri tila koska käyttäjä ei vaikuta itse daemonin toimintaan, vaan on vain työkalu testaamiselle.
/srv/salt/testuser/init.sls
testuser:
user.present:
- fullname: testuser
- home: /home/testuser
- shell: /bin/bash
- password: *****
ftp_directory:
file.directory:
- name: /home/testuser/ftp
- user: nobody
- group: nobody
- mode: 555
testfile:
file.managed:
- name: /home/testuser/testing.txt
- user: testuser
- group: testuser
- mode: 755
- create: True
Kun tilat ovat valmiit, poistan käsin asennetun vsftpd:n ja testaan tilat.
Aloitan testin testuser-tilasta, sillä arvelen, että siinä saattaa olla ongelmia. Ja olin oikeassa.

Onneksi kyseessä oli vain pieni typo, eli group piti olla nogroup eikä nobody. Korjauksen jälkeen tilan ajaminen onnistui.

Seuraavaksi ajan ufw-tilan, jossa myös löytyi typo.



Muutan oikeudet readiksi kaikille ja ajan tilan uudestaan. Tällä kertaa onnistuneesti.


Seuraavaksi ajan viimeisen tilan, eli vsftpd.



Nähtävästi ongelma on kuitenkin service.restart, jonka muutan service.runningiksi. Tällä muutoksella tilan ajaminen onnistui.

Joten lopuksi vielä testaan vsftpd-yhteyden minion2:lla, eli eri kone kuin master.

Ongelmia esiintyy heti alkuun, eli ilmeisesti selkokielinen salasanani ei toimi…En oikein keksi man-sivuista tai saltstack dokumentaatiosta mitään apuja, joten päätän kokeilla luoda käyttäjä ilman salasanaa empty_password parametrilla.

Sekään ei kuitenkaan auttanut, ja kun en löytänyt tähän mitää muuta tapaa, päätin käsin muuttaa testuserin salasanaa, jotta pääsen testailemaan vsftpd:tä. Ja se toimii!!

Viimeiseksi täällä vielä muokatut ja testatut tilat:
/srv/salt/vsftpd/init.sls
install and configure vsftpd:
pkg.installed:
- name: vsftpd
file.managed:
- name: /etc/vsftpd.conf
- source: salt://vsftpd/vsftpd.conf
service.running:
- name: vsftpd
- enable: True
- reload: True
- watch:
- file: /etc/vsftpd.conf
/srv/salt/ufw/init.sls
install and run:
pkg.installed:
- name: ufw
service.running:
- name: ufw.service
/etc/ufw/user.rules:
file.managed:
- source: salt://ufw/user.rules
/etc/ufw/user6.rules:
file.managed:
- source: salt://ufw/user6.rules
/srv/salt/testuser/init.sls
testuser:
user.present:
- fullname: testuser
- home: /home/testuser
- shell: /bin/bash
ftp_directory:
file.directory:
- name: /home/testuser/ftp
- user: nobody
- group: nogroup
- mode: 555
testfile:
file.managed:
- name: /home/testuser/testing.txt
- user: testuser
- group: testuser
- mode: 755
- create: True
Uuden käyttäjän salasanan määrittäminen jää vielä mysteriiksi. Lisäksi palomuurisäännöille olisi kiva löytyy joku järkevämpi ratkaisu, ettei tarvitse mennä muokkaamaan sääntötiedostoa.
d) Asenna jokin toinen ohjelma asetuksineen.
Päätin tehtävässä olevan ehdotuksen mukaisesti asentaa jokin GUI. Gnome3 vaikuttaa kivalta ja ainakin osittain tutulta, joten kokeilen sitä.
Asennan sen ensin käsin, ja sen jälkeen salt-tilan avulla.
Ohjeena käsin asentamiselle käytän https://linuxconfig.org/how-to-install-gnome-on-ubuntu-18-04-bionic-beaver-linux
Asennus:
$ sudo apt install gnome-session gdm3
Asennuksen aikana saan kyselyn default-guista.

Lisäksi pitää kirjautua ulos, ja sisäänkirjautumisen yhteydessä valita sign in with GNOME on Xorg
Muutettuja tiedostoja on valtava määrä.

Tuon asennuksen aikana tulleen kyselyn perusteella, tämä vaikuttaa lupaavalta:

Kun olen todennut, että Gnome3 on onnistuneesti käynnissä, luon salt tilan.
/srv/salt/gnome3/init.sls
install gnome3:
pkg.installed:
- pkgs:
- gnome-session
- gdm3
/etc/X11/default-display-manager:
file.managed:
- source: salt://gnome3/default-display-manager
Tämän jälkeen poistan gnomen ($ sudo apt purge gnome-session gdm3), käynnistän koneen uudeellen ja ajan salt-tilani ensin minion1:llä.

Rebootin jälkeen ei kuitenkaan näytä hyvältä, vaan se jää vaan rullaamaan.

Sain tähän hätään apua, ja sain koneen bootattua recoveryn kautta. Samalla poistettiin gnome. Mutta en kyllä millään keksi mitä voisin tehdä toisin, jotta gnomen saisi asennettua saltilla. Todennäköisesti pitää tehdä paljon muutakin konfiguraatiota kuin tuo yksi tiedosto.
Lähteet:
Ohjeet:
Visual Studio Code asennus: https://linuxize.com/post/how-to-install-visual-studio-code-on-ubuntu-18-04/
Vsftpd: https://phoenixnap.com/kb/install-ftp-server-on-ubuntu-vsftpd
Gnome 3: https://linuxconfig.org/how-to-install-gnome-on-ubuntu-18-04-bionic-beaver-linux
Unix permissions calculator: http://permissions-calculator.org/