Epäviralliset pakettivarastot

Kohteesta Linux.fi
Loikkaa: valikkoon, hakuun

Jakelupaketin omista pakettivarastoista ei aina löydy kaikkia tarvittavia ohjelmia, jolloin ratkaisuksi tarjotaan usein epävirallisen pakettivaraston käyttämistä. Vieraiden pakettien asentaminen saattaa kuitenkin vaarantaa tietoturvaa tai järjestelmän toimintaa.

Edut[muokkaa]

Koska pakettivaraston paketit ovat paketinhallinnan haluamassa muodossa, mahdollisesti suoraan käytettävänä pakettiarkistona, niiden käyttäminen on helppoa suoraan normaalista paketinhallinnasta. Riippuvuuksista ja päivityksistä pidetään mahdollisesti huolta kuten jakelun omienkin pakettien kohdalla.

Jos pakettivaraston ylläpitäjät huolehtivat tietoturvasta, varasto on sopivassa muodossa ja se on lisättynä varastolistaan, tietoturvapäivitykset asentuvat puoliautomaattisesti.

Näillä perusteilla epävirallisen pakettivaraston käyttäminen on käytännöllisempää ja turvallisempaa kuin vastaavan paketin asentaminen lähdekoodista tai muuten paketinhallinnan ohi – kunhan pakettivaraston ylläpitäjät huolehtivat tietoturvasta ja tekevät paketin jakelun käytäntöjen mukaan.

Vaarat[muokkaa]

Epäyhteensopivuus[muokkaa]

Jos pakettivaraston ylläpitäjä tekee paketteja useammalle jakelulle, kaikkien tuettujen jakeluiden tuntemus ei välttämättä ole riittävän hyvä eikä aika välttämättä riitä pakettien räätälöintiin. Tällöin kiusaus on suuri olettaa jakeluiden käyttäytyvän oman jakelun lailla ja pienet eroavaisuudet voivatkin rikkoa paketin toiminnan.

Tavallisimmat epäyhteensopivuusongelmat ovat eri ohjelmakirjastojen, niiden eri versioiden tai versioiden erilaisen numeroinnin käyttö. Tämä saattaa aiheuttaa riippuvuusongelmia (vrt DLL hell). Pahimmassa tapauksessa jakelun oma ohjelmakirjasto korvaantuu epävirallisen pakettivaraston epäyhteensopivalla versiolla.

Väärillä oletuksilla tehty paketti saattaa rikkoa tiedostoja, joita asennusskriptit yrittävät muokata, tai kokonaan korvata tiedostoja omilla versioilla. Tähän on jakeluilla tarkkaan mietityt käytännöt, joista ulkopuolinen paketoija ei välttämättä ole riittävästi tietoinen. Paketoija ei myöskään tiedä mahdollisista uusista erikoisjärjestelyistä.

Epäviralliset pakettivarastot saattavat myös aiheuttaa järjestelmän päivityksen epäonnistumisen, mikäli epäviralliset paketit tai näiden riippuvuudet ovat ristiriidassa järjestelmän virallisten tai toisten epävirallisten pakettivarastojen pakettien kanssa. Tästä syystä onkin tärkeä varmistaa, etteivät eri epäviralliset pakettivarastot tarjoa samoja paketteja. Jos jokin paketti on asennettu yhdestä epävirallisesta varastosta ja sen riippuvuudet toisesta, on ennen pitkää hyvin todennäköistä, että päivitykset epäonnistuvat rikkinäisten riippuvuuksien vuoksi. Jos käytät yhtä (esimerkiksi epävapaita multimediapaketteja tarjoavaa) epävirallista pakettivarastoa, ei tämän lähteen tarjoamia paketteja tai niiden riippuvuuksia kannata asentaa (edes manuaalisesti) muualta kuin tästä lähteestä tai järjestelmän virallisista varastoista, mikäli haluaa päivitysten onnistuvan.

Huono ylläpito[muokkaa]

Pakettivaraston ylläpitäjät eivät välttämättä huolehdi tietoturvasta yhtä tarkkaan kuin oma jakelu. Mahdollisesti tietoturvakorjaukset tehdään uusiin versioihin, jotka eivät sovi vanhempaan jakelun versioon. Näin tietoturvakorjaukset jäävät asentamatta tai vieras paketti pakottaa päivittämään muuten hyvin toimivaa jakelua uuteen.

