Päivitys Fedora Linux 28:aan sujui melkein ongelmitta

Nyt on sunnuntai 13.05.2018 klo 01:48. Ajoin äsken sisään päivityksen Fedora Linux 28:aan. Kaikki sujui melkein ongelmitta. Ongelmia tuli yksi ennen päivitystä ja toinen vakavampi päivityksen jälkeen.

Päivitettyäni ensin Fedora Linux 27:n ihan ajantasalle, annoin komennon:

dnf system-upgrade download --releasever=28

Sen pitäisi downloadata uudet Fedora Linux 28 paketit, mutta ei asentaa niitä. Komento ei kuitenkaan mennyt läpi, vaan sain valitusta, että libnice-gstreamer vaatii libnice-kirjaston toimiakseen, mutta uudessa Fedora Linux 28:ssa sitä ei ole tarjolla. En keksinyt muuta tapaa edetä kuin poistaa paketti komentamalla:

dnf remove libnice-gstreamer

Sen jälkeen pakettien downloadaus onnistui ja kamaa imuroitui 3,6 gigatavun verran.

Sitten oli edessä päivitysprosessin aikaavievin vaihe eli uusien pakettien asentaminen. Se hoitui käskyllä:

dnf system-upgrade reboot

Kaikkineen koko päivitykseen meni aikaa ehkä kolmisen tuntia tai jotain sinne päin. En todellakaan jaksanut katsella vierestä kun läppärini hakkasi paketteja sisään, vaan istuin olohuoneen sohvalla katselemassa jääkiekkomatsia Suomi vs Kanada. Erätaukojen aikana kävin vilkaisemassa, että kaikki eteni kuten pitikin.

Lopulta päivitys oli ohi ja Fedora Linux 28 nousi ylös. Ajattelin käydä katsomassa toimisiko Nordean verkkopankki ja käynnistin Firefoxin firejail-turvaohjelman alaisuuteen komennolla:

f

Minulla on se bashin shell-aliaksena määriteltynä tiedostossa /home/kalevi/.bashrc:

alias f='firejail --private=/home/kalevi/firefox-home firefox'

Firejail on helppokäyttöinen tietoturvaohjelma, jonka avulla voi rajoittaa prosessien toimintaa. Siinä tulee mukana valmiit profiilit aika monille ohjelmille, ml. Firefox. Eli käyttäjän ei tarvitse juurikaan konfiguroida firejailia ellei itse halua tehdä custom-asetuksia. Olen tehnyt Firefoxia varten sille oman hakemiston /home/kalevi/firefox-home, jonka Firefox näkee root-hakemistona ja josta se ei pääse poistumaan ulos. Siis --private komentorivivalinta kertoo firejailille, että Firefox pitää eristää kyseiseen hakemistoon.

Ongelma oli se, että Fedora Linux 28 päivitys päivitti myös Firefoxin versiosta 59 versioon 60. Kävi ilmi, että Fedoran mukana tuleva firejail ei toimi ollenkaan Firefox 60:n kanssa! Selain kyllä käynnistyi, mutta yksikään sivusto ei auennut, vaan tuloksena oli vain tyhjä valkoinen ruutu. Kun Firefoxin sulki, firejail oksensi ruudulle muutamia virheilmoituksia, joiden perusteella arvelin, että jotain oli aika pahasti pielessä.

Projektin Github-sivulla oli jo raportoitu tästä ongelmasta ja joku oli havainnut, että poistamalla seccomp ominaisuudet seuraavasti Firefox toimi taas firejailin alaisuudessa:

alias f='firejail --ignore=seccomp --private=/home/kalevi/firefox-home firefox'

Kokeilin sitä ja totesin, että Firefox tosiaan alkoi sen jälkeen taas pelittää, mutta en ollut tyytyväinen tähän "ratkaisuun". Selvitin itselleni mikä on seccomp ja sain selville, että se on Linux kernelin tietoturvaominaisuus, jolla voidaan rajoittaa mitä systeemikutsuja prosessi saa tehdä. Prosessi siirtyy ns. Secure Computing tilaan tekemällä systeemikutsun, jolle voi moderneissa kerneleissä kertoa mitkä systeemikutsut ovat prosessille sallittuja ja mitkä eivät. Näin siis prosessi itse voi asettaa itsensä rajoitettuun karsinaan tai firejailin tapauksessa firejail rajoittaa lapsiprosessiaan, eli tässä Firefoxia.

Ei siis ole ollenkaan oikea ratkaisu kääntää seccomp-ominaisuuksia pois päältä, sillä on tärkeää ja koko homman perusideana, että firejail eristää Firefoxin mahdollisimman ahtaaseen karsinaan. Jättämällä seccomp-rajoitukset pois, Firefox on turvattomampi kuin aiemmin.

Luin Githubista firejailin kehittäjän kommentin, jossa sanottiin, että heillä on jo master-haarassaan korjaus tähän ongelmaan. Joku ehdottikin, että kehittäjien pitäisi pian tehdä uusi julkaisu, jossa korjaus on mukana. Se olisi tietysti ainoa järkevä tapa hoitaa tämä ongelma, joten minäkin kehotin heitä julkaisemaan korjatun version.

En halua itse alkaa kääntämään firejailia lähdekoodista vaikka se onkin helppoa. Kätevintä on, että Fedora Linux 28:aan luotu paketti on oletusarvoisesti toimiva ja turvallinen. Toivottavasti ne kehittäjät nyt uskovat järkipuhetta ja laittavat korjatun version mahdollisimman pian jakoon. Pelkään www-selaimia todella paljon ja ne on ehdottomasti hyvä eristää omaan karsinaansa mahdollisimman tiukasti.

Miksi siis Firefox 60 ei enää toiminut kun seccomp-ominaisuudet olivat päällä? Selitys lienee yksinkertainen. Koska seccomp rajoittaa systeemikutsujen tekemistä, niin Firefox 60 yrittää tehdä jonkun systeemikutsun, jota versio 59 ei koskaan tehnyt, ja kun se ei onnistu, selaimen toiminta estyy kokonaan. Luultavasti firejailin kehittäjien korjaus perustuu siis siihen, että Firefoxille sallitaan enemmän systeemikutsuja kuin aiemmin. En kuitenkaan nyt jaksa alkaa tutkimaan onko asia noin, mutta loogisesti ajatellen tuo lienee ainoa mahdollinen skenaario.