Harri Tuomi
Luentomateriaali - 31.10.2001
Jyväskylän yliopisto
Informaatioteknologian tiedekunta
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 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 |
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ä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.
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/.