Asennuksen tietoturvavinkit
From LimeSurvey Manual
Yleistä
Huomaa, että suhtaudumme tietoturvaan erittäin vakavasti ja reagoimme nopeasti. Jos tiedät LimeSurveyn tietoturvaongelmista, ilmoita niistä meille tekemällä virheraportti virheenseurantajärjestelmässämme (merkitse virheen vakavuudeksi tai luokaksi 'security').
Lisätietoja tietoturvaongelmien ja haavoittuvuuksien ilmoittamisesta on tietoturvakäytännössämme.
Verkkopalvelimen rajoitukset
Jos käytät Apachea, LimeSurvey sisältää rajoituksia varten useita htaccess-tiedostoja. Varmista, että sallit mukana tulevien htaccess-tiedostojen käytön asetuksella AllowOverride.
Jos käytät muuta verkkopalvelinta tai haluat käyttää asetusta AllowOverride None, sinun on:
- (valinnainen) estettävä pääsy kaikkiin tiedostoihin hakemistoissa application, protected, framework ja themes/*/views
- estettävä pääsy käyttäjien lataamiin tiedostoihin /upload/surveys/.*/fu_[a-z0-9]
- (valinnainen) estettävä suoritettavien tiedostojen käyttö upload-hakemistossa
Esimerkin nginx-palvelimelle löydät yleisistä usein kysytyistä kysymyksistämme.
Linuxin tiedosto-oikeudet
Jos käytät Linux-palvelinta, tiedosto-oikeuksien asettaminen oikein on välttämätöntä LimeSurvey-asennuksesi suojaamiseksi.
Perustietoja Linuxin/*nixin tiedosto-oikeuksista
Linux/*nix-käyttöjärjestelmä on monikäyttäjäjärjestelmä. Tämä tarkoittaa, että oman tilisi lisäksi järjestelmässä voi olla muita käyttäjätilejä, ja sinun on huolehdittava siitä, mitä oikeuksia annat muille käyttäjille.
Muista, että 'root'-tilillä on aina oikeus käyttää tiedostojasi (riippumatta asettamistasi tiedosto-oikeuksista), koska se on pääkäyttäjä.
Myös verkkopalvelin (joka suorittaa LimeSurveyta) toimii tietyn identiteetin (käyttäjän) alaisuudessa. Linuxissa se on yleensä käyttäjä 'www', 'www-data' (Debianissa/Ubuntussa), 'apache' tai 'nobody'. Jotkin palveluntarjoajat kuitenkin käyttävät järjestelmiä (kuten suexec), joiden avulla LimeSurveyn komentosarjat voidaan ajaa omalla käyttäjälläsi. Verkkopalvelinkäyttäjällä on luonnollisesti oltava oikeus lukea LimeSurveyn tiedostoja. Vain pienen osan LimeSurveyn alihakemistoista tarvitsee kuitenkin olla verkkopalvelinkäyttäjän kirjoitettavissa.
Tiedosto-oikeuksien asettaminen itse hallinnoidussa Linux-järjestelmässä
Jos hallinnoit itse verkkopalvelimesi ja käyttöjärjestelmäsi asetuksia (omistat fyysisen palvelimen tai vuokraat virtuaalipalvelimen, johon sinulla on root-oikeudet), voit harkita seuraavia suosituksia.
Voit aluksi asettaa LimeSurvey-tiedostojen omistajan ja ryhmän siten, että tiedosto-oikeuksien määrittäminen helpottuu. Eräs toimintatapa on asettaa tiedostojen omistajaksi oma käyttäjätunnuksesi ja ryhmäksi verkkopalvelimen ryhmä. Yleensä tähän ryhmään kuuluu vain verkkopalvelimen tili (ja mahdollisesti toinen ylläpitäjän tili). Jos esimerkiksi käyttäjätunnuksesi on 'myaccount' ja verkkopalvelimen käyttäjä on 'apache' ryhmässä 'apache', voit käyttää komentoriviltä seuraavaa komentoa: $ chown -R myaccount:apache limesurvey/. Aseta tämän jälkeen tiedostojen ja alihakemistojen oikeudet.
Jotta komentosarja toimisi oikein, joihinkin hakemistoihin tarvitaan kirjoitusoikeus:
- Hakemisto /limesurvey/application/config tarvitsee oikeuden luku ja kirjoitus, jotta sovelluksen asetukset voidaan tallentaa
- Hakemistoa /limesurvey/tmp ja sen alihakemistoja käytetään tuontiin ja lataamiseen, ja niille tulee antaa verkkopalvelimelle oikeus luku ja kirjoitus
- Hakemistolle upload ja kaikille sen alihakemistoille on myös asetettava oikeus luku ja kirjoitus, jotta kuvien ja mediatiedostojen lataaminen onnistuu
- Kaikki muut hakemistot ja tiedostot voidaan asettaa vain luettaviksi (Read Only)
Tiedosto-oikeuksien asettaminen vuokratulla verkkopalvelimella
Verkkosovelluksen suojaamiseen vuokratussa ympäristössä ei ole yhtä vakiomenettelyä, koska ympäristöt eroavat toisistaan monin tavoin.
Hallinnoidulla palvelimella palvelin tarvitsee kirjoitusoikeuden joihinkin hakemistoihin, jotta komentosarja toimisi oikein:
- Hakemistoa /limesurvey/tmp käytetään tuontiin ja lataamiseen, ja sille tulee antaa verkkopalvelimelle oikeus luku ja kirjoitus
- Hakemistolle upload ja kaikille sen alihakemistoille on myös annettava verkkopalvelimelle oikeus luku ja kirjoitus, jotta kuvien ja mediatiedostojen lataaminen onnistuu
- Muut hakemistot ja tiedostot tulee asettaa vain luettaviksi (Read Only)
- Verkkopalvelimen asetuksista riippuen kirjoitettavien kansioiden oikeudet on ehkä asetettava chmod-komennolla arvoon 755 tai 777, jotta verkkopalvelin voi kirjoittaa niihin. Kokeile ensin arvoa 755 ja jos se ei toimi, 'päivitä' arvoon 777
- Voit myös yrittää poistaa muiden käyttäjien lukuoikeuden tiedostoon config.php asettamalla tiedoston oikeuksiksi 750 - jos se ei toimi, 'päivitä' arvoon 755
Windowsin tiedosto-oikeudet
Jos käytät Windows-palvelinta, varmista, että admin-kansio sallii verkkopalvelinprosessin omistajan kirjoittaa tiedostoja tähän hakemistoon. Muut tiedostot voidaan asettaa vain luettaviksi ja suoritettaviksi.
Muita tietoturva-asioita
Seuraavat ovat vain suosituksia. LimeSurvey on yleisesti ottaen erittäin turvallinen ilman näitä lisätoimenpiteitä. Jos kuitenkin keräät erittäin arkaluonteisia tietoja, hieman lisäsuojaa voi olla hyödyllistä:
SSL:n käyttö
Suosittelemme yleisesti SSL:n käyttöä arkaluonteisten kyselytietojen yhteydessä. SSL otetaan yleensä käyttöön määrittämällä verkkopalvelin oikein ja käyttämällä SSL-varmennetta. Jos SSL on käytössä, sinun tulisi pakottaa SSL:n käyttö aina LimeSurveyn yleisissä asetuksissa. Lisäksi voit asettaa käyttöön vain 'secure'-evästeet muokkaamalla vastaavaa asetusta tiedostossa config.php.
Pääsy config.php-tiedostoon
Tiedosto /application/config/config.php sisältää tietokantapalvelimesi käyttäjänimen ja salasanan. Tämä aiheuttaa tiettyjä tietoturvariskejä, erityisesti jos käytät tunnusta, jolla on laajat ylläpito-oikeudet tietokantaan. Jos jokin virhe palauttaa tämän PHP-tiedoston sisällön käyttäjän selaimeen, tietokannan salasana ja muut tiedot voivat vaarantua (tämä on kuitenkin hyvin epätodennäköinen tilanne). Paras tapa pienentää riskiä on luoda erillinen tunnus, jolla on oikeudet vain LimeSurvey-tietokantaasi.
Toinen tapa suojata nämä tiedot on siirtää tiedoston /application/config/config.php tiedot hakemistoon, joka ei ole verkosta saatavilla. Apachea käyttävillä tämä tarkoittaa htdocs-kansion (jota kutsutaan myös nimillä public_html tai www) yläpuolella olevaa hakemistoa. Käytännössä käytät edelleen config.php-tiedostoa, mutta siinä on vain yksi rivi, joka sisällyttää tiedoston, jossa on TODELLISET asetustiedot (esim. <?php return include("/home/hostfolder/safedata/configreal.php"); ?>). Poista kaikki todelliset asetustiedot tiedostosta /application/config/config.php ja liitä ne toiseen tiedostoon (configreal.php), johon tiedosto /application/config/config.php viittaa. Tämän toisen tiedoston tulee sijaita hakemistossa, joka ei ole verkosta saatavilla. Tällöin /application/config/config.php ei sisällä tietokannan salasanoja tms. vaan ainoastaan sen tiedoston nimen, joka SISÄLTÄÄ tietokannan tiedot.
Näin sinun ei tarvitse muuttaa kaikkia muita tiedostoja, jotka sisällyttävät tiedoston /application/config/config.php, koska config.php 'ohjaa ne uudelleen' asetustiedostoon, joka sijaitsee verkosta saavuttamattomassa hakemistossa ja sisältää kaikki todelliset asetustiedot.
Älä myöskään käytä oletuskäyttäjänä nimeä "admin" tai "administrator". Siirry MySQL-tietokantaasi (tai siihen tietokantaan, johon asensit LimeSurveyn) ja vaihda oletuskäyttäjänimi "admin" haluamaksesi (esim. "admin_xyz"). Ylläpitäjän uuden käyttäjänimen arvaaminen on nyt paljon vaikeampaa. Muista, että tämä on toinen niistä kahdesta muuttujasta, joiden avulla tunkeutujat voivat päästä järjestelmään. Ylläpitäjän salasana on toinen muuttuja. Valitse siis molemmat äärimmäisen huolellisesti.
Content Security Policy (CSP)
HUOMAUTUS - Tässä annettu CSP on vain esimerkki, eikä sitä ole tarkoitettu käytettäväksi sellaisenaan. Se on tarkoitettu lähtökohdaksi, ja sinun TÄYTYY mukauttaa se omiin tarpeisiisi ja testata se huolellisesti.
<IfModule mod_headers.c>
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; base-uri 'none'; form-action 'self'; frame-ancestors 'self'; upgrade-insecure-requests" "expr=%{CONTENT_TYPE} =~ m#text\/(html|javascript)|application\/pdf|xml#i"
</IfModule>