This is an old revision of the document!


Laborator 02: Servicii sistem și server basics

Demo

TODO

Exerciții

06. Investigarea dinamică a unui proces

a) strace

Comanda strace (system call trace) ne este utilă pentru a investiga ce apeluri de sistem efectuează o comandă dată și ce parametri folosește.

De exemplu, dacă dorim să urmărim apelurile de sistem efectuate de comanda ls folosim comanda

strace ls

Output-ul fiind destul de vast, ne preocupă să obținem doar informații despre fișierele deschide. Pentru aceasta folosim opțiunea -e a comenzii strace cu ajutorul căreia filtrăm tipuri de operații. În cazul de față folosim comanda

strace -e file ls

Observăm fișierele deschise.

Pentru a vedea diferența între comenzile ls și ls -l folosim comanda

strace -e file ls -l

Observăm că acum deschise și fișiere precum /etc/passwd și /etc/group pentru a determina username-ul și grupul aferent UID-ului și GID-ului din fișier.

b) Informații despre rețea

Comanda

netstat -s

afișează informații statistice despre pachetele sistemului. Ne interesează să știm de unde obține comanda respectivă informațiile.

Rulați comanda

strace -e open netstat -s

pentru a afla ce fișiere deschide comanda la rulare.

Care fișier este citit pentru a afla informații despre pachetele primite (packets received)? Vizualizați acel fișier (luați-o pe încercate).

c) Atașarea la un proces

strace permite investigarea unui proces aflat deja în rulare. Numim acest lucru atașarea la un proces. Putem astfel investiga apelurile de sistem efectuate de un proces aflat în rulare și diagnostica anumite probleme ale acestuia. Pentru a ne putea atașa la un proces avem nevoie de PID-ul acestuia.

Deschideți două tab-uri de terminal (adică să aveți două deschise; dacă aveți deja unul mai deschideți încă unul).

Pentru a deschide un tab nou de terminal în GNOME Terminal puteți folosi combinația de taste Ctrl+Shift+t.

Într-unul dintre tab-uri aflați PID-ul procesului curent (a shell-ului) folosind comanda

echo $$

Pentru a investiga shell-ul, din celălalt tab folosim comanda

strace -p <PID>

unde <PID> este PID-ul shell-ului determinat mai sus.

Acum dacă în celălalt shell rulăm comenzi vom vedea ce se întâmplă în cadrul shell-ului.

Observăm că se folosește apelul de sistem clone pentru a crea un nou proces, dar nu apare apelul de sistem execve care înlocuiește imaginea de proces. Pentru a vedea aceste apeluri de sistem trebuie să precizăm comenzii strace să investigheze și procesele copil folosind opțiunea -f (de la follow children). Astfel, vom putea investiga folosind comanda

strace -f -p <PID>

Dacă dorim să vedem doar operațiile cu procese și fișiere, de exemplu, vom folosi pentru investigație comanda

strace -f -e process,file -p <PID>

Demonizarea proceselor

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.

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 aici.

disown

Porniți un proces BitTorrent folosind comanda:

btdownloadheadless lin-prog.torrent

Dacă nu aveți btdownloadheadless instalat pe sistem instalați pachetul bittorrent

sudo apt-get install bittorrent

sau pachetul bittornado

sudo apt-get install bittornado

Transferați procesul pornit în starea de rulare în background. Detașați procesul de terminal folosind comanda disown. Î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.

Apoi încheiați execuția acelui proces.

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.

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.

Conectarea pe SSH la mașina virtuală

Setup

Pentru acest exercițiu porniți în VirtualBox mașina virtuală.

Pentru pornirea acesteia deschideți VirtualBox, apoi folosiți File → Import Appliance și navigați în /mnt/sda5/uso/lab07/puccini-lab7.ova de unde să importați mașina virtuală.

Mașina virtuală are pentru acces contul student cu parola student și este conectabilă la sistemul fizic pe interfața sa eth1. Ar trebui ca pe interfața eth1 a mașinii virtuale sa aveți o adresă din rețeaua 192.168.56.0/24, de obicei 192.168.56.101.

Interfața pereche a interfeței eth1 de pe mașina virtuală este interfața vboxnet0 pe sistemul fizic. Aceasta are adresa 192.168.56.1.