Pahimmassa tapauksessa itse paketti on huonosti tehty, niin että se asentuessaan rikkoo järjestelmän. Asennusskriptit voivat yleensä vapaasti muuttaa järjestelmää ja pieni kirjoitusvirhe saattaa olla kohtalokas.

Yleensä, kun pakettivarasto lisätään paketinhallintajärjestelmään, tästä varastosta saatetaan asentaa mitä tahansa paketteja, ei pelkästään sitä, jonka takia lähde lisättiin. Tämä suurentaa ongelmia entisestään, ellei muitten pakettien asentamista tästä lähteestä erikseen estetä.

Tietoturvaongelmat[muokkaa]

Sen lisäksi, että paketti sisältää ylläpitäjän (rootin) oikeuksin ajettavaa ohjelmakoodia, johon on helppo tarkoituksella upottaa haittaohjelmia, paketti voi sisältää tahattomia tietoturva-aukkoja.

Ei siis riitä, että luottaa paketoijan ja pakettivaraston ylläpitäjän hyvään tahtoon. Myös tietoturvaosaaminen ja viitseliäisyys sekä itse palvelimen tietoturvataso ovat ratkaisevia. Myös pakettien mahdollisten tietoturva-aukkojen korjaaminen ja pakettien päivittäminen pitää olla kunnossa, jottei tietoturva vaarantuisi.

Erityyppiset epäviralliset lähteet[muokkaa]

Ohjelman tekijän pakettilähteet[muokkaa]

Usein ohjelman tekijä itse paketoi ohjelmansa eri jakeluille. Tällöin huolenaiheena on lähinnä paketin yhteensopivuus: jos ohjelmaa uskaltaa käyttää, tekijään luultavasti luottaa ainakin hyvän tahdon suhteen. Tietoturvakorjaukset lähetetään ohjelman tekijälle, jotta hän voisi liittää ne tuleviin versioihin ja ovat siten luultavasti saatavissa tällaisesta lähteestä.

Yhteensopivuuden eräs osaongelma on tukeeko ohjelman tekijä myös vanhoja ohjelman versioita, vai joutuuko aina päivittämään saadakseen tietoturvakorjaukset käyttöönsä.

Joissakin tapauksissa ohjelman tekijään ei luota kuin osittain: ohjelmaa ei haluta ajaa kuin rajoitetuin oikeuksin tai muuten valvotuissa oloissa. Tällöin ohjelma kannattaa ehdottomasti asentaa lähdekoodista kääntämällä, kolmannen tahon kautta tai vähintään niin että asennuskin tehdään rajoitetulla käyttäjätunnuksella (katso alla).

Usein ajankohtainen eritystapaus on laiteajurit, lähinnä näyttökorteille ja wlan-korteille. Näille on monessa tapauksessa vain laitetekijän tekemiä suljettuja ajureita. Katso Suljettu koodi alla.

Backports[muokkaa]

Koska Debian-jakelun vakaa julkaisu usein on vanha, jotkut Debian-kehittäjät loivat epävirallisen pakettivaraston, josta tarjotaan ohjelmien uudempia versioita paketoituina tähän vanhaan jakeluun. Tällainen järjestely takaa varmemmin yhteensopivat paketit kuin ulkopuolisen tahon paketoimat uudemmat versiot. Testaus on kuitenkin vähäisempää kuin virallisten pakettien osalta ja sikäli kuin sovittaminen vanhaan jakeluun on vaikeaa, tämä voi aiheuttaa ongelmia myös itse paketeissa.

Myös Ubuntulla on backports-järjestely.

Uudemmat ohjelmaversiot saattavat sekoittaa järjestelmän päivitystä, koska ne eivät välttämättä sujuvasti korvaannu uuden julkaisun uusilla paketeilla. Epävirallinen asema saattaa myös vaikuttaa tietoturvapäivityksiin ja yleiseen pakettien laatuun.

Backports-paketteja ei yllämainittujen ongelmien takia kannata asentaa kuin niiden ohjelmien osalta, joissa tosiaan kaipaa uudempaa versiota.

