Differences

This shows you the differences between two versions of the page.

Link to this comparison view

gsr:laboratoare:laborator-02 [2016/10/12 15:42]
alexandru.carp
gsr:laboratoare:laborator-02 [2016/10/20 21:05] (current)
alexandru.carp [b) Reguli de jurnalizare]
Line 1: Line 1:
 ====== Laborator 02: Servicii sistem și server basics ====== ====== Laborator 02: Servicii sistem și server basics ======
  
-/* +===== 01. Investigarea dinamică a unui proces =====
- +
-===== Demo ===== +
- +
-TODO +
- +
-===== Exerciții ===== +
- +
-===== 06. Investigarea dinamică a unui proces =====+
  
 ==== a) strace ==== ==== a) strace ====
Line 74: Line 66:
 </​code>​ </​code>​
  
-==== Demonizarea proceselor ====+===== 02. Demonizarea proceselor ​=====
  
-=== Procese detașate de terminal ===+==== a) Procese detașate de terminal ​====
  
 Sunt cazuri în care dorim să pornim procese detașate de terminal. Adică după pornirea procesului să închidem terminalul și procesul să nu fie "​omorât"​ ci să își încheie execuția. Aceste procese sunt echivalente unor procese daemon. Sunt cazuri în care dorim să pornim procese detașate de terminal. Adică după pornirea procesului să închidem terminalul și procesul să nu fie "​omorât"​ ci să își încheie execuția. Aceste procese sunt echivalente unor procese daemon.
Line 82: Line 74:
 Pentru a detașa un proces de un terminal se folosesc comenzi precum ''​nohup'',​ ''​dtach''​ și ''​disown''​. Pentru a detașa un proces de un terminal se folosesc comenzi precum ''​nohup'',​ ''​dtach''​ și ''​disown''​.
  
-Folosiți comanda ''​wget''​ pentru a descărca fișierul ''​.torrent''​ de [[http://​cdimage.debian.org/​debian-cd/​8.2.0/i386/​bt-cd/​debian-mac-8.2.0-i386-netinst.iso.torrent|aici]].+Folosiți comanda ''​wget''​ pentru a descărca fișierul ''​.torrent''​ de [[http://​cdimage.debian.org/​debian-cd/​8.6.0/amd64/​bt-cd/​debian-8.6.0-amd64-netinst.iso.torrent|aici]].
  
-=== disown ===+==== b) disown ​====
  
 Porniți un proces ''​BitTorrent''​ folosind comanda:<​code>​ Porniți un proces ''​BitTorrent''​ folosind comanda:<​code>​
Line 103: Line 95:
 Apoi încheiați execuția acelui proces. Apoi încheiați execuția acelui proces.
  
-=== nohup ===+==== c) nohup ====
  
 Folosiți comanda ''​nohup''​ pentru a crea un proces BitTorrent precum cel de mai sus, detașat de terminal. Închideți terminalul. Investigați prezența procesului în alt terminal. Folosiți comanda ''​lsof''​ pentru a vedea ce folosește procesul pe post de standard input, standard output și standard error. Folosiți comanda ''​nohup''​ pentru a crea un proces BitTorrent precum cel de mai sus, detașat de terminal. Închideți terminalul. Investigați prezența procesului în alt terminal. Folosiți comanda ''​lsof''​ pentru a vedea ce folosește procesul pe post de standard input, standard output și standard error.
  
 Trimiteți un semnal procesului pentru a-i încheia execuția și apoi reporniți-l sub ''​nohup''​ astfel încât ieșirea standard (//standard output//, //stdout//) să fie redirectată la ''/​dev/​null''​ iar ieșirea de eroare standard (//standard error//, //stderr//) să fie redirectată în fișierul ''​err.log''​. Investigați cu ''​lsof''​ unde pointează descriptorii standard ai procesului. Trimiteți un semnal procesului pentru a-i încheia execuția și apoi reporniți-l sub ''​nohup''​ astfel încât ieșirea standard (//standard output//, //stdout//) să fie redirectată la ''/​dev/​null''​ iar ieșirea de eroare standard (//standard error//, //stderr//) să fie redirectată în fișierul ''​err.log''​. Investigați cu ''​lsof''​ unde pointează descriptorii standard ai procesului.
 +
 +===== 03. Serviciul cron =====
 +
 +==== a) Demo: Inspectarea configurației cron ====
 +
 +/*
 +<​note>​
 +Pentru task-urile de ''​cron'',​ folositi masina virtuala din ''/​mnt/​sda5/​gsr/''​
 +</​note>​
 +*/
 +
 +Pentru a vedea configurația ''​cron''​ a sistemului inspectăm configurațiile din fișierele/​directoarele ''/​etc/​cron*''​. Fișierele ''/​etc/​cron.d/​*''​ și fișierul ''/​etc/​crontab''​ conțin configurații standard ''​cron''​ la nivelul sistemului. Liniile de configurare urmează sintaxa crontab așa cum este exemplificată [[http://​techie-experience.blogspot.ro/​2012/​10/​crontab.html|aici]].
 +
 +Pentru a vedea configurația pentru utilizatorul curent folosim comanda<​code>​
 +crontab -l
 +</​code>​
 +
 +Dacă suntem autentificați ca utilizator privilegiat,​ putem vizualiza configurația ''​cron''​ pentru un utilizator dat putem folosi comanda<​code>​
 +crontab -u <​username>​ -l
 +</​code>​
 +unde ''<​username>''​ este numele utilizatorului a cărui configurație dorim să o afișăm.
 +
 +Pentru a afla job-urile cron active per utilizator putem inspecta, ca utilizator privilegiat,​ directorul de spooling ''/​var/​spool/​cron/''<​code>​
 +sudo tree /​var/​spool/​cron/​
 +</​code>​
 +
 +În subdirectorul ''/​var/​spool/​cron/​crontabs/''​ se găsesc job-urile cron active (marcate per utilizator).
 +
 +==== b) Configurare cron cu standard output ====
 +
 +Dacă dorim să avem un job care să ruleze periodic vom crea o intrare în crontab-ul utilizatorului ''​root''​.
 +
 +Următorul exercițiu este didactic, ca să putem urmări comportamentul ''​cron''​.
 +
 +Comanda de mai jos este folosită pentru a afișa numărul de procese și thread-uri curente la nivelul sistemului:<​code>​
 +/bin/echo "Num processes: $(ps -e --no-header | wc -l), num threads: $(ps -eL --no-header | wc -l)"
 +</​code>​
 +
 +Folosim calea completă către comanda ''​echo''​ pentru că nu știm cum arată variabila ''​PATH''​ în mediul în care rulează ''​cron''​.
 +
 +Adăugați comanda de mai sus să ruleze la fiecare două minute prin alterarea crontab-ului utilizatorului ''​root''​. După adăugare urmăriți spool-ul cron în ''/​var/​spool/​cron/​crontabs/​root''​.
 +
 +În urma funcționării corecte, veți vedea o intrare in ''/​var/​log/​syslog''​ care arata ca a fost executata comanda.
 +
 +<note tip>
 +Dupa ce configurati regulile de cron, restartati serviciul ''​cron''​.
 +</​note>​
 +
 +<note tip>
 +Pentru crearea intrării în crontab-ul utilizatorului ''​root''​ urmăriți indicațiile de [[http://​techie-experience.blogspot.ro/​2012/​10/​crontab.html|aici]].
 +</​note>​
 +
 +==== c) Alte configurări cron ====
 +
 +Actualizați comanda din ''​cron''​ de mai sus astfel încât output-ul comenzii să fie adăugat într-un fișier dat. Output-ul să conțină și data la care a fost rulată comanda.
 +
 +Instalați pachetul ''​debsums''​. Urmăriți ce configurări de cron sunt adăugate la instalarea pachetului.
 +
 +<note tip>
 +Urmăriți conținutului unui pachet instalat folosind comanda<​code>​
 +dpkg -L <​nume-pachet>​
 +</​code>​
 +unde ''<​nume-pachet>''​ este numele pachetului.
 +</​note>​
 +
 +==== d) Configurare serviciu cron de pornire client Bittorrent ====
 +
 +Instalați un client de Bittorrent care funcționează în linia de comandă, precum ''​transmission-cli''​ sau ''​bittorrent''​ sau ''​bittornado''​ și porniți-l în background (folosind ''​nohup''​) ca să descarce un anumit conținut Bittorrent. Găsiți un fișier ''​.torrrent''​ pe Internet și descărcați-l.
 +
 +Apoi creați un script care să verifice dacă este pornit clientul Bittorrent pentru acel fișier ''​.torrent''​ și dacă nu este pornit să-l repornească.
 +
 +Plasați script-ul în crontab cu verificare la 10 minute.
 +
 +==== e) Gestionare client de BitTorrent folosind supervisord ====
 +
 +Folosiți [[http://​supervisord.org/​|supervisord]] pentru a porni și gestiona clientul BitTorrent de mai sus.
 +
 +<note tip>
 +Urmăriți exemplele de configurare din link-urile de mai jos:
 +  * https://​www.digitalocean.com/​community/​tutorials/​how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps
 +  * https://​serversforhackers.com/​monitoring-processes-with-supervisord
 +</​note>​
 +
 +===== 04. Serviciul NTP =====
 +
 +==== a) Funcționarea NTP ====
 +
 +Pentru a verifica funcționarea NTP (//Network Time Protocol//) o soluție este instalarea utilitarului ''​ntpdate''​. Dacă nu-l aveți instalat, instalați-l folosind comanda<​code>​
 +sudo apt-get install ntpdate
 +</​code>​
 +
 +Aveți două utilitare pe care le puteți folosi interschimbabil pentru actualizarea timpului sistemului: ''​ntpdate''​ care primește ca argument un server NTP, și ''​nptdate-debian''​ care folosește serverele configurate în ''/​etc/​default/​ntpdate''​ (directiva ''​NTPSERVERS''​).
 +
 +==== b) Configurare server NTP. Sincronizare sisteme ====
 +
 +Instalați, dacă nu este instalat serverul ''​NTP''​ prin intermediul pachetului ''​ntp''​. Serverul va porni automat și veți putea verifica faptul că ascultă conexiuni pe portul ''​123''​ UDP folosind comanda<​code>​
 +sudo netstat -ulpn
 +</​code>​
 +
 +Discutați cu 2-3 colegi și aflați adrese IP stațiilor pe care aceștia lucrează și adăugați configurare pentru serverul NTP în fișierul ''/​etc/​ntp.conf''​. După un timp se va crea un mesh de comunicare între serverele NTP din sala de laborator.
 +
 +<note tip>
 +Pentru a investiga la orice moment informații despre funcționarea serverului NTP și peer-ii cu care acesta comunică puteți folosi una dintre comenzile de mai jos<​code>​
 +ntpq -p
 +ntpq -pn
 +</​code>​
 +</​note>​
 +
 +<note tip>
 +Informații despre configurarea NTP găsiți în link-urile de mai jos:
 +  * http://​www.debianadmin.com/​ntp-server-and-client-configuration-in-debian.html
 +  * http://​www.tecmint.com/​install-and-configure-ntp-server-client-in-debian/​
 +</​note>​
 +
 +===== 05. Jurnalizare =====
 +
 +==== a) Investigare configuratie syslog ====
 +
 +Pe mașina virtulă verificați dacă daemonul de syslog este instalat (Hint: rsyslog).
 +<​code>​
 +root@heimdall:​~#​ apt-get install rsyslog
 +Reading package lists... Done
 +Building dependency tree       
 +Reading state information... Done
 +rsyslog is already the newest version.
 +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
 +</​code>​
 +
 +==== b) Reguli de jurnalizare ====
 +
 +Adaugati în ''/​etc/​rsyslog.conf''​ o intrare prin care TOATE mesajele din sistem sa fie înregistrate în ''/​var/​log/​all_logs''​
 +<​code>​
 +root@heimdall:​~#​ tail -n 1 /​etc/​rsyslog.conf
 +*.* -/​var/​log/​all_logs
 +
 +Se adauga un minus (-) pentru a se evita sincronizarea fisierului dupa fiecare mesaj syslog (fiind vorba despre toate mesajele din sistem).
 +</​code>​
 +
 +Creati fisierul ''/​var/​log/​all_logs'',​ apoi configurati owner-ul ca fiind user-ul sub care ruleaza ''​rsyslog'':​
 +<​code>​
 +# touch /​var/​log/​all_logs
 +# chown syslog:adm /​var/​log/​all_logs
 +</​code>​
 +
 +Reporniți daemonul ''​rsyslog''​ și verificați conținutul fișierului ''/​var/​log/​all_logs''​.
 +<​code>​
 +root@heimdall:​~#​ /​etc/​init.d/​rsyslog restart
 +Stopping enhanced syslogd: rsyslogd.
 +Starting enhanced syslogd: rsyslogd.
 +
 +root@heimdall:​~#​ tail /​var/​log/​all_logs ​
 +Nov  9 15:34:04 heimdall kernel: imklog 5.8.5, log source = /proc/kmsg started.
 +Nov  9 15:34:04 heimdall rsyslogd: [origin software="​rsyslogd"​ swVersion="​5.8.5"​ x-pid="​2604"​ x-info="​http://​www.rsyslog.com"​] start
 +</​code>​
 +
 +==== c) Generate mesaje cu logger ====
 +
 +Folosind comanda ''​logger'',​ generați 5 mesaje de log cu facilitatea mail și cu proritatea info, care să conțină textele "mail log 1" ... "mail log 5". Verificați prezența mesajelor în ''/​var/​log/​all_logs''​.
 +<​code>​
 +root@heimdall:​~#​ logger -p mail.info "mail log 1"
 +
 +root@heimdall:​~#​ logger -p mail.info "mail log 2"
 +
 +root@heimdall:​~#​ logger -p mail.info "mail log 3"
 +
 +root@heimdall:​~#​ logger -p mail.info "mail log 4"
 +
 +root@heimdall:​~#​ logger -p mail.info "mail log 5"
 +
 +root@heimdall:​~#​ tail /​var/​log/​all_logs ​
 +Nov  9 15:34:04 heimdall kernel: imklog 5.8.5, log source = /proc/kmsg started.
 +Nov  9 15:34:04 heimdall rsyslogd: [origin software="​rsyslogd"​ swVersion="​5.8.5"​ x-pid="​2604"​ x-info="​http://​www.rsyslog.com"​] start
 +Nov  9 15:36:55 heimdall root: mail log 1
 +Nov  9 15:36:57 heimdall root: mail log 2
 +Nov  9 15:36:58 heimdall root: mail log 3
 +Nov  9 15:36:59 heimdall root: mail log 4
 +Nov  9 15:37:00 heimdall root: mail log 5
 +</​code>​
 +
 +==== d) Rotirea fisierelor de log ====
 +
 +Modificați ''/​etc/​logrotate.conf''​ astfel încat fisierul ''/​var/​log/​all_logs''​ să fie rotit zilnic, folosind până la maxim 10 fișiere, fișire care să fie comprimate. Logurile trebuie să fie trimiste pe email la sysadmin@gsr.cs.pub.ro. (Hint: ''​man logrotate''​)
 +<​code>​
 +root@heimdall:​~#​ tail -n 8 /​etc/​logrotate.conf
 +/​var/​log/​all_logs {
 + missingok
 + daily
 + create 0660 root utmp
 + compress
 + rotate 10
 + mail sysadmin@gsr.cs.pub.ro
 +}
 +</​code>​
 +/*
  
 ==== Conectarea pe SSH la mașina virtuală ==== ==== Conectarea pe SSH la mașina virtuală ====
gsr/laboratoare/laborator-02.1476276122.txt.gz · Last modified: 2016/10/12 15:42 by alexandru.carp
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0