Linux - tietoturvaa projekteille

Harri Tuomi

Luentomateriaali - 31.10.2001

Jyväskylän yliopisto

Informaatioteknologian tiedekunta

Sisällysluettelo

Verkkoliikenne ja portit

Verkkoliikenne tapahtuu paketteina, jotka löytävät perille IP-numeron perusteella. Esimerkiksi työkoneeni seldon.it.jyu.fi:n IP-numero on 130.234.160.79. Perille päästyään paketit ohjautuvat oikealle palvelulle porttinumeron perusteella. Esimerkiksi jos minun työkoneeseeni yritetään ottaa yhteyttä SSH:lla, niin silloin portin numero on 22. Tällöin voidaan ajatella osoitteen koostuvan kahdesta määreestä, IP-numerosta ja portista. Usein tätä kuvataankin rimpsulla IP:portti, eli esimerkkitapauksessamme 130.234.160.79:22.

Perille tultuaan paketti joko löytää perille tai jätetään huomioimatta sen mukaan kuunteleeko mikään palvelu porttia, johon paketti oli tulossa. Esimerkissämme paketti löytää perille, jos minulla on SSH-palvelin käynnissä ja kuuntelee porttia 22. Jos taas SSH-palvelin ei ole käynnissä, eikä mikään muukaan palvelu kuuntele porttia 22, niin paketti vain jätetään huomioimatta.

Seuraavassa taulukossa on lueteltuna yleisimmät käytössä olevat portit.

Portin numero Porttiin liittyvän palvelun nimi Selitys
21 ftp FTP-palvelin
22 ssh SSH-palvelin
23 telnet Telnet-palvelin
25 snmp Sähköpostipalvelin
80 www WWW-palvelin
443 ssl WWW-palvelimen SSL-suojattu yhteys
3306 mysql MySQL-tietokantapalvelin
5432 postgres PostgreSQL-tietokantapalvelin

Palvelut

Palvelut voidaan luokitella kahteen eri ryhmään, lokaaleihin palveluihin sekä verkkopalveluihin. Lokaalit palvelut tuottavat toimintoja koneen lokaalille käyttäjälle ja verkkopalvelut lokaalien palvelujen lisäksi verkon kautta muille koneille. Luonnollisesti verkkopalvelut voidaan konfiguroida myös siten, että ne tarjoavat palvelujaan ainoastaan lokaalisti.

Lokaalit palvelut ovat yleensä käytännössä turvallisia palveluja, joten niitä kautta ei luvaton tunkeutuja pääse käsiksi koneeseemme. Verkkopalvelut ovat astetta hankalampi tapaus, yleisesti ottaen voidaan ajatella jokaisen palvelun olevan potentiaalinen tietoturvariski. Tämän vuoksi turhia palveluja ei pidä missään tapauksessa käyttää koneellaan. RedHatin suurin ongelma onkin siinä, että se normaalin asennuksen jälkeen käynistää kasan täysin turhia palveluja, jotka pitää osata poistaa käytöstä.

Seuraavassa taulukossa on lueteltuna yleisimmin RedHatissa käytetyt palvelut. Kahdeksan ensimmäistä palvelua ovat lokaaleja ja loput ovat verkkopalveluja (karkeasti yleistettynä).

random Satunnaislukugeneraattori
atd Ajastettujen käskyjen palvelin (kertaluontoisiin toimenpiteisiin)
crond Ajastettujen käskyjen palvelin (toistuviin toimenpiteisiin)
xfs X Font Server, palvelee X:ää
syslogd Systeemin lokituspalvelu
gpm Konsolin hiiripalvelut
keytable Näppäimistön palvelut
apmd Virransäästöominaisuuksien palvelin
smb Samba, eli tiedostojen jako windowsiin
portmap Porttien mappauspalvelin, tarvitaan esimerkiksi NFS:n toimintaan
nfs Network File System, tiedostojen jako muihin UNIXeihin
ntpd Network Time Protocol Daemon, kellonajan hakeminen palvelimelta
sshd SSH-palvelin
httpd WWW-palvelin
tomcat JSP-sivujen servlet-palvelin
postgresql PostgresSQL, SQL-palvelin
mysql MySQL, SQL-palvelin
lpd Tulostuspalvelin
sendmail Sähköpostipalvelin
xinetd Erinäisten pienien palvelimien "yhteispalvelin", esim. FTP ja Telnet
named DNS-palvelin
dhcpd DHCP-palvelin