"contrib", "universe", "community", "extras"[muokkaa]

Monella jakelulla on siihen kiinteästi kuuluvien pakettien lisäksi laajempi pakettivarasto, jossa on vähemmän huolellisesti testattua ohjelmistoa, jota ei muodollisesti tueta, mahdollisesti myös pakettivarasto, joihin käyttäjät voivat lisätä itse tekemiään paketteja. Tätä pakettivarastoa varastolistaan lisättäessä kannattaa selvittää sen asema ja miten pitkälle siihen kannattaa luottaa.

Debianissa contrib tarkoittaa, että paketit riippuvat ei-vapaista osista. Koska Debian on vapaa käyttöjärjestelmä, contrib-paketit eivät voi virallisesti olla sen osa, vaikka ne muuten käsitelläänkin samalla tavalla kuin virallisia paketteja. contrib-paketteja käytettäessä kannattaa pitää mielessä, että niiden asentaminen saattaa tuoda koneelle kolmannen osapuolen suljettua koodia (tämä selviää paketin riippuvuuksia ja asennusskriptejä tutkimalla, usein jo paketin kuvauksesta).

Ulkopuoliset tahot[muokkaa]

Myös kokonaan ulkopuoliset saattavat tarjota pakettivarastoja, esimerkiksi niin, että niitä on tarvittu sisäiseen käyttöön ja myöhemmin keksitty tarjota myös yleiseen jakoon. Tällaisen pakettivaraston luotettavuutta on arvioitava tapaus tapaukselta.

Joskus tällainen ulkopuolinen pakettivarasto kehittyy uudeksi, ainakin alkuvaiheessa yhteensopivaksi, itsenäiseksi jakeluksi.

Jotkut tahot tarjoavat kokoelmia tietyntyyppisistä ohjelmista, esimerkiksi CPAN perl-moduuleista ja CTAN TeX-moduuleista. Ohjelmien tarkistus saattaa, riippuen tahosta, olla hyvää tai olematonta. Jos oma asiantuntemus ei riitä tahon (tai itse ohjelmien) luotettavuuden arviointiin eikä sitä muullakaan tavalla saa varmistettua, näitä ohjelmia ei kannata käyttää missään, missä mahdollisia tietoturva-aukkoja päästään hyödyntämään. Netti on pullollaan esimerkiksi huonosti tehtyjä PHP-skriptejä.

Suljettu koodi[muokkaa]

Mikäli jonkin ohjelmapaketin lähdekoodi ei ole saatavilla, ohjelman turvallisuutta vakaus- tai tietoturvamielessä on vaikea kenenkään muun kuin tekijän arvioida (paitsi sikäli kuin huomataan puutteita). Näin suljettua koodia asennettaessa on vielä tarkemmin otettava huomiota epävirallisia paketteja koskevat riskit.

Epävapaita ohjelmia, joista osalla on suljettu lähdekoodi, on Ubuntussa osioissa restricted ja multiverse. Debianissa niitä on osiossa non-free ja myös osion contrib asennusskriptit saattavat asentaa niitä. Joissakin jakeluissa myös osa jakelun itse kehittämistä ohjelmista on epävapaata.

Tärkeä ryhmä suljetun koodin ohjelmia ovat erilaiset laiteajurit. Joillekin laitteille, varsinkin näytönohjaimille ja wlan-korteille, on vain laitevalmistajan tekemä suljettu ajuri. Koska laiteajuri on osa Linux-ydintä, sen toiminta on keskeistä koko järjestelmän toimivuudelle ja turvallisuudelle.

Suljetut laiteajurit toimitetaan useimmiten kahdessa osassa: varsinainen ajuri ja sovituskoodi ("wrapper"), jolla ajurin saa sopimaan kulloinkin käytettävään ytimeen. Näin ei tarvitse käyttää juuri samaa ytimen versiota kuin mille ajuri on käännetty. Ytimen muutokset saattavat kuitenkin rikkoa yhteensopivuuden.