Conectare prin SSH între mașina virtuală și sistemul fizic

Încercați acum să vă conectați prin SSH de pe mașina virtuală pe sistemul fizic folosind comanda ssh folosind o comandă de forma

ssh student@192.168.56.1

Parola este student.

Acum încercați și invers, să vă conectați de la sistemul fizic la mașina virtuală. Veți întâmpina diverse tipuri de probleme. Rezolvați-le.

Apoi configurați autentificarea fără parolă (pe bază de chei) de la utilizatorul student de pe sistemul fizic la utilizatorul student și la utilizatorul root de pe mașina virtuală. Va trebui să ajungă cheia publică a utilizatorului student de pe sistemul fizic în fișierul ~/.ssh/authorized_keys din directorul home al utilizatorilor student și root pe mașina virtuală.

Dacă simțiți că “scârțâiți”, pentru documentare despre folosirea SSH recomandăm să urmariți laboratorul 8 de RL: Securizarea unui server.

Adăugarea cheii asistentului pentru conectare la mașina virtuală

Obiectivul acestui exercițiu este ca asistentul să ajungă pe mașina voastră virtuală de pe laptop-ul său. Pentru aceasta trebuie să faceți două lucruri:

  1. Să adăugați cheia publică a asistentului (vă va da el link la cheie) în contul utilizatorului student de pe mașina virtuală.
  2. Să folosiți DNAT (port forwarding) pe sistemul fizic astfel încât conexiunile pe portul 2222 pe sistemul fizic să ajungă pe portul 22 pe mașina virtuală.

Pentru pasul 2, pe sistemul fizic folosiți o comandă de forma

sudo iptables -t nat -A PREROUTING -i ethX -p tcp --dport 2222 -j DNAT --to-destination <IP-vm>:22
sudo sysctl -w net.ipv4.ip_forward=1

unde:

  • ethX este eth0 sau eth1 sau eth2 este interfața de Internet a sistemului fizic, cu o adresă din spațiul 172.16.4.0/22
  • <IP-vm> este adresa IP a mașinii virtuale (adresa din rețeaua 192.168.56.0/24

Iar pe mașina virtuală rulați comanda de mai jos pentru a crea o rută din mașina virtuală către rețeaua fizică

sudo ip route add 172.16.4.0/22 via 192.168.56.1

Cu această rută veți permite pachetelor să se întoarcă din mașina virtuală către cheia SSH a asistentului.

Asistentul va încerca conexiunea la adresa IP a sistemului vostru fizic pe portul 2222 și, dacă e totul bine, va ajunge pe mașina voastră virtuală.

Dacă simțiți că scârțâiți legat de NAT/DNAR, informații despre folosirea iptables pentru DNAT găsiți în laboratorul 9 de RL: Translatarea de adrese.

Dacă greșiți ceva în configurarea iptables, curățați regulile folosind comanda

sudo iptables -t nat -F

Folosirea logger pentru generarea de mesaje de logging

TODO

Configurare remote logging pentru SSH

Configurați daemon-ul syslog de pe mașina virtuală să livreze mesajele de jurnalizare emise de SSH (de facilitatea auth) către daemonul de syslog de pe sistemul fizic. Adică daemonul de syslog de pe sistemul fizic va fi listener pentru mesajele livrate de pe mașina virtuală.

Realizați conexiuni SSH de pe mașina fizică spre mașina virtuală pentru a declanșa mesaje de jurnalizare.

Bonus: Conectare cu X Forwarding

Realizați o conexiune SSH care folosește X Forwarding de la sistemul fizic la mașina virtuală. Porniți utilitarul xterm. Instalați orice pachete sunt necesare pentru a permite rularea utilitarului xterm.

Bonus: Pornirea manuală a sshd

Porniți manual, pe mașina virtuală, folosind executabilul /usr/sbin/sshd ca să asculte conexiuni pe portul 22. Încercați conexiuni către server de pe sistemul fizic.

Rulați serverul de SSH sub strace (eventual folosind opțiunea -f) și urmăriți ce se întâmplă atunci când se încearcă noi conexiuni.

gsr/laboratoare/laborator-02.1476276015.txt.gz · Last modified: 2016/10/12 15:40 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