Palvelujen automaattinen käyntiin lähteminen

RedHatissa palvelujen automaattista käyntiin lähtemistä voidaan säätää chkconfig - työkalulla. Chkconfigin käytöstä saa lisätietoa manuaalisivuilta (man chkconfig). Seuraavassa kuitenkin muutama perustapa toimia chkconfigin kanssa.

chkconfig --list antaa listauksen kaikista koneeseen asennetuista palveluista ja siitä, millä runleveleillä ne lähtevät käyntiin. Runlevelillä tarkoitetaan koneen toimintatasoa, joista yleisimmät ja tärkeimmät ovat 3 (käyttö ilman graafista käyttöliittymää) ja 5 (käyttö graafisen käyttöliittymän, X, kanssa). Seuraavassa listaus työkoneeltani, josta on poimittu vain ne rivit, joilta löytyy päällä oleva palvelu.

[root@seldon /root]# chkconfig --list | grep :on 
atd      0:off 1:off 2:off 3:on 4:off 5:on 6:off 
keytable 0:off 1:off 2:off 3:on 4:off 5:on 6:off 
syslog   0:off 1:off 2:off 3:on 4:off 5:on 6:off 
network  0:off 1:off 2:off 3:on 4:off 5:on 6:off 
random   0:off 1:off 2:off 3:on 4:off 5:on 6:off 
apmd     0:off 1:off 2:off 3:on 4:off 5:on 6:off 
crond    0:off 1:off 2:off 3:on 4:off 5:on 6:off 
xfs      0:off 1:off 2:off 3:on 4:off 5:on 6:off 
sshd     0:off 1:off 2:off 3:on 4:off 5:on 6:off 
xinetd   0:off 1:off 2:off 3:on 4:off 5:on 6:off 
ntpd     0:off 1:off 2:off 3:on 4:off 5:on 6:off 

Tuossa on siis päällä verkkopalveluista vain ntpd (hakee verkosta kellonajan), sshd (tarjoaa mahdollisuuden käyttää konetta etänä SSH:lla) sekä xinetd (jonka kautta ajetaan backuppeja koneelta). Jos haluan käynnistää esimerkiksi postgresin lähtemään automaattisesti päälle runleveillä 3 ja 5, niin kirjoitan seuraavan komennon.

[root@seldon /root]# chkconfig --level 35 postgresql on

Sen jälkeen on tulostus seuraavanlainen.

[root@seldon /root]# chkconfig --list | grep :on 
atd        0:off 1:off 2:off 3:on 4:off 5:on 6:off 
keytable   0:off 1:off 2:off 3:on 4:off 5:on 6:off 
syslog     0:off 1:off 2:off 3:on 4:off 5:on 6:off 
network    0:off 1:off 2:off 3:on 4:off 5:on 6:off 
random     0:off 1:off 2:off 3:on 4:off 5:on 6:off 
apmd       0:off 1:off 2:off 3:on 4:off 5:on 6:off 
crond      0:off 1:off 2:off 3:on 4:off 5:on 6:off 
xfs        0:off 1:off 2:off 3:on 4:off 5:on 6:off 
sshd       0:off 1:off 2:off 3:on 4:off 5:on 6:off 
xinetd     0:off 1:off 2:off 3:on 4:off 5:on 6:off 
postgresql 0:off 1:off 2:off 3:on 4:off 5:on 6:off 
ntpd       0:off 1:off 2:off 3:on 4:off 5:on 6:off 

Tämän jälkeen seuraavan kerran kun vaihdetaan runlevelia (siis käytännössä käynnistetään kone uudestaan, onnistuu toki myös muutenkin) käynnistyisi postgres - tietokantapalvelin automaattisesti koneellemme.