Laitevalmistajan tekemä asennuspaketti on yleensä saatavissa suoraan laitevalmistajan www-sivuilta, mutta varsinkin jos käyttää jakelun paketoimaa ydintä, kannattaa ajuritkin asentaa jakelun paketista tai jakelun virallisia ohjeita noudattaen, jotta hyötyisi jakelun mahdollisesti tekemästä sovitustyöstä.

Vaihtoehdot[muokkaa]

Riippumatta siitä löytyykö allaolevista tilanteeseen sopivaa vaihtoehtoja, vieraista varastoista ei pidä asentaa mitään ylimääräistä. Jos asennettava ohjelma vaatii muita vieraita paketteja, esimerkiksi ohjelmakirjastoja, kannattaa ehdottomasti varmistaa, ettei niiden asentaminen johda kierteeseen, jossa järjestelmän vakaus ja paketinhallintajärjestelmän toimivuus vaarannu.

Oman jakelun lähdekoodista kääntäminen[muokkaa]

Jos haluttu paketti löytyy omasta jakelusta, mutta ei sen siitä versiosta, jota itse käyttää, ratkaisu voi olla kääntää paketti itse. Kääntämällä ohjelma se saadaan käyttämään niitä kirjastoversioita, joita omalla koneella on asennettuna. Näin paketin voi yleensä asentaa ilman toisen jakeluversion kirjastoja.

Monimutkaisempi paketti saattaa kääntämiseenkin vaatia tiettyjä kirjastoversioita, jolloin osaamista vaaditaan toimivan kokonaisuuden aikaansaamiseksi. Yhteensopivuusongelmia voi olla muitakin, esimerkiksi jokin käytäntö on saattanut muuttua.

Jakelun omia työkaluja kannattaa käyttää ja paketti kääntää oikeaksi paketiksi. Tämä sujuu usein hyvinkin helposti, Debianissa helpoimmassa tapauksessa (kun oikeat lähdekoodivarastot on laitettu pakettilähteisiin):

apt-get build-dep paketti
apt-get --compile source paketti
dpkg --install paketti_versio.deb

Näin paketti on paketinhallinnan piirissä. Versionumero on kuitenkin suurempi kuin stablen tietoturvapäivityksissä (jos paketti ylipäänsä löytyy sieltä), joten päivitykset on asennettava itse, korjatusta versiosta samalla tavalla kääntäen.

Vieraasta lähdekoodista kääntäminen[muokkaa]

Perinteinen tapa asentaa uusia ohjelmia Unixeihin on kääntää ne lähdekoodista. Nykyiset standardit ja työkalut helpottavat ohjelmien kirjoittamista yhteensopivasti ja GNU/Linux on varteenotettava ympäristö Unix-maailmassa. Tästä syystä ohjelmat kääntyvät ja toimivat yleensä ilman suurempia ongelmia ainakin useimmissa PC-ympäristöissä.

Hyvinkäyttäytyvä ohjelma asentuu oletuksena hakemiston /usr/local (tai mahdollisesti /opt), jossa se ei häiritse paketinhallinnan piirissä olevia ohjelmia. Ohjelmasta voi myös kohtuullisen helposti tehdä oman jakelun paketin (mahdollisesti jopa pelkällä make-käskyn valitsimella) tai sen voi asentaa CheckInstall-työkalulla tai vastaavalla, jolloin sen poistaminen myöhemmin on helppoa.

Lähdekoodista käännettäessä yhteensopivuusongelmat ovat vähäisempiä kuin valmiiksi käännettyä ohjelmaa asennettaessa, mutta niitä voi esiintyä. Samaten tietoturvaongelmat ovat yleensä pienemmät, mutta julkisestikin esillä olevaan koodiin voi piilottaa troijanhevosia ja koodi voi olla huonolaatuista. On myös huomattava, että esimerkiksi suljettuihin laiteajureihin saattaa sisältyä itse ajuri valmiiksi käännettynä suljettuna koodina (katso yllä) ja se, mitä käännetään, onkin vain sovituskoodia.

Ongelmien arviointi vaatii osaamista, mutta ainakin www-käyttöön tarkoitettuja pieniä skriptikielisiä ohjelmia tai ohjelmanpätkiä tulee varoa: niitä on helppo kirjoittaa ymmärtämättä käytettyä kieltä kovin syvällisesti ja niistä löytyy usein tietoturva-aukkoja.

