This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
linux-admin:capitole:capitol-17 [2016/10/13 18:18] mihaic |
linux-admin:capitole:capitol-17 [2016/10/13 18:38] (current) mihaic [[8] Configurații de rețea (cont.) (1.5p)] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== 17. Bune practici ====== | ====== 17. Bune practici ====== | ||
- | TODO | + | ==== Slide-uri ==== |
- | ===== Subiecte abordate ===== | + | [[http://koala.cs.pub.ro/training/res/linux-admin/slides/cap-17.pdf|Slide-uri capitol 17]] |
- | * TODO | + | <html> |
- | * TODO | + | <center> |
- | * TODO | + | <iframe src="http://docs.google.com/viewer?url=http://koala.cs.pub.ro/training/res/linux-admin/slides/cap-17.pdf&embedded=true" width="600" height="470" style="border: none;"></iframe> |
+ | </center> | ||
+ | </html> | ||
- | ==== Utilitare folosite ==== | + | ===== Exerciții ===== |
- | * TODO | + | ===== [1] Structură de directoare ===== |
- | * TODO | + | |
- | * TODO | + | |
- | ==== Bune practici ==== | + | Creați următoarea structură de directoare și de fișiere, denumite exact ca mai jos (în ''/home/training''): |
- | * TODO | + | <note> |
- | * TODO | + | În listing-ul de mai jos numele care se încheie cu ''/'' (//slash//) sunt nume de directoare. Numele care **nu** se încheie cu ''/'' (//slash//) sunt nume de fișiere obișnuite. |
- | * TODO | + | </note> |
- | ===== Resurse utile ===== | + | * ''seriale/'' (director). Acesta va conține fișierele: |
+ | * ''suits'' | ||
+ | * ''grey's anatomy'' | ||
+ | * ''dr. who'' | ||
+ | * ''downton abbey'' | ||
+ | * ''house md'' | ||
+ | * ''carti/'' (director). Acesta va conține următoarele directoare: | ||
+ | * ''rusia/'' | ||
+ | * ''dostoievski'' | ||
+ | * ''tolstoi'' | ||
+ | * ''marea britanie/'' | ||
+ | * ''shakespeare'' | ||
+ | * ''charles dickens'' | ||
+ | * ''joanne k rowling/'' | ||
+ | * ''john ronald reuel tolkien'' | ||
+ | * ''franta/'' | ||
+ | * ''balzac'' | ||
+ | * ''jean de la fontaine'' | ||
- | * TODO | + | <note warning>Verificarea la acest exercițiu se face arătând trainerului **o singură comandă**, pentru directoarele ''seriale'' și ''carti''.</note> |
- | * TODO | + | |
- | ==== Slide-uri ==== | + | ===== [2] Utilizatori și permisiuni ===== |
- | [[http://koala.cs.pub.ro/training/res/linux-admin/slides/cap-17.pdf|Slide-uri capitol 17]] | + | * Adăugați în sistem utilizatorii: ''harry'', ''meredith'', ''wilson'', ''gandalf'', ''vladimir''. Toți utilizatorii vor avea parola ''training''. |
+ | * Configurați permisiunile asupra directorului ''rusia'' astfel încât utilizatorul ''vladimir'' are drepturi depline și restul utilizatorilor (inclusiv grupul ce deține fișierul) nu au niciun drept. | ||
+ | * Configurați permisiunile astfel încât utilizatorul ''harry'' are drepturi depline asupra directorului ''joanne k rowling'' și ''gandalf'' are doar drepturi de citire (și de navigare în interiorul directorului, adică drept de execuție). Ceilalți nu au nici un drept asupra directorului. | ||
- | <html> | ||
- | <center> | ||
- | <iframe src="http://docs.google.com/viewer?url=http://koala.cs.pub.ro/training/res/linux-admin/slides/cap-17.pdf&embedded=true" width="600" height="470" style="border: none;"></iframe> | ||
- | </center> | ||
- | </html> | ||
- | ===== Exerciții ===== | + | ===== [3] Utilizatori și procese ===== |
+ | |||
+ | Scrieți un script care pentru un anumit nume de utilizator (exemplificați pe ''training'') afișează următoarele informații: | ||
+ | * home directory-ul lui | ||
+ | * identificatorul utilizatorului (UID) | ||
+ | * Dacă utilizatorul există în sistem: afișează procesele deținute de acesta și următoarele informații despre acestea: PID, PPID, CPU load, MEM load și comanda care a pornit procesul respectiv. | ||
+ | * Sortează procesele după câtă memorie au ocupat. | ||
+ | * Trimite semnalul ''SIGINT'' procesului care consumă cea mai multă memorie. | ||
+ | |||
+ | <note Indicații> | ||
+ | Încercați să prelucrați conținutul fișierului ''/etc/passwd'' pentru primele 2 subpuncte. Apoi înlănțuiți rezultatul prelucrării, folosind un anumit operator Bash cu o comandă ''ps''. | ||
+ | Pentru primele 2 bullet-uri puteți folosi și separat comenzile ''id'', respectiv ''finger''. | ||
+ | |||
+ | Deși ''htop'' este tool-ul cel mai potrivit pentru ultimele 2 bullet-uri, nu îl putem folosi decât în mod interactiv. Așa că avem nevoie de ''ps'' și să filtrăm output-ul comenzii, să folosim opțiunea ''%%--sort%%'' pentru sortare după coloanei de MEM load pentru a determina PID-ul procesului care consumă cele mai multe resurse. | ||
+ | </note> | ||
+ | |||
+ | ===== [4] Servicii de rețea ===== | ||
+ | |||
+ | * Instalați în sistem serverul web ''apache2'', apoi porniți daemon-ul aferent serviciului web ''apache2''. După ce serviciul e pornit, determinați pe ce port ascultă conexiuni serviciul web ''apache2''. | ||
+ | * Scanați ce porturi sunt deschise pe serverul ''rosedu.org''. | ||
+ | |||
+ | <note Indicații generale> | ||
+ | Când nu știți cum se numește un pachet, dar știți aproximativ ce cuvinte cheie conține numele pachetului sau descrierea lui folosiți comanda ''apt-cache search <pattern>'' | ||
+ | |||
+ | Orice daemon/serviciu se pornește folosind fie comanda ''service'':<code> | ||
+ | service <nume_serviciu> start | ||
+ | service <nume_serviciu> restart | ||
+ | service <nume_serviciu> stop | ||
+ | </code> sau folosind scriptul său aferent din ''/etc/init.d'':<code> | ||
+ | /etc/init.d/<nume_serviciu> {start|stop|restart} | ||
+ | </code> Aveți nevoie de drepturi privilegiate pentru a rula comanda. | ||
+ | |||
+ | Pentru a afișa informații despre serviciile locale (inclusiv porturile pe care acestea ascultă conexiuni). Folosiți opțiunile pentru afișarea PID-ului și a numelui procesului și pentru afișarea doar serviciilor care ascultă (//listen//) conexiuni în rețea. | ||
+ | |||
+ | Pentru a scana porturile deschise de un server la distanță folosiți comanda ''nmap'' cu opțiunile aferente. | ||
+ | </note> | ||
+ | |||
+ | ===== [5] Montare de sisteme de fișiere ===== | ||
+ | |||
+ | * Creați un folder ''/mnt/dummy'' | ||
+ | * Creați un fișier care are doar octeți de zero de 100 MB numit ''zero100M.dat''. Creați un sistem de fișiere ''ext3'' peste fișierul ''zero100M.dat'' folosind comanda ''mkfs.ext3''. | ||
+ | * Montați un sistem de fișiere de tip ''ext3'' în ''/mnt/dummy'' | ||
+ | |||
+ | <note> | ||
+ | Pentru montarea unui sistem de fișiere aflat pe un fișier (în cazul de față ''zero100M.dat'') folosiți opțiunea ''-o loop'' la comanda ''mount''. | ||
+ | </note> | ||
+ | |||
+ | |||
+ | ===== [6] Logging ===== | ||
+ | |||
+ | * Verificați dacă daemonul de ''syslog'' este instalat | ||
+ | * Configurați sistemul astfel încât TOATE mesajele din sistem sa fie înregistrate în ''/var/log/all_logs''. Verificați acest lucru. | ||
+ | |||
+ | <note Indicație> | ||
+ | în ''/etc/rsyslog.conf'' e nevoie de o intrare. Apoi serviciul/daemonul syslog trebuie repornit. Pentru a verifica faptul că mesajele se salvează în ''/var/log/all_logs'' puteți genera mesaje folosing comanda ''logger''. | ||
+ | </note> | ||
+ | * Configurați sistemul astfel încât fisierul ''/var/log/all_logs'' să fie rotit zilnic, folosind până la maxim 20 de fișiere, care ulterior să fie comprimate. | ||
+ | <note Indicație> | ||
+ | Configurația se face în ''/etc/logrotate.conf'', ''man logrotate'' pentru exemple | ||
+ | </note> | ||
+ | |||
+ | |||
+ | ===== [7] System info at startup ===== | ||
+ | |||
+ | Realizați configurațiile necesare astfel încât de fiecare dată când deschide terminalul, utilizatorul training să fie întâmpinat de mesajul:''Hello, training! Here are some statistics: data, our IP is $IP_ADDR, sysuptime, disk load''. Adresa IP va fi cea a interfeței ''eth0''. | ||
+ | |||
+ | În loc de ''data'' veți afișa data și ora sub forma: ''12-01-2015,21:17:59''. | ||
+ | |||
+ | În loc de ''sysuptime'' veți afișa informații despre când a avut loc ultimul boot (de cât timp este sistemul up), load average și câți useri sunt în prezent (si care) logați în sistem. Variabila ''$IP_ADDR'' va fi reținută în variabilă de mediu accesibilă oricărui proces și oricărui terminal! | ||
- | ==== Demo-uri ==== | + | În loc de ''diskload'' veți afișa informații despre primele 3 partiții care sunt cele mai încărcate, plus tipul sistemului de fișiere, ca spațiu ocupat. |
- | TODO | + | <note> |
+ | Configurațiile se fac în fișierul ''/etc/bash.bashrc'' | ||
- | TODO | + | <code bash> |
+ | training@uso:~$ cat /etc/bash.bashrc | ||
+ | (...) | ||
+ | export IP_ADDR=$(ifconfig eth0 | grep inet | tr -s ' ' | head -n 1 | awk -F '[ :]+' ' { print $4 }') | ||
+ | date +%d-%m-%Y,%H:%M:%S | ||
+ | echo $(uptime) | ||
+ | echo $(who) | ||
+ | df -hT | tr -s ' ' | sort -t ' ' -k 3n -r | tail -n +2 | head -n 3 | ||
+ | (...) | ||
+ | </code> | ||
+ | </note> | ||
- | ==== TODO: Exercițiu 1 ==== | + | ===== [8] Configurații de rețea (cont.) ===== |
- | TODO | + | * **(1p)** Configurați static lookup table astfel încât să nu fie necesară interogarea DNS pentru adresele: ''swarm.cs.pub.ro'', ''elf.cs.pub.ro'', ''ocw.cs.pub.ro'' |
+ | * Primul pas este să determinați adresa IP pentru cele trei servere | ||
- | ==== TODO: Exercițiu 2 ==== | + | ===== [9] Mass user add script ===== |
- | TODO | + | Descărcați spreasheet-ul [[https://docs.google.com/spreadsheets/d/1z448_KQaH1h-Yqp0thEYKTnuCywPEhJGk0I649UWJLU/edit?usp=sharing|de aici]] în format CSV. Folosiți '','' ca separator. Pe baza CSV-ului realizați un script care: |
+ | * afișează studenții sortați alfabetic | ||
+ | * adaugă în sistem grupurile ce poartă numele facultății din care fac parte studenții | ||
+ | * adaugă în sistem utilizatorii sub forma ''prenume.nume'' și îi adaugă în grup conform facultății la care sunt studenți | ||
+ | * adaugă (neinteractiv) parola ''training'' pentru toți utilizatorii. | ||
+ | * Nu puteți folosi ''adduser'' în script |