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.

Tekijä: Leandro Alegsa

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ä
AlegsaOnline.com - 2020 / 2025 - License CC3