inetd

De la Wikipedia, enciclopedia liberă
Salt la: Navigare, căutare

inetd este un super-server daemon pe multe sisteme UNIX. A apărut pentru prima dată în 4.3BSD și se află de regulă în /usr/sbin/inetd.

Funcție[modificare | modificare sursă]

Numit adeseori super-server, inetd monitorizează conexiunile pe un număr de porturi TCP sau UDP des folosite pentru servicii internet precum FTP, POP3, sau telnet. Când sistemul de operare primește un pachet TCP sau UDP pe un anumit port, inetd pornește programul server corespunzător. Pentru serviciile care nu sunt așteptate să genereze trafic prea mare, această metodă de pornire utilizează memoria calculatorului într-un mod mai eficient, întrucât serviciul respectiv este rulat numai dacă este necesar. Mai mult, aplicațiile server nu au nevoie să includă cod de networking, inetd face redirectarea socketului către stdin, stdout și stderr. Pentru protocoale care rulează un trafic de date mare, cum ar fi HTTP și POP3, un server dedicat ar fi mai eficient.

Configurare[modificare | modificare sursă]

Fișierul /etc/services este folosit pentru maparea numărului portului, numele protocolului și numelor serviciilor, în timp ce fișierul /etc/inetd.conf specifică ce program este rulat pentru fiecare serviciu în parte. De exemplu, pentru o conexiune TCP/telnet /etc/services are o intrare

telnet          23/tcp

Linia corespunzătoare în /etc/inetd.conf este

telnet  stream  tcp6    nowait  root    /usr/sbin/telnetd      telnetd -a

Aceasta îi spune lui inetd să pornească programul /usr/sbin/telnetd cu argumentele telnetd -a. inetd redirecționează automat socketul către stdin, stdout și stderr.

În general, un nou proces este pornit pentru fiecare conexiune TCP. Pentru UDP se preferă folosirea aceluiași proces pentru toate pachetele primite de un port dat.

Unele servicii simple precum echo sunt implementate direct de inetd, fără a porni un proces separat.


Crearea unui serviciu inetd[modificare | modificare sursă]

Acesta este un simplu serviciu scris în limbajul de programare C. Programul acceptă un argument pe linia de comandă, acest argument este un fișier în care sunt scrise toate datele care vin pe socket.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  const char *fn = argv[1];
  FILE *fp = fopen(fn, "a+");

  if(fp == NULL) 
    exit(EXIT_FAILURE);

  char str[4096];
  //inetd passes its information to us in stdin.
  while(fgets(str, sizeof(str), stdin)) {
    fputs(str, fp);
    fflush(fp);
  }
  fclose(fp);
  return 0;
}

Programul este compilat sub numele errorLogger. Presupunem că pachetele de date vin pe portul UDP 9999. În /etc/services trebuie să adăugăm

errorLogger 9999/udp

iar în /etc/inetd.conf

errorLogger dgram udp wait root /usr/local/bin/errlogd errlogd /tmp/logfile.txt

Notă: exemplul de mai sus nu are nicio legătură cu funcționalitatea de logging sub UNIX, care este în general implementată de syslog. Acesta rulează în paralel cu inetd și nu este un serviciu inetd.


Variante[modificare | modificare sursă]

Datorită limitărilor de securitate în designul original, inetd este adeseori înlocuit de xinetd, rlinetd, ucspi-tcp și multe altele. Distribuțiile Linux și Mac OS X folosesc implicit xinetd (inetd este de asemenea disponibil).


Legături exterme[modificare | modificare sursă]


 v  d  m  Programe în linia de comandă pentru Unix (mai multe)
Management de fișiere: cat | cd | chmod | chown | chgrp | cksum | cmp | cp | du | df | file | fsck | ln | ls | lsof | mkdir | mount | mv | pwd | rm | rmdir | split | touch
Management de procese: at | chroot | cron | exit | kill | killall | nice | pgrep | pidof | pkill | ps | pstree | sleep | time | top | wait
Management utilizator/mediu: env | finger | id | mesg | passwd | su | sudo | uname | uptime | w | wall | who | whoami | write
Procesare text: awk | comm | cut | ed | ex | fmt | head | iconv | join | less | more | paste | sed | sort | tac | tail | tr | uniq | wc | xargs
Programare Shell: basename | echo | expr | false | printf | test | true | unset Imprimare:
lp
Communicații:
inetd | netstat | ping | rlogin | traceroute
Căutare:
find | grep | strings
Diverse:
banner | bc | cal | dd | man | size | yes