This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
linux-admin:capitole:capitol-14 [2016/06/06 18:24] 127.0.0.1 external edit |
linux-admin:capitole:capitol-14 [2016/10/12 19:52] (current) mihaic |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== 14. Gestiunea serviciilor ====== | ====== 14. Gestiunea serviciilor ====== | ||
- | TODO | + | 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 ===== | ===== Subiecte abordate ===== | ||
- | * TODO | + | * Managementul serviciilor |
- | * TODO | + | * Menținerea timpului sistemului |
- | * TODO | + | * Menținearea jurnalelor sistemului |
==== Utilitare folosite ==== | ==== Utilitare folosite ==== | ||
- | * TODO | + | * /etc/init.d/ |
- | * TODO | + | * update-rc.d |
- | * TODO | + | * sysv-rc-conf |
+ | * /etc/xinet.d/* | ||
+ | * netstat | ||
+ | * syslog.conf | ||
+ | * syslogd | ||
+ | * klogd | ||
+ | * logger | ||
+ | * journalctl | ||
+ | * /etc/systemd/journald.conf | ||
+ | * /var/log/journal | ||
+ | * rsyslog and syslog-ng | ||
- | ==== Bune practici ==== | ||
- | * TODO | + | ===== Exerciții ===== |
- | * TODO | + | |
- | * TODO | + | |
- | ===== Resurse utile ===== | + | ==== Demo-uri Servicii ==== |
- | * TODO | + | * Folosiți comanda {{{netstat}}} pentru afișarea serviciilor de rețea ale sistemului <code> netstat -tlpn </code> |
- | * TODO | + | ** 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 <code> apt-get install apache2 </code> | ||
+ | ** Folosiți {{{netstat -tlpn}}} pentru a afla pe ce port ascultă conexiuni serverul ''apache2''. | ||
- | ==== Slide-uri ==== | + | ==== Exercițiu Servicii ==== |
- | [[http://koala.cs.pub.ro/training/res/medium-unix/slides/cap-14.pdf|Slide-uri capitol 14]] | + | # Instalați și configurați {{{sysv-rc-conf}}} pentru a configura runlevel-urile în care rulează serviciul Apache2. |
+ | #* Pentru testare rulați comanda<code> | ||
+ | ls -l /etc/rcX.d/ | grep 'apache2' | ||
+ | </code> unde ''X'' este indicele runlevel-ului configurat folosind ''sysv-rc-conf'' (adică una dintre valorile 1, 2, 3, 4, 5, 6). | ||
+ | # Instalați {{{xinetd}}}. | ||
+ | # Activați în cadrul {{{xinetd}}} suportul pentru serviciul de {{{echo}}} (Hint: {{{/etc/xinetd.d/echo}}}) | ||
+ | #* Pentru verificare reporniți serviciul ''xinetd'' folosind comanda:<code> | ||
+ | sudo service xinetd restart | ||
+ | </code> | ||
+ | #* 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:<code> | ||
+ | pgrep -f xinetd | ||
+ | sudo netstat -tlpn | ||
+ | </code> | ||
+ | #* 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<code> | ||
+ | sudo netstat -tlp | ||
+ | sudo netstat -tlpn | ||
+ | </code> și văzând ca una folosește portul ''7'' cealaltă numele ''echo'' pentru serviciu. | ||
+ | #** rulând comanda<code> | ||
+ | cat /etc/services | grep -w echo | ||
+ | </code> | ||
+ | #** rulând comanda<code> | ||
+ | getent services echo | ||
+ | </code> | ||
+ | #* Ca să testați că serviciul merge, vă conectați la serviciu folosind clientul TCP ''netcat'' în forma de mai jos:<code> | ||
+ | nc localhost 7 | ||
+ | </code> 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''. | ||
+ | # 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ă. | ||
+ | #* Urmăriți [[http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-en-4/s1-tcpwrappers-xinetd-config.html | exemplul de configurație de aici]]. | ||
+ | #* După configurare reporniți serviciul ''xinited'' folosind comanda<code> | ||
+ | sudo service xinetd restart | ||
+ | </code> | ||
+ | #* 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:<code> | ||
+ | pgrep -f xinetd | ||
+ | sudo netstat -tlpn | ||
+ | </code> | ||
+ | #* 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<code> | ||
+ | sudo netstat -tlp | ||
+ | sudo netstat -tlpn | ||
+ | </code> și văzând ca una folosește portul ''23'' cealaltă numele ''telnet'' pentru serviciu. | ||
+ | #** rulând comanda<code> | ||
+ | cat /etc/services | grep -w telnet | ||
+ | </code> | ||
+ | #** rulând comanda<code> | ||
+ | getent services telnet | ||
+ | </code> | ||
+ | #* 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'':<code> | ||
+ | telnet localhost | ||
+ | </code> Î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}}}). | ||
- | <html> | + | ==== Demo Logging ==== |
- | <center> | + | |
- | <iframe src="http://docs.google.com/viewer?url=http://koala.cs.pub.ro/training/res/linux-admin/slides/cap-14.pdf&embedded=true" width="600" height="470" style="border: none;"></iframe> | + | |
- | </center> | + | |
- | </html> | + | |
- | + | ||
- | ===== Exerciții ===== | + | |
- | ==== Demo-uri ==== | + | * Instalati daemonul {{{rsyslog}}}: <code> apt-get install rsyslog </code> |
+ | * Instalati pachetul de documentație aferent: <code> apt-get install rsyslog-doc </code> | ||
+ | * Parcurgeți fișierul de configurare {{{/etc/rsyslog.conf}}} si observati diferite optiuni disponibile <code> vim /etc/rsyslog.conf </code> | ||
+ | * Utilitarul {{{journalctl}}} este utilizat pentru interogarea mesajelor generate de systemd: | ||
+ | #* Pentru a verifica ultimele 50 mesajele:<code> | ||
+ | journalctl -n 50 | ||
+ | </code> | ||
+ | #* Pentru a verifica mesajele cu prioritate critică:<code> | ||
+ | journalctl -p “crit” | ||
+ | </code> | ||
- | TODO | + | ==== Exercițiu Logging ==== |
- | TODO | + | # Ce efect are prezența unui minus ({{{-}}}) în cadrul unei intrări de fișier de tip jurnal în fișierul de configurare? |
+ | #* Hint: http://www.rsyslog.com/doc/rsyslog_conf_actions.html (căutați după cuvântul {{{minus}}}). | ||
+ | # 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<code> | ||
+ | sudo service rsyslog restart | ||
+ | </code> și testați recepționarea de mesaje in fișierul ''/var/log/all_logs'' trimițând mesaje folosind comanda logger, precum<code> | ||
+ | logger -p mail.err "test" | ||
+ | </code> | ||
+ | # 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<code> | ||
+ | logger -p mail.info "mail log 1" | ||
+ | </code> | ||
+ | # Modificați {{{/etc/logrotate.conf}}} astfel încat fisierul {{{/var/log/all_logs}}} să fie rotit zilnic. | ||
+ | # 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<code> | ||
+ | netstat -ulpn | ||
+ | </code> 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<code> | ||
+ | netstat -ulp | ||
+ | netstat -ulpn | ||
+ | </code> sau <code> | ||
+ | grep 'syslog' /etc/services | ||
+ | </code> sau <code> | ||
+ | getent services syslog | ||
+ | </code> | ||
+ | # 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<code> | ||
+ | date +"%Y-%m-%d" | ||
+ | </code> | ||
+ | #* Pentru căutarea fișierelor necesare folosiți o construcție de forma<code> | ||
+ | find /var/log -name "*.err*" | ||
+ | </code> unde ''err'' se poate înlocui cu nivelul de logging necesar. | ||
+ | #* Pentru arhivare/comprimare folosiți comanda<code> | ||
+ | tar -czf $nume-arhiva fisiere-de-arhivat ... | ||
+ | </code> 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<code> | ||
+ | tar -tzf $nume-arhiva | ||
+ | </code> unde ''$nume-arhiva'' este numele fișierului arhivă. | ||
- | ==== TODO: Exercițiu 1 ==== | + | ==== Demo Time ==== |
- | TODO | + | * Pentru a configura timezone-ul corect ({{{Europe/Bucharest}}}) folosiți comanda<code> |
+ | sudo dpkg-reconfigure tzdata | ||
+ | </code> 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<code> | ||
+ | cat /etc/timezone | ||
+ | </code> | ||
+ | * Verificați configurarea corespunzătoare a zonei comparând fișierul de sistem ''/etc/localtime'' cu cel așteptat<code> | ||
+ | diff -s /etc/localtime /usr/share/zoneinfo/$(cat /etc/timezone) | ||
+ | </code> | ||
+ | ** 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<code> | ||
+ | date | ||
+ | </code> | ||
+ | * Afișați data într-un nou format folosind comanda<code> | ||
+ | date +%d/%m/%Y | ||
+ | </code> | ||
- | ==== TODO: Exercițiu 2 ==== | + | ==== Exerciții Time==== |
- | TODO | + | # 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. | ||
+ | # Afișați zilele din luna curentă (Hint: {{{ncal}}}). | ||
+ | # Afișați data Paștelui ortodox (Hint: {{{ncal}}}). | ||
+ | # Afișați data Paștelui ortodox pentru anul 2011. | ||
+ | # Configurați data curentă la valoarea de 1 ianuarie 2011. | ||
+ | # Afișați timpul hardware (Hint: {{{hwclock}}}). | ||
+ | # Configurați data curentă la valoarea dată de timpul hardware. | ||
+ | # Instalați pachetul {{{ntpdate}}}. | ||
+ | #* Verificați în fișierul {{{/etc/default/ntpdate}}} serverele folosite pentru sincronizare folosind NTP. | ||
+ | # Afișați data curentă, inclusiv secundele. | ||
+ | # 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}}}. | ||
+ | #** Puteți folosi un server din [[http://www.pool.ntp.org/zone/ro | pool-ul din România]]. | ||
+ | # Reafișați data curentă, inclusiv secundele. | ||
+ | # 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<code> | ||
+ | vi /usr/sbin/ntpdate-debian | ||
+ | </code> | ||