Tietoturva-aukot itsekäännetyissä ohjelmissa korjataan kääntämällä ohjelma uudestaan korjatusta lähdekoodista ja asentamalla tämä uusi versio vanhan tilalle. Tietoturvapääivityksen tarve on huomattava itse seuraamalla sopivia sähköpostilistoja tms.

Vaihtoehto omasta jakelusta[muokkaa]

Jollei keksi helppoa ja turvallista tapaa asentaa jokin kaivattu paketti, kannattaa miettiä onko sen tarve todellinen; ehkä omasta jakelusta löytyisi riittävän hyvä korvike? Ehkä haluttu ohjelma löytyykin eri nimellä? Löytyykö haluttu versio lähdekoodina omalle jakelulle sovitettuna?

Jos tarve syntyy toisen epävirallisesta varastosta asennettavan paketin riippuvuuksista kannattaa miettiä erityisen vakavasti, ovatko riippuvuudet oikein määritelty. Ehkä kaivattu paketti löytyykin eri nimellä omasta jakelusta? Ehkä alkuperäisen paketin saisi asennettua helpomminkin? Pääsisikö riippuvuudesta kääntämällä jokin osa uudestaan? Vieraiden kirjastojen asentaminen oman jakelun vastaavien tilalle tai rinnalle aikaansaa helposti monimutkaisia ongelmia. Alkuperäistä ongelmaa kannattaa vielä miettiä tarkkaan.

Asentaminen eri käyttäjänä[muokkaa]

Jos välttämättä haluaa asentaa ohjelman, jonka laatuun tai tietoturvaan ei luota, sen asennusskriptejä ei kannata ajaa ylläpito-oikeuksin. Tätä tarvetta varten voi luoda eri käyttäjän ja ohjelmaa varten oman hakemiston, joka luovutetaan tämän käyttäjän omistukseen. Tyypillinen hakemisto on /opt/mikälieohjelma.

Asennusohjelma ajetaan vartavasten luodulla tunnuksella ja asennushakemistoksi määrätään tämä äsken luotu. Asennuksen jälkeen poistetaan mahdolliset suid- tai sgid-oikeudet ja hakemistorakenne kaikkinensa siirretään rootin omistukseen. Haluttaessa johonkin ohjelmahakemistoon (esimerkiksi /opt/bin) tehdään symlinkit ohjelmatiedostoon tai kirjoitetaan yksinkertainen skripti, joka käynnistää ohjelman. Varmistetaan, että ohjelmahakemisto ei löydy ainakaan rootin PATH-muuttujasta.

Joskus asennusohjelma tarkistaa joko se ajetan rootin oikeuksin eikä suostu jatkamaan tavallisena käyttäjänä, olettaen etteivät tavallisen käyttäjän oikeudet riitä ohjelman asentamiseen. Jos asennusohjelma on skripti (katso Bash-skriptaus), tämä tarkistus saattaa olla helposti löydettävissä ja poistettavissa. Muussa tapauksessa tarkistuksesta pääsee käyttämällä ohjelmaa fakeroot tai vastaavaa. Pahimmassa tapauksessa asennusohjelma on ajettava chroot-ympäristössä (jos sitä vielä haluaa ajaa).

Jos näihin erikoistoimiin ei halua ryhtyä, mutta haluaa asentaa kyseisen ohjelman, yksi tapa on ottaa täysi varmuuskopio DVD:lle kaikesta, minkä muuttamiseen asennusohjelman oikeudet tulevat riittämään. Varmistetaan, ettei koneella tehdä muuta (anacron, toiset käyttäjät tms.), asennetaan ohjelma, käynnistetään kone live-CD:ltä ja verrataan DVD:llä olevaa varmuuskopiota koneen nykytilaan.

Varoitusmerkintä[muokkaa]

Tässä wikissä epävirallisista pakettilähteistä pyritään varoittamaan tällaisella laatikolla:

Skull and crossbones.svg
Kolmannen osapuolen pakettivarastoissa on riskinsä! Asennettavat paketit ja niiden skriptit voivat tehdä järjestelmässä mitä tahansa.