User Tools

Site Tools


linux-admin:capitole:capitol-14

14. Gestiunea serviciilor

Serviciile sunt acele procese pornite la inițializarea sistemului ce nu au un terminal de intrare/ieșire. De obicei parintele lor este init. Este important să știm cum să le controlăm și modul în care vedem erorile generate de acestea.

Subiecte abordate

  • Managementul serviciilor
  • Menținerea timpului sistemului
  • Menținearea jurnalelor sistemului

Utilitare folosite

  • /etc/init.d/
  • update-rc.d
  • sysv-rc-conf
  • /etc/xinet.d/*
  • netstat
  • syslog.conf
  • syslogd
  • klogd
  • logger
  • journalctl
  • /etc/systemd/journald.conf
  • /var/log/journal
  • rsyslog and syslog-ng

Exerciții

Demo-uri Servicii

  • Folosiți comanda netstat pentru afișarea serviciilor de rețea ale sistemului
     netstat -tlpn 
    • Verificati in manual functionalitatea fiecarui argument.
  • Opriți, porniți și reporniți serviciul SSH, folosind /etc/init.d/cups și argumentele respectiv, start, stop, restart.
  • Instalați serverul web Apache2, folosind
     apt-get install apache2 
    • Folosiți netstat -tlpn pentru a afla pe ce port ascultă conexiuni serverul apache2.

Exercițiu Servicii

  1. Instalați și configurați sysv-rc-conf pentru a configura runlevel-urile în care rulează serviciul Apache2.
    • Pentru testare rulați comanda
      ls -l /etc/rcX.d/ | grep 'apache2'

      unde X este indicele runlevel-ului configurat folosind sysv-rc-conf (adică una dintre valorile 1, 2, 3, 4, 5, 6).

  2. Instalați xinetd.
  3. Activați în cadrul xinetd suportul pentru serviciul de echo (Hint: /etc/xinetd.d/echo)
    • Pentru verificare reporniți serviciul xinetd folosind comanda:
      sudo service xinetd restart
    • Dacă ați configurat totul cum trebuie, ar trebui ca serviciul local echo să ruleze și să asculte conexiuni. Puteți verifica folosind comenzi de forma:
      pgrep -f xinetd
      sudo netstat -tlpn
    • Comanda netstat vă va afișa că serviciul xinetd ascultă conexiuni pe portul 7, portul aferent serviciului echo. Puteți verifica maparea portului 7 la serviciul echo în următoarele moduri:
      • rulând comenzile
        sudo netstat -tlp
        sudo netstat -tlpn

        și văzând ca una folosește portul 7 cealaltă numele echo pentru serviciu.

      • rulând comanda
        cat /etc/services | grep -w echo
      • rulând comanda
        getent services echo
    • Ca să testați că serviciul merge, vă conectați la serviciu folosind clientul TCP netcat în forma de mai jos:
      nc localhost 7

      adică vă conectați pe sistemul local pe portul 7.

      • În continuare orice șir veți da va fi retransmis identic (echo – ecou) de server.
      • Ca să închideți conexiunea netcat dată de comanda de mai sus folosiți combinația de taste Ctrl+c.
  4. Activați în cadrul xinetd suportul pentru serviciul de telnet.
    • Instalați pachetul telnetd.
    • Folosiți dpkg -L telnetd pentru a localiza calea către executabilul aferent serviciului.
    • Creați fișierul /etc/xinetd.d/telnet dacă nu există.
    • După configurare reporniți serviciul xinited folosind comanda
      sudo service xinetd restart
    • Dacă ați configurat totul cum trebuie, ar trebui ca serviciul local telnet să ruleze și să asculte conexiuni. Puteți verifica folosind comenzi de forma:
      pgrep -f xinetd
      sudo netstat -tlpn
    • Comanda netstat vă va afișa că serviciul xinetd ascultă conexiuni pe portul 23, portul aferent serviciului telnet. Puteți verifica maparea portului 7 la serviciul echo în următoarele moduri:
      • rulând comenzile
        sudo netstat -tlp
        sudo netstat -tlpn

        și văzând ca una folosește portul 23 cealaltă numele telnet pentru serviciu.

      • rulând comanda
        cat /etc/services | grep -w telnet
      • rulând comanda
        getent services telnet
    • Serviciul telnet este un serviciu de conexiune la distanță necriptat. Nu este recomandat pentru conexiuni în afara rețelei locale, și poate nici atunci. Pentru a testa serviciul telnet, folosiți clientul telnet:
      telnet localhost

      În caz de succes veți primi un prompt de autentificare unde vă veți autentifica folosind username student și parolă student și apoi veți obține un prompt.

      • De la prompt și de la conexiunea telnet vă puteți deconecta folosind comanda exit sau combinația de taste Ctrl+d.
      • În caz de probleme cu conexiunea telnet puteți folosi combinația de taster Ctrl+] urmată de apăsarea tastei q și apoi de ENTER pentru a închide conexiunea.
    • În caz de probleme consultați fișierele de jurnalizare (/var/log/syslog).

Demo Logging

  • Instalati daemonul rsyslog:
     apt-get install rsyslog 
  • Instalati pachetul de documentație aferent:
     apt-get install rsyslog-doc 
  • Parcurgeți fișierul de configurare /etc/rsyslog.conf si observati diferite optiuni disponibile
     vim /etc/rsyslog.conf 
  • Utilitarul journalctl este utilizat pentru interogarea mesajelor generate de systemd:
    • Pentru a verifica ultimele 50 mesajele:
      journalctl -n 50
    • Pentru a verifica mesajele cu prioritate critică:
      journalctl -p “crit”

Exercițiu Logging

  1. Ce efect are prezența unui minus (-) în cadrul unei intrări de fișier de tip jurnal în fișierul de configurare?
  2. Adaugati în /etc/rsyslog.conf o intrare prin care TOATE mesajele din sistem sa fie înregistrate în /var/log/all_logs
    • Important: Nu creați fișierul de mână, îl va crea daemon-ul rsyslog la nevoie.
    • Pentru verificare reporniți daemonul rsyslog folosind comanda
      sudo service rsyslog restart

      și testați recepționarea de mesaje in fișierul /var/log/all_logs trimițând mesaje folosind comanda logger, precum

      logger -p mail.err "test"
  3. Folosind comanda logger, generați 5 mesaje de mail cu proritatea info, care să conțină textele "mail log 1" … "mail log 5", adică ceva de forma
    logger -p mail.info "mail log 1"
  4. Modificați /etc/logrotate.conf astfel încat fisierul /var/log/all_logs să fie rotit zilnic.
  5. Configurați rsyslog pentru a asculta conexiuni în rețea.
    • Urmăriți directivele de configurare secțiunea MODULES din /etc/rsyslog.conf.
    • Pentru a verifica faptul că serverul rsyslog ascultă conexiuni și pe UDP vom lista serviciile care ascultă conexiuni pe UDP folosind comanda
      netstat -ulpn

      Dacă e configurat cum trebuie, comanda de mai sus va afișa și numele serviciului rsyslog.

      • Portul pe care ascultă conexiuni este portul 514, lucru verificabil și prin rularea comenzilor
        netstat -ulp
        netstat -ulpn

        sau

        grep 'syslog' /etc/services

        sau

        getent services syslog
  6. Realizați un script care ia din /var/log toate fișierele de logging de un anumit nivel, primit ca argument (err, warn, debug, info și log), indiferent de facilitate, și le arhivează într-un fișier cu numele [NIVEL]_[DATA_CURENTA].tar.gz.
    • Pentru obținerea datei folosiți o construcție de forma
      date +"%Y-%m-%d"
    • Pentru căutarea fișierelor necesare folosiți o construcție de forma
      find /var/log -name "*.err*"

      unde err se poate înlocui cu nivelul de logging necesar.

    • Pentru arhivare/comprimare folosiți comanda
      tar -czf $nume-arhiva fisiere-de-arhivat ...

      unde $nume-arhiva este numele fișierului arhivă, iar fisiere-de-arhivat … reprezintă lista de fișiere de arhivat. Poate fi vorba de output-ul comenzii find.

    • Dacă fișierul arhivă deja există la începutul rulării scriptului, ștergeți-l.
    • Este nevoie să rulați comanda ca root pentru că aveți nevoie de privilegii pentru a lucra în directorul /var/log.
    • Pentru verificare, listați conținutul arhivei folosind comanda
      tar -tzf $nume-arhiva

      unde $nume-arhiva este numele fișierului arhivă.

Demo Time

  • Pentru a configura timezone-ul corect (Europe/Bucharest) folosiți comanda
    sudo dpkg-reconfigure tzdata

    Este posibil să aveți configurația realizată corect. Dacă nu, realizați-o acum.

  • Folosiți fișierul /etc/timezone pentru afișarea timezone-ului curent folosind comanda
    cat /etc/timezone
  • Verificați configurarea corespunzătoare a zonei comparând fișierul de sistem /etc/localtime cu cel așteptat
    diff -s /etc/localtime /usr/share/zoneinfo/$(cat /etc/timezone)
    • Dacă sunt identice, deci configurația este corectă, se va afișa un mesaj de forma "Files ... are identical.".
  • Verificați timpul curent folosind comanda
    date
  • Afișați data într-un nou format folosind comanda
    date +%d/%m/%Y

Exerciții Time

  1. Afișați data curentă în următoarele formate:
    • numărul de secunde începând cu epoca Unix (1 ianuarie 1970).
    • ziua și luna curentă în format numeric, separate prin minus.
  2. Afișați zilele din luna curentă (Hint: ncal).
  3. Afișați data Paștelui ortodox (Hint: ncal).
  4. Afișați data Paștelui ortodox pentru anul 2011.
  5. Configurați data curentă la valoarea de 1 ianuarie 2011.
  6. Afișați timpul hardware (Hint: hwclock).
  7. Configurați data curentă la valoarea dată de timpul hardware.
  8. Instalați pachetul ntpdate.
    • Verificați în fișierul /etc/default/ntpdate serverele folosite pentru sincronizare folosind NTP.
  9. Afișați data curentă, inclusiv secundele.
  10. Folosiți ntpdate pentru sincronizarea la unul dintre serverele menționate în cadrul fișierului de mai sus.
    • Trebuie să transmiteți numele serverului ca argument comenzii ntpdate.
  11. Reafișați data curentă, inclusiv secundele.
  12. Dacă doriți să configurați permanent servere NTP care să fie consultate, puteți scrie numele serverelor în fișierul /etc/ntp.conf și să activați optiunea necesară în fișierul /etc/default/ntpdate.
    • După aceasta rulați, fără argumente, comanda ntpdate-debian care va consulta serverele din /etc/ntp.conf.
    • Comanda ntpdate nu consultă fișiere de configurare. Pentru aceasta folosim comanda ntpdate-debian.
      • Comanda ntpdate-debian este un script shell (wrapper) peste ntpdate. Puteți urmări conținutul ei prin intermediul comenzii
        vi /usr/sbin/ntpdate-debian
linux-admin/capitole/capitol-14.txt · Last modified: 2016/10/12 19:52 by mihaic