Joomla ja sen lisäosat on keskeisiltä osiltaan rakennettu PHP-ohjelmointikieltä käyttäen. PHP on suoritettavaa ohjelmakoodia. Web-palvelimista puolet on Apacheja, jotka osaavat itse käsitellä vain HTML-koodilla rakennettuja sivuja. Ne siis tarvitsevat keinon keskustella palvelimelle asennetun PHP-kielentulkin kanssa. Tämä voidaan toteuttaa kahdella tavalla:

  1. PHP voidaan suorittaa CGI-rajapinnan kautta
  2. PHP voidaan suorittaa Apachen moduulina

Näiden keinojen eroja ovat mm. moduulina suorittamisen hiukan vähäisempi kuormitus palvelimelle ja niiden erilaisista toimintatavoista johtuva ero koodin suorittavassa käyttäjässä.

Jokainen palvelimella suoritettava ohjelma suoritetaan jollakin palvelimelle määritellyllä käyttäjätunnuksella. Apachella on tyypillisesti oma käyttäjätunnuksensa (www, nobody, www-data tai muu vastaava) jolla sitä suoritetaan. Apachen välittäessä sivuja sen tarvitsee vain pystyä lukemaan tiedostoja mutta esimerkiksi asetuksia muutettaessa tai komponentteja asennettaessa myös kirjoittamaan tiedostoihin ja hakemistoihin. PHP:tä Apachen moduulina suoritettaessa se tehdään Apachen käyttäjätunnuksilla ja oikeuksilla. CGI-rajapintaa käytettäessä koodi suoritetaan webhotellin käyttäjätunnuksella ja oikeuksilla.

Tämä on hyvin tärkeä ero jaetulla palvelimella kuten webhotellissa. Hosting-yritys myy siivuja palvelimen levytilasta, suoritin ajasta ja tietoliikenneohjelmasta lukemattomille käyttäjille, jotka käyttävät noita resursseja hyvin erilaisten verkkopalvelujen tuottamiseen. Näissä olosuhteissa tärkeintä tulisi olla tietoturvan. Erilaisilla julkaisujärjestelmillä on kuitenkin hyvin erilaiset vaatimukset ja alan kilpailu pakottaa ottamaan kaiken irti olemassa olevasta laitekannasta.

Jokainen webhotellin käyttäjä saa oman käyttäjätunnuksen ja salasanan omaan siivuunsa levytilaa. Tiedostoja palvelimelle, palveluntarjoajan osoittamaan hakemistoon, siirrettäessä käytetään tyypillisesti FTP/SCP-ohjelmaa, joka käyttää noita käyttäjätunnuksia ja salasanoja. Siirrettyjen tiedostojen omistajaksi muodostuu siis webhotellin vuokraaja ja käyttöoikeuden määräytyvät sen mukaan.

Tässä vaiheessa on olennaista muistaa Linuxin käyttöoikeuksien määrittely.

omistaja/owner

ryhmä/group

muut/others

luku/read (r)

4 4 4

kirjoitus/write (w)

2 2 2

suoritus/execute (x)

1 1 1
             
Käyttöoikeuksia voidaan antaa käyttäjälle, ryhmälle tai kaikille. Käyttöoikeuksien taso pyritään tietoturvan vuoksi laskemaan alimmalle mahdolliselle tasolla. Näin tiedostoille annetaan tyypillisesti oikeudet 644 (eli omistaja voi lukea ja kirjoittaa, ryhmään kuuluvat ja muut vain lukea) ja hakemistoille 755 (eli omistaja voi lukea, kirjoittaa ja suorittaa, ryhmään kuuluvat ja muut lukea ja suorittaa). (Hakemistojen kohdalla suorittaminen tarkoittaa myös listausta.)

Koska webhotellin käyttäjätunnus ja Apachen käyttäjätunnus webhotellissa ovat erilliset eivätkä kuulu samaan ryhmään, näillä tunnuksilla ei 644 oikeustasolla ole kirjoitusoikeutta toistensa tiedostoihin. Apache ei siis pysty kirjoittamaan hakemistoihin ja/tai tiedostoihin ilman oikeustason nostoa.

Kun Joomla siirretään (tai puretaan) webhotelliin FTP:tä käyttäen, tulee sen tiedostojen omistajaksi webhotellin käyttäjätunnus. Jos PHP:tä suoritetaan Apachen moduulina Apache-käyttäjä ei pysty kirjoittamaan hänen omistamiinsa hakemistoihin tai asetustiedostoihin eikä asennus onnistu. Toisaalta Joomlan asennuksessa luodut tiedostot puolestaan ovat Apache-käyttäjän omistuksessa, eikä webhotellin käyttäjällä ole niihin oikeutta.

Näitä omistajuus ja käyttöoikeusristiriitoja voidaan pyrkiä ratkaisemaan monin keinoin, mutta lopulta varmin on ennaltaehkäisy eli PHP:tä CGI-rajapinnan kautta suorittavan webhotellin valinta. Ongelmaa helpottamaan PHP:tä moduulina suorittaviin ympäristöihin on luotu mm. suphp-moduuli Apacheen. Sillä pystytään ainakin osittain estämään ongelmien muodostuminen.

Väliaikaisia ratkaisuja ongelmaan ovat:

  • tiedostojen oikeustason korottaminen (655 tai 755, mutta HUOM! 777 vain hetkellisesti!)
  • tiedostojen omistajuuden manuaalinen muuttaminen chown-komentoa tai FTP:tä käyttäen (työläs!)
  • tiedostojen siirtäminen cPanelin tai vastaavan hallintapaneelin tiedostonhallintaa käyttäen
  • eXtplorer-lisäosan asentaminen Joomlaan ja tiedostojen siirtäminen sitä kautta.
  • Kuvien ja muiden sisältöön liittyvien tiedostojen osalta ongelma voidaan ratkaista myös Joomlan Media Manageria tiedostojen siirtämiseen käyttämällä.
  • Joomlan FTP-layerin käyttöönotto Sivuston asetuksissa

 

Kiitokset quietFinnille vastauksen asiantuntijana toimimisesta.