Palvelujen käynnistäminen ja sammuttaminen käsin

Palvelujen käynnistysskriptit löytyvät RedHatissa hakemistosta /etc/rc.d/init.d/. Käynnistysskriptit tunnistavat käytännössä aina parametrit start, stop ja restart. Jos haluan nyt käynnistää manuaalisesti postgres-palvelimen, niin se tapahtuu seuraavasti (esimerkissä se on myös sammutettu heti perään).

[root@seldon /root]# /etc/rc.d/init.d/postgresql start 
Checking postgresql installation:                          [ OK ] 
Starting postgresql service:                               [ OK ]
[root@seldon /root]# /etc/rc.d/init.d/postgresql stop 
Stopping postgresql service:                               [ OK ]
[root@seldon /root]# 

Kaikilla palveluilla ei ole valmiiksi tehtyjä käynnistysskriptejä. Sellaisen kirjoittaminen ei ole ylitsepääsemättömän hankalaa, mutta ilman käynnistysskriptiäkään palvelun käynnistäminen ei ole yleensä vaikeaa. Tällainen yleisesti meillä käytössä oleva palvelu, jolla ei ole omaa RedHatille laadittua käynnistysskriptiä, on JSP-moottori tomcat. Käynnistysskriptit huolehtivat meidän puolestamme eräästä tärkeästä asiasta, siitä minkä käyttäjän oikeuksilla palvelu on käynnissä.

Käytännössä koskaan minkään verkkopalvelun ei pitäisi olla päällä superkäyttäjä rootin oikeuksilla. Jos jotakin palvelua pidetään päällä rootin oikeuksilla, niin silloin mahdollinen ulkopuolinen tunkeutuja on omassa paratiisissaan. Saatuaan haltuun verkkopalvelun saa hän myös rootin oikeudet. Ja silloin meitä ei pelasta mikään muu kuin koneen uudelleenasennus. Tomcat käynnistetään komennolla /usr/local/tomcat/bin/startup.sh ja jos teemme tuon roottina, niin silloin palvelu käynnistyy rootin oikeuksilla. Root pystyy kuitenkin suorittamaan komentoja minä tahansa muuna käyttäjänäkin, joten root voi ensin "muuttua toiseksi käyttäjäksi" ja sen jälkeen vasta suorittaa komennon esimerkiksi seuraavasti.

[root@seldon /root]# su - tomcat 
bash-2.04$ /usr/local/tomcat/bin/startup.sh 

Jos tarvitsee antaa vain yksi komento jonain toisena käyttäjänä, niin sen voi tehdä suoraankin antamalla komennon su:lle parametrina, esimerkiksi

su - tomcat -c "/usr/local/tomcat/bin/startup.sh"

Sammuttamisen suhteen ei ole mitään merkitystä minä käyttäjänä sen tekee, joten sen voi tehdä aivan hyvin roottinakin.

Linuxin tietoturva-aukot

Aivan samoin kuin windowseissakin, niin Linuxista löytyy myös säännöllisesti tietoturva-aukkoja. Yleisimmin nämä kohdistuvat johonkin tiettyyn palveluun. Melkein viikottain löytyy jostain verkkopalvelusta tietoturva-aukko, jota pitkin ulkopuolinen tunkeutuja voi päästä koneellesi. Tämän vuoksi ainakin palvelujen osalta on koneesta pidettä huolta, eli siihen on asennettava uusimman päivitykset. Päivityksiä löytyy ftp:llä esimerkiksi osoitteesta ftp://ftp.funet.fi/pub/Linux/mirrors/redhat/redhat/linux/updates/.

Lyhyt yhteenveto (eli näin et satuta itseäsi heti)

http://appro.mit.jyu.fi/2001/syksy/laitteistot/luennot/luento9/asennuksentietoturva.html
© Harri Tuomi ()<URL: http://www.mit.jyu.fi/hamitu/>
2001-11-22T14:07:35Z