Daemon (taustaprosessi): Unixin ja muiden käyttöjärjestelmien palvelinohjelmat
Tutustu daemonien eli taustaprosessien rooliin Unixissa ja muissa käyttöjärjestelmissä: miten syslogd, httpd, sshd ja muut palvelinohjelmat toimivat ja hallitaan.
Unixissa ja muissa tietokoneiden monitehtäväisissä käyttöjärjestelmissä daemon (lausutaan /ˈdiːmən/ tai /ˈdeɪmən/) on tietokoneohjelma, joka suoritetaan taustatehtävänä. Monien daemonien nimet päättyvät d-kirjaimeen: esimerkiksi syslogd, daemon, joka käsittelee järjestelmälokia, httpd, daemon, joka käsittelee verkkopyyntöjä, tai sshd, joka huolehtii saapuvista SSH-yhteyksistä.
Mitkä ovat daemonin ominaisuudet?
Daemon on prosessi, joka toimii taustalla ilman suoraa käyttäjän vuorovaikutusta. Tyypillisesti daemon:
- käynnistetään järjestelmän käynnistyksen yhteydessä tai tarpeen mukaan;
- odottaa tapahtumia, kuten verkkoyhteyksiä, ajoitettuja tehtäviä tai tiedostojärjestelmän muutoksia;
- kirjaa tapahtumia lokiin ja reagoi signaaleihin (esim. SIGHUP konfiguraation uudelleenlatausta varten tai SIGTERM sulkeutumista varten);
- yleensä ajaa taustaprosessina ilman kiinnittynyttä terminaalia ja pidetään yllä jatkuvasti tai hallinnoidaan palveluna.
Daemonin käynnistys ja init-järjestelmät
Perinteisesti daemonit käynnistettiin init-järjestelmän (esim. SysV init) käynnistyskomentosarjoista. Nykyisissä jakeluissa yleisiä käynnistön ja hallinnan järjestelmiä ovat:
- systemd — nykyaikainen init- ja palvelunhallintajärjestelmä monissa Linux-jakeluissa, tarjoaa mm. socket activationin, riippuvuuksien hallinnan ja yksityiskohtaisen tilan seurannan;
- Upstart — käytetty joissain vanhemmissa jakeluissa (sijainti systemd:lle on vähentänyt sen käyttöä);
- launchd — macOS:n ja FreeBSD:n vastaava palvelunhallinta;
- SMF (Service Management Facility) — Solaris-järjestelmissä.
Nykyisin palveluiden käynnistystä ja hallintaa tehdään usein komentoihin kuten systemctl start/stop/status (systemd) tai jakelukohtaisiin työkaluihin liittyen.
Kuinka ohjelma tehdään daemoniksi ("daemonize")?
Daemonin muuttamisessa taustaprosessiksi tehdään yleensä muutama vakioaskel, jotta prosessi on oikein erotettu käyttäjäterminaalista ja voi toimia itsenäisesti. Tavallisia vaiheita:
- forkataan prosessi ja vanhempiprosessin sulkeminen, jotta lapsiprosessi jatkaa itsenäisesti;
- käynnistetään uusi sessio setsid() komennolla, jolloin prosessi menettää kontrolliterminaalin;
- vaihdetaan työhakemisto esim. juureen (/) estämään mount-pisteiden estymistä;
- asetetaan sopiva umask oletusunimia varten;
- suljetaan ei-tarvittavat tiedostokuvaukset (stdin/stdout/stderr) ja yleensä ohjataan lokiin tai /dev/null;
- kirjoitetaan prosessin tunnus (PID) tiedostoon (esim. /var/run/ohjelma.pid), jotta hallintaskriptit voivat löytää prosessin.
Huom. monissa nykyaikaisissa järjestelmissä on suositeltavaa olla ei itse "daemonizoimassa" prosessia, vaan jättää sen palvelunhallintajärjestelmän (kuten systemd) tehtäväksi, koska nämä järjestelmät tarjoavat paremmat valvonta- ja uudelleenkäynnistysominaisuudet.
Palvelunhallinta käytännössä
Daemonien hallintaan liittyvät yleiset toiminnot:
- Käynnistys ja pysäytys: esimerkiksi systemctl start httpd tai perinteisesti service sshd start;
- Tila ja lokit: systemctl status näyttää tilan, ja lokit löytyvät usein journalctl (systemd) tai /var/log-hakemiston kautta;
- Konfiguraation uudelleenlataus: monia daemon-prosesseja ohjataan signaaleilla (esimerkiksi SIGHUP pyytää usein konfiguraation uudelleenlatausta);
- Valvonta ja uudelleenkäynnistys: järjestelmänvalvojan kannattaa määritellä automaattinen uudelleenkäynnistysvastaus kaatumiseen (esim. systemd:n Restart= -asetus).
Yleisiä esimerkkejä
- sshd — SSH-palvelin, käsittelee etäyhteyksiä;
- httpd tai apache2 — web-palvelin;
- crond — ajoitetut tehtävät (cron);
- syslogd / rsyslogd — järjestelmälokit;
- named — DNS-palvelin (BIND).
Turvallisuus ja parhaat käytännöt
Daemonien turvallisuus on keskeistä, koska ne usein kuuntelevat palveluja verkossa ja toimivat jatkuvasti.
- Käytä vähintään mahdollisia oikeuksia: aja prosessi ei-käyttäjän (unprivileged) tilassa, ellei root-oikeuksia välttämättä tarvita.
- Harkitse chroot-ympäristöjä, Linux-kontteja tai sandbox-tekniikoita rajataksesi haittoja.
- Pidä ohjelmisto päivitettynä ja seuraa lokitiedostoja epäilyttävän toiminnan varalta.
- Vältä tarpeetonta tiedostojärjestelmän tai verkkoresurssien käyttöä ja käytä TLS/SSH ym. suojattuja protokollia etäyhteyksiin.
Vastaavuus muissa käyttöjärjestelmissä
Vaikka termi daemon on peräisin Unix-maailmasta, muilla käyttöjärjestelmillä on vastaavat taustapalvelut:
- Windowsissa käytetään termiä service (Windows Service), jota hallitaan mm. Services-sovelluksella tai sc-komennolla;
- macOS:ssa ja FreeBSD:ssä vastaavat palvelut voidaan hallita launchd-järjestelmällä.
Lyhyt etymologia
Sana daemon tulee kreikan daimon-sanasta ja viittaa välittäjään tai henkeen — Unix-historioitsijat ovat kertoneet, että sana valittiin kuvaamaan taustatehtäviä, jotka hoitavat järjestelmän töitä hiljaa "kulissien takana". Unix-ympäristössä nimi on vakiintunut ja näkyy usein palvelinnimissä d-loppuisena.
Helpot tarkistukset ja komennot
Jos haluat nopeasti tarkistaa, millaisia daemon-prosesseja järjestelmässäsi on, yleisiä työkaluja ovat:
- ps aux | grep palvelunimi — listaa prosesseja;
- systemctl status palvelu — systemd-järjestelmissä palvelun tila ja lokit;
- journalctl -u palvelu — palvelukohtaiset journal-lokit (systemd).
Yhteenvetona: daemonit ovat taustapalveluita, joilla on keskeinen rooli monissa käyttöjärjestelmissä. Niiden oikea käynnistys, valvonta ja turvallinen konfigurointi ovat osa järjestelmän vakautta ja turvallisuutta.
Aiheeseen liittyvät sivut
Kysymyksiä ja vastauksia
K: Mikä on daemon tietokoneohjelmistossa?
A: Daemon on tietokoneohjelma, joka toimii taustatehtävänä Unixissa ja muissa monitehtäväisissä käyttöjärjestelmissä.
K: Miten daemon lausutaan?
V: Daemon voidaan lausua /ˈdiːmən/ tai /ˈdeɪmən/.
K: Millaisia tehtäviä monet daemonit suorittavat?
V: Monet daemonit suorittavat tehtäviä, kuten järjestelmälokin, verkkopyyntöjen tai saapuvien SSH-yhteyksien käsittelyä.
K: Mikä on esimerkki daemonista, joka käsittelee järjestelmälokia?
V: Esimerkki järjestelmälokia käsittelevästä daemonista on syslogd.
K: Mikä on esimerkki daemonista, joka käsittelee verkkopyyntöjä?
V: Esimerkki web-pyyntöjä käsittelevästä daemonista on httpd.
K: Mikä on esimerkki daemonista, joka huolehtii saapuvista SSH-yhteyksistä?
V: Esimerkki daemonista, joka huolehtii saapuvista SSH-yhteyksistä, on sshd.
K: Mikä on monien daemonien nimeämiskäytäntö?
V: Monien daemonien nimet päättyvät kirjaimeen "d".
Etsiä