• [Ratkaisu] Km-moduulin kääntäminen ei onnistu

    Lähtökohta
    Näytönohjaimeni on Connect 3D:n valmistama, AGP-väylässä kiinni oleva Radeon 9600 -piirisarjalla varustettu All In Wonder. Kaappausta varten All In Wonder -näytönohjaimille on olemassa GATOS-projektin tuottama km-moduuli, jota ei ole saatavilla pakettivarastoista.
    Linux-ytimestä käytössäni on versio 2.6.22-14-generic.
    Pakettienhallinnassa linux-headers-generic ja cvs on asennettuna.
    Ongelma
    Jos lataan km:n sen www-sivuilta ja yritän kääntää lähdekoodia, kääntäminen epäonnistuu. Lisäksi lähdekoodissa ei ole Radeon 9600 -piirisarjan tunnistamiseen tarvittavia tietoja.
    Ongelman syy
    Km:n lähdekoodi on niin vanhaa ettei se ole yhteensopiva Linux-ytimeni kanssa eikä siinä ole huomioitu Radeon 9600 -piirisarjaa.
    Ratkaisu
    Lataan km:n lähdekoodin uusimman version CVS-versionhallintajärjestelmän avulla ja korjaan lähdekoodin toimivaksi.

    1. Lataan km:n lähdekoodin uusimman version seuraavalla komennolla:
      cvs -z3 \
      -d:pserver:anonymous@gatos.cvs.sourceforge.net:/cvsroot/gatos \
      co -P km
    2. Lataan korjaavan paikkaustiedoston seuraavalla komennolla:
      wget http://mummila.net/vuorovaikutus/files/2008/r9600-2_6_22.patch
    3. Sovellan paikkaustiedoston tiedot km:n lähdekoodiin seuraavalla komennolla:
      cd km && patch -p1 -i ../r9600-2_6_22.patch
    4. Nimeän 2.6-sarjan Linux-ytimelle sopivan Makefile-tiedoston niin että make-komento käyttää sitä:
       mv Makefile-2.6 Makefile</code

    Kun tämän jälkeen käytän make-komentoa lähdekoodin kääntämiseen, sen suorittaminen onnistuu.

    Huomautuksia
  • [Ratkaisu] Komentojen ja niiden ulostulon tallentaminen tiedostoon

    Lähtökohta
    Aion suorittaa monimutkaisen, paljon eri komentoja sisältävän tehtävän komentorivitulkissa.
    Ongelma
    Haluan tallentaa ajamani komennot ja kaiken niiden komentotulkkiin tuottaman ulostulon tiedostoon, jotta voin jälkeenpäin käyttää sitä muistiapuna kuvaillessani miten tehtävän suoritin.
    Ratkaisu
    Voin tallentaa komentorivitulkkiin kirjoittamani komennot ja niiden ulostulon script-komennolla.
    Seuraavassa esimerkissä suoritan kaksi echo-komentoa ja yhden cat-komennon niin, että komennot ja niiden ulostulo tallentuvat testi.txt -nimiseen tiedostoon. Tällainen, tavallaan script-komennon sisällä ajettava lohko on nimeltään istunto, ja olen lihavoinut sen sisällön seuraavassa:

    jani@shuttle-xpc:~/tmp$ script testi.txt
    Skripti käynnistetty, tiedosto on testi.txt
    jani@shuttle-xpc:~/tmp$ echo "tämä on testi."
    tämä on testi.
    jani@shuttle-xpc:~/tmp$ echo "voisin ajaa tässä mitä hyvänsä komentoja" > foo.txt
    jani@shuttle-xpc:~/tmp$ cat foo.txt
    voisin ajaa tässä mitä hyvänsä komentoja
    jani@shuttle-xpc:~/tmp$ exit
    Skripti suoritettu, tiedosto on testi.txt
    jani@shuttle-xpc:~/tmp$ 

    Aloitin istunnon tallentamisen script testi.txt -komennolla ja lopetin sen exit-komennolla. Testi.txt -tiedostoon tallentui kaikki mitä näiden kahden komennon suorituksen välissä tapahtui eli yllä olevassa lihavoimani istunto, sekä lisäksi istunnon aloitus- ja lopetusaika. Tulostan seuraavassa cat-komennolla testi.txt -tiedoston sisällön ja lihavoin sen:

    jani@shuttle-xpc:~/tmp$ cat testi.txt
    Skripti käynnistetty to 28. helmikuuta 2008 09:36:31
    jani@shuttle-xpc:~/tmp$ echo "tämä on testi."
    tämä on testi.
    jani@shuttle-xpc:~/tmp$ echo "voisin ajaa tässä mitä hyvänsä komentoja" > foo.txt
    jani@shuttle-xpc:~/tmp$ cat foo.txt
    voisin ajaa tässä mitä hyvänsä komentoja
    jani@shuttle-xpc:~/tmp$ exit
    
    Skripti suoritettu to 28. helmikuuta 2008 09:37:19
    jani@shuttle-xpc:~/tmp$ 
    Huomautuksia
    • Istunnon lopettamiseen voi käyttää exit-komennon sijasta näppäinyhdistelmää Control + D.
    • Script-komennon ohjesivu varoittaa, että jotkin interaktiiviset komennot (kuten vi) saattavat kirjoittaa tallennustiedostoon roskaa, eli satunnaiselta vaikuttavia merkkejä. Niiden käytöstä ei välttämättä jää tallennustiedostoon ymmärrettäviä kirjauksia.
    • Ratkaisussa oleva ensimmäinen esimerkki on sekin tallennettu scriptiä käyttäen; ajoin siis script-komennon istunnossa, jota suoritin toisessa script-komennolla aloitetussa istunnossa. Istuntoja voi siis sisäkkäistää.
    • Kaikki komennot tallentuvat Bash-komentotulkissa käyttäjäkohtaiseen historiaan, jota voi hallita HISTSIZE, HISTFILE ja HISTFILESIZE -muuttujien avulla. Komentohistoriaan tallennetaan kuitenkin vain komennot, ei niiden ulostuloa. Lisäksi komentohistorian koko on rajoitettu.
  • Kolumni: Tietokoneesi on vaarassa!

    Toverini Juha linkkasi minut kuvaan hauskasti mönkään menneestä huijausyrityksestä: Linux-käyttäjä oli saanut Skypen kautta ilmoituksen, jonka mukaan hänen Windowsinsa tietoturva oli vaarantunut, ja missä häntä kehotettiin lataamaan paikkaustiedosto ongelman korjaamiseksi. Kyse on tietysti Windows-haittaohjelman levityksestä valheellisen tietoturvailmoituksen avulla.

    Huomioni kiinnittyi blogimerkinnän perässä olleeseen kommenttiin, jonka mukaan yrityksen kohteeksi joutunut käyttäjä voisi aivan hyvin ollakin vaarassa, koska hän käyttää Ubuntua, joka muistuttaa niin paljon Windowsia. Auts!

    Olen kyllä miettinyt, että Ubuntun (ja tietysti muidenkin vastaavien distrojen) tapa kysellä järjestelmänhallinnan salasanaa tuon tuostakin on pikkuisen huolestuttava sikäli, että siinä turtuu hyvin pian toimenpiteen ratkaisevuudelle. Olen itsekin asentanut Gutsyyni järjestelmänhallinnan oikeuksia käyttäen pari pakettia tutkimatta niiden alkuperää näin jälkikäteen ajateltuna riittävän hyvin. Kun web-sivuilla jaeltujen ohjelmapakettien asentaminen järjestelmänhallinnassa vaadittavin oikeuksin on näin suoraviivaista, ollaan jo käytännössä samalla viivalla Vistaa varhaisempien Windowsien kanssa siinä, että tietoturvan mahdollisesti vaarantavien ohjelmien asentelusta tulee liian helposti jokapäiväistä kauraa.

    Tähän järjestelmänhallinnan helppouteen tottuneena en kuitenkaan kovin mieluusti enää luopuisi siitä. Ja sikäli uskoisin Linux-käyttäjänä vielä olevani vanhojen Windowsien käyttäjiä paremmassa turvassa, että ainakaan niin kauan kuin en ole onnistunut vaarantamaan järjestelmääni, ohjelmat eivät pääse järjestelmääni käsiksi omine nokkinensa, siis minun siitä tietämättä. Vaarantuminen vaatii periaatteessa aina minulta sen virheen, että annan vaaralliselle ohjelmalle ne järjestelmänvalvojan oikeudet. Mutta miten tätä järjestelmänhallinnan oikeuksien jatkuvaan peräämiseen liittyvää tietoturvariskiä voisi vähentää?

    En ole perehtynyt SELinuxiin, mutta se voisi ehkä olla avuksi. Sen lisäksi en kyllä keksi äkkiseltään muuta ratkaisua kuin sen, että perusjärjestelmän päälle ei asenneta mitään muuta kuin virtualisointi, ja käyttäjä päästetään sen jälkeen vain virtuaalihiekkalaatikkoon, jossa saa asennella mitä huvittaa. Isäntäjärjestelmä tarjoaa palomuurin ja muita tietoturvaominaisuuksia, jotka valvovat tätä hiekkalaatikkoa, ja jos isäntä havaitsee hiekkalaatikossa epäilyttävää toimintaa kuten vaikkapa viruksen aiheuttamaksi epäiltyä liikennettä, se puuttuu peliin. Käyttäjää varoitetaan, ja vasta uhan torjumisen tai tietoturvan vaarantumisen paikkaamisen yhteydessä kysytään tarvittaessa oikeita järjestelmänvalvojan oikeuksia, eli oikeuksia isäntäjärjestelmän hallintaan.

    Siinä tapauksessa sitten kylläkään käyttäjää ei hiekkalaatikkonsa tyhjäksitekemisen takia välttämättä enää paljoa lohduta se, ettei isäntäjärjestelmä ole vaarantunut. Isäntäjärjestelmä voisi kuitenkin pelkän valvonnan ohella tehdä hiekkalaatikosta myös varmuuskopioita tai järjestelmäkuvatiedostoja (snapshot) säännöllisesti, jolloin kokonaan puhtaalta pöydältä aloittamisen sijasta käyttäjä voisikin valita aiempaan, vielä vaarantumattomaan hiekkalaatikkoon palaamisen eikä siten menettäisi ihan kaikkea.

    Lopuksi täytyy vielä todeta, että tähän ehdotukseeni voi olla sisältyä ammottavia aukkoja, sillä en ole tietoturva-asiantuntija, en virtualisointiasiantuntija enkä pidä itseäni edes Linux-asiantuntijana, vaikka siitä kokemukseni näistä kolmesta aiheesta lieneekin kaikkein laajin.