Gestiunea Serviciilor de Rețea

Laborator 05 - Interacțiunea cu nucleul. Gestiunea proceselor și serviciilor

IMPORTANT Dacă un pachet nu este instalat iar un exercițiu face referire la acesta, instalați-l.

1. Interacțiunea cu nucleul Linux (1,5p)

  • Comenzi/concepte/fișiere
    • /proc

Tutorial

  • N/A

Exerciții

  • [01]. Folosind doar informații accesibile din directorul /proc, afișați:
  • [01].a. date despre procesorul sistemului fizic
Rezolvare
root@mjolnir:~# cat /proc/cpuinfo 
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 23
model name	: Intel(R) Core(TM)2 Duo CPU     E7600  @ 3.06GHz
stepping	: 10
cpu MHz		: 1596.000
cache size	: 3072 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 2
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dts tpr_shadow vnmi flexpriority
bogomips	: 6117.66
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 23
model name	: Intel(R) Core(TM)2 Duo CPU     E7600  @ 3.06GHz
stepping	: 10
cpu MHz		: 1596.000
cache size	: 3072 KB
physical id	: 0
siblings	: 2
core id		: 1
cpu cores	: 2
apicid		: 1
initial apicid	: 1
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dts tpr_shadow vnmi flexpriority
bogomips	: 6117.92
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 48 bits virtual
power management:
  • [01].b. sistemele de fișiere pentru care nucleul oferă suport
Rezolvare
root@mjolnir:~# cat /proc/filesystems 
nodev	sysfs
nodev	rootfs
nodev	bdev
nodev	proc
nodev	cgroup
nodev	cpuset
nodev	tmpfs
nodev	devtmpfs
nodev	debugfs
nodev	securityfs
nodev	sockfs
nodev	pipefs
nodev	anon_inodefs
nodev	devpts
nodev	ramfs
nodev	hugetlbfs
nodev	pstore
nodev	mqueue
nodev	usbfs
	ext4
nodev	rpc_pipefs
nodev	nfs
nodev	nfs4
nodev	nfsd
nodev	fuse
	fuseblk
nodev	fusectl
nodev	binfmt_misc
	ext3
nodev	aufs
nodev	vmblock
  • [01].c. modulele de kernel încărcate în mod curent
Rezolvare
root@mjolnir:~# cat /proc/modules 
vmnet 42906 13 - Live 0xffffffffa04ee000 (O)
vmblock 14234 1 - Live 0xffffffffa04dd000 (O)
vsock 42521 0 - Live 0xffffffffa04e2000 (O)
vmci 49555 1 vsock, Live 0xffffffffa04cf000 (O)
vmmon 70671 0 - Live 0xffffffffa04b6000 (O)
ipt_REJECT 12502 4 - Live 0xffffffffa04b1000
xt_tcpudp 12570 1 - Live 0xffffffffa04ac000
iptable_filter 12536 1 - Live 0xffffffffa0478000
ip_tables 22131 1 iptable_filter, Live 0xffffffffa04a5000
[...]
  • [02]. Rulați comanda ps și aflați pid-ul sesiunii de bash curente. Afișați aceeași informație folosind variabila $$.
Rezolvare
root@mjolnir:~# ps | grep bash
 2750 pts/0    00:00:00 bash
  • [03]. Analizând conținutul directorului /proc/$PID (unde $PID a fost identificat anterior), aflați imaginea de executabil folosită pentru crearea procesului $PID (Hint: ls -l)
Rezolvare
root@mjolnir:~# ls -l /proc/2750 | grep exe
lrwxrwxrwx 1 root root 0 Nov  9 13:29 exe -> /bin/bash
  • [04]. Analizați conținutul directorului /proc/$PID/fd și aflați unde sunt redirectate mesajele de pe stderr pentru sesiunea de bash curentă (Hint: stderr are fd=2, ls -l)
Rezolvare
root@mjolnir:~# ls -l /proc/2750/fd/2
lrwx------ 1 root root 64 Nov  9 13:27 /proc/2750/fd/2 -> /dev/pts/0
  • [05]. Aflați doar pid-ul procesului cupsd (Hint: man ps, /all processes, grep sau man pidof)
Rezolvare
root@mjolnir:~# ps -A | grep cupsd$ | tr -s " " | cut -d " " -f 2
1375

root@mjolnir:~# pidof cupsd
1375
  • [06]. Analizând conținutul /proc, aflați unde sunt redirectate mesajele de pe stdout și stderr pentru cupsd (Hint: stdout are fd=1, ls -l)
Rezolvare
root@mjolnir:~# ls -l /proc/1375/fd/1
l-wx------ 1 root root 64 Nov  9 13:32 /proc/1375/fd/1 -> /dev/null

root@mjolnir:~# ls -l /proc/1375/fd/2
l-wx------ 1 root root 64 Nov  9 13:32 /proc/1375/fd/2 -> /dev/null

2. Module de kernel (1,5p)

  • Comenzi/concepte/fișiere
    • modinfo
    • lsmod
    • insmod
    • modprobe
    • rmmod
    • /etc/modules
    • /etc/modprobe.d

Tutorial

  • N/A

Exerciții

ATENȚIE . Acest set de exerciții se desfășoară în mașina virtuală.

  • [01]. Afișați toate modulele de kernel încarcate în mod curent (Hint: man lsmod)
Rezolvare
root@heimdall:~# lsmod
Module                  Size  Used by
nfsd                  197906  2 
nfs                   218412  0 
lockd                  61314  2 nfsd,nfs
fscache                31952  1 nfs
auth_rpcgss            32183  2 nfsd,nfs
nfs_acl                12463  2 nfsd,nfs
sunrpc                139050  6 nfsd,nfs,lockd,auth_rpcgss,nfs_acl
loop                   17866  0 
vmw_balloon            12549  0 
parport_pc             22059  0 
parport                27241  1 parport_pc
evdev                  12995  2 
snd_pcm                53315  0 
snd_timer              22027  1 snd_pcm
psmouse                46216  0 
snd                    38562  2 snd_pcm,snd_timer
soundcore              12992  1 snd
snd_page_alloc         12899  1 snd_pcm
serio_raw              12734  0 
pcspkr                 12515  0 
[...]
  • [02]. Configurați sistemul astfel încât modulul de kernel pcspkr să nu mai fie încărcat la bootare. Testați configurația realizată repornind mașina virtuală. (Hint: /etc/modprobe.d/blacklist.conf)
Rezolvare
root@heimdall:~# cat /etc/modprobe.d/blacklist.conf | tail -n 1
blacklist pcspkr
  • [03]. Descărcați și încărcați modulul floppy folosind doar comenzile insmod și rmmod (Hint: insmod primeste ca argument fișierul .ko, pe care il puteți găsi folosind modinfo)
Rezolvare
root@heimdall:~# modinfo floppy
filename:       /lib/modules/3.0.0-1-686-pae/kernel/drivers/block/floppy.ko
alias:          block-major-2-*
license:        GPL
author:         Alain L. Knaff
alias:          acpi*:PNP0700:*
alias:          pnp:dPNP0700*
depends:        
intree:         Y
vermagic:       3.0.0-1-686-pae SMP mod_unload modversions 686 
parm:           floppy:charp
parm:           FLOPPY_IRQ:int
parm:           FLOPPY_DMA:int

root@heimdall:~# rmmod floppy

root@heimdall:~# insmod /lib/modules/3.0.0-1-686-pae/kernel/drivers/block/floppy.ko
  • [03]. Curățați buffer-ul de mesaje al dmesg (Hint: man dmesg)
Rezolvare
root@heimdall:~# dmesg -c > /dev/null

root@heimdall:~# dmesg
  • [04]. Descărcați modulul de kernel soundcore (Hint: va trebui să rezolvați dependențele).
Rezolvare
root@heimdall:~# rmmod soundcore
ERROR: Module soundcore is in use by snd

root@heimdall:~# lsmod | grep snd
snd_pcsp               13421  0 
snd_pcm                53315  1 snd_pcsp
snd_timer              22027  1 snd_pcm
snd                    38562  3 snd_pcsp,snd_pcm,snd_timer
soundcore              12992  1 snd
snd_page_alloc         12899  1 snd_pcm

root@heimdall:~# rmmod snd_pcsp

root@heimdall:~# rmmod snd_pcm

root@heimdall:~# rmmod snd_timer

root@heimdall:~# rmmod snd

root@heimdall:~# rmmod soundcore
  • [05]. Încărcați din nou modulele floppy și snd_pcsp, folosind modprobe.
Rezolvare
root@heimdall:~# modprobe floppy

root@heimdall:~# modprobe soundcore
  • [06]. Analizând output-ul dmesg, identificați mesajul salvat de snd_pcsp atunci când a fost încărcat în kernel
Rezolvare
root@heimdall:~# dmesg
[  410.132849] input: PC Speaker as /devices/platform/pcspkr/input/input4

3. Bootloader (2p)

  • Comenzi/concepte/fișiere
    • meniul de GRUB
    • /boot/grub/menu.lst
    • /boot/grub/grub.cfg
    • /etc/default/grub

Tutorial

  • [01]. Intrați în directorul /boot/grub și afișați drepturile de acces asupra grub.cfg. Ce utilizator poate scrie date în acest fișier ?
Rezolvare
root@heimdall:~# cd /boot/grub/

root@heimdall:/boot/grub# ls -l grub.cfg 
-r--r--r-- 1 root root 2897 Oct 18 18:42 grub.cfg
  • [02]. GRUB2 folosește un mecanism automat de generare a fișierului de configurare. În cadrul acestui mecanism, utilizatorul poate realiza două tipuri de configurări:
  • [02].a. configurări generale (/etc/default/grub)
  • [02].b. configurări specifice unei intrări din meniu (/etc/grub.d/). În cadrul acestui director, intrările statice (adăugate de utilizator) se pun în fișierul 40_custom.
  • [02].c. după realizarea oricăror modificări, grub.cfg poate fi regenerat folsind comanda update-grub
  • [03]. Un exemplu de intrare de meniu GRUB2 specificată în 40_custom este:
root@pisr:/etc/grub.d# cat 40_custom 
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os {
	insmod part_msdos
	insmod ntfs
	set root='(hd0,msdos1)'
	search --no-floppy --fs-uuid --set=root A452BEAD52BE8418
	chainloader +1
}

Exerciții

ATENȚIE . Acest set de exerciții se desfășoară în mașina virtuală.

  • [01]. Presupunem că nu știți parola contului de root de pe mașina virtuală. Efectuați pass recovery și schimbați această parolă în “z0z0m0m0”. Pași ajutători:
  • [01].a. La repornirea sistemului apare meniul de GRUB
Rezolvare
Se apasă ESC pentru a opti timer-ul ce activează opțiunea implicită din meniu.
  • [01].b. Editați intrarea implicită din acest meniu (Hint: urmăriți mesajele din partea de jos a meniului GRUB)
Rezolvare
Se apasă tasta "e".
  • [01].c. Specificați montarea sistemului de fișiere de pe partiția radăcină în mod rw în loc de ro
Rezolvare
Pe linia care începe cu "linux ..." se schimbă "ro" în "rw".
  • [01].d. Adăugați o mențiune care să specifice imaginea de executabil din care va fi pornit procesul init (Hint: “init=/path/to/my/file”, file=bash). Mențiunea trebuie adăugată pe aceeași linie cu rw.
Rezolvare
Pe linia care începe cu "linux ..." se adaugă la final "init=/bin/bash".
  • [01].e. Bootați sistemul de operare cu intratea modificată din meniu (Hint: urmăriți mesajele din partea de jos a meniului GRUB) și modificați parola contului root.
Rezolvare
Se apasă CTRL+x.

Parola se schimbă folosind passwd.
  • [01].f. Rebootați sistemul de operare și verificați noua parolă
Rezolvare
Reboot-ul se realizează din interfața mașinii virtuale.
  • [02]. Adăugați o nouă intrare în meniul de GRUB care să conțină următoarele elemente:
  • [02].a. menuentry "My Grub Entry"
  • [02].b. insmod gzio, insmod part_msdos și insmod ext2
  • [02].c. set root='(hd0,msdos1)'
  • [02].d. search --no-floppy --fs-uuid --set=root e0cf91a4-39b9-45a6-a401-7f88e69c8b65
  • [02].e. linux /boot/vmlinuz-3.0.0-1-686-pae root=UUID=e0cf91a4-39b9-45a6-a401-7f88e69c8b65 ro quiet
  • [02].f. initrd /boot/initrd.img-3.0.0-1-686-pae
Rezolvare
menuentry 'My Grub Entry' {
	insmod gzio
	insmod part_msdos
	insmod ext2
	set root='(hd0,msdos1)'
	search --no-floppy --fs-uuid --set=root e0cf91a4-39b9-45a6-a401-7f88e69c8b65
	linux	/boot/vmlinuz-3.0.0-1-686-pae root=UUID=e0cf91a4-39b9-45a6-a401-7f88e69c8b65 ro  quiet
	initrd	/boot/initrd.img-3.0.0-1-686-pae
}

4. init (2p)

  • Comenzi/concepte/fișiere
    • runlevel
    • init
    • telinit
    • /etc/inittab

Tutorial

  • N/A

Exerciții

ATENȚIE . Acest set de exerciții se desfășoară în mașina virtuală.

  • [01]. Afișați numărul runlevel-ului curent.
Rezolvare
root@heimdall:~# runlevel
N 2
  • [02]. Schimbați runlevel-ul default în care intră sistemul de operare în 5 (Hint: /etc/inittab). Nu reporniți încă sistemul.
Rezolvare
root@heimdall:~# cat /etc/inittab | head -n 5
# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $

# The default runlevel.
id:5:initdefault:
  • [03]. Scoateți serverul de ssh din noul runlevel default modificând fișierele din /etc/rcX.d (unde X este numărul runlevel-ului). La trecerea în runlevel 5 trebuie ca serverul de ssh trebuie să fie oprit în cazul în care acesta rula.
Rezolvare
root@heimdall:~# cd /etc/rc5.d/

root@heimdall:/etc/rc5.d# ls -l
total 4
-rw-r--r-- 1 root root 677 Jul 13 22:41 README
lrwxrwxrwx 1 root root  17 Oct 18 18:24 S16rpcbind -> ../init.d/rpcbind
lrwxrwxrwx 1 root root  20 Oct 18 18:24 S17nfs-common -> ../init.d/nfs-common
lrwxrwxrwx 1 root root  17 Oct 18 18:24 S19rsyslog -> ../init.d/rsyslog
lrwxrwxrwx 1 root root  15 Oct 18 18:24 S20acpid -> ../init.d/acpid
lrwxrwxrwx 1 root root  13 Oct 18 18:24 S20atd -> ../init.d/atd
lrwxrwxrwx 1 root root  14 Oct 18 18:24 S20cron -> ../init.d/cron
lrwxrwxrwx 1 root root  14 Oct 18 18:44 S20dbus -> ../init.d/dbus
lrwxrwxrwx 1 root root  15 Oct 18 18:24 S20exim4 -> ../init.d/exim4
lrwxrwxrwx 1 root root  21 Oct 18 18:24 S20mpt-statusd -> ../init.d/mpt-statusd
lrwxrwxrwx 1 root root  13 Oct 18 18:25 S20ssh -> ../init.d/ssh
lrwxrwxrwx 1 root root  22 Oct 18 18:52 S21avahi-daemon -> ../init.d/avahi-daemon
lrwxrwxrwx 1 root root  18 Oct 18 18:24 S22bootlogs -> ../init.d/bootlogs
lrwxrwxrwx 1 root root  18 Oct 18 18:24 S23rc.local -> ../init.d/rc.local
lrwxrwxrwx 1 root root  19 Oct 18 18:24 S23rmnologin -> ../init.d/rmnologin
lrwxrwxrwx 1 root root  23 Oct 18 18:24 S23stop-bootlogd -> ../init.d/stop-bootlogd

root@heimdall:/etc/rc5.d# mv S20ssh K80ssh
  • [04]. Configurați sistemul astfel încât la apăsarea combinației de taste CTRL+ALT+DEL să se treacă în runlevel-ul 5. Setarea trebuie să se aplice pentru runlevel-urile 1,2,3,4,5. Pentru testare folosiți interfața VMWare a mașinii virtuale.
Rezolvare
root@heimdall:~# whereis telinit
telinit: /sbin/telinit /usr/share/man/man8/telinit.8.gz

root@heimdall:~# cat /etc/inittab | head -n 33 | tail -n 2
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/telinit 5
  • [04].a. Rulați comanda init q pentru a forța recitirea fișierului inittab
Rezolvare
root@heimdall:~# init q
  • [04].b. Testați funcționarea combinației de taste. Pentru testare folosiți interfața VMWare a mașinii virtuale.
Rezolvare
<CTRL>+<ALT>+<DEL>
  • [04].c. După trecerea la noul runlevel verificați funcționarea serverului de ssh folosind comanda netstat -lntp. De ce serverul SSH funcționează în continuare?
Rezolvare
root@heimdall:/etc/rc5.d# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2200/sshd       
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1345/exim4      
tcp        0      0 0.0.0.0:57090           0.0.0.0:*               LISTEN      778/rpc.statd   
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      763/rpcbind     
tcp6       0      0 :::22                   :::*                    LISTEN      2200/sshd       
tcp6       0      0 ::1:25                  :::*                    LISTEN      1345/exim4      
tcp6       0      0 :::43910                :::*                    LISTEN      778/rpc.statd   
tcp6       0      0 :::111                  :::*                    LISTEN      763/rpcbind      
Rezolvare
De ce serverul SSH ruleaza in continuare:

Observam ca avem niste fisiere de dependente in /etc/init.d:
- .depend.boot
- .depend.start - acesta include serviciul de ssh
- .depend.stop - acesta nu include serviciul de ssh

Din cauza absentei dependetelor (de fapt target-ului) din .depend.stop, Debian-ul nu stie la schimbarea runlevel-ului de posibilitatea inchiderii serviciului de ssh si din aceasta cauza ignora fisierul Kxxssh din /etc/rc5.d/:
TARGETS = urandom exim4 atd sendsigs rsyslog umountnfs.sh portmap nfs-common
hwclock.sh networking ifupdown umountfs umountroot halt reboot

Pentru a adauga dependentele corespunzatoare, putem folosi update-rc.d care in spate apeleaza de fapt insserv. Chiar pagina de manual a insserv precizeaza "insserv - Enable an installed system init script".
  • [05]. Instalați utilitarul sysv-rc-conf
Rezolvare
root@heimdall:~# apt-get install sysv-rc-conf
  • [06]. Afisați cu sysv-rc-conf doar serviciile asociate runlevel-ului 2, în ordinea priorității (Hint: man sysv-rc-conf, /order, /alternate, /show)
Rezolvare
root@heimdall:~# sysv-rc-conf -o p -s 2 -p
  • [07]. Folosind scriptul /etc/init.d/ssh, porniți și apoi opriți serverul de SSH. (Hint: start, stop). De ce, o dată cu oprirea serverului de SSH, nu au fost intrerupte și conexiunie SSH active ?
Rezolvare
root@heimdall:~# /etc/init.d/ssh stop
Stopping OpenBSD Secure Shell server: sshd.

root@heimdall:~# /etc/init.d/ssh start
Starting OpenBSD Secure Shell server: sshd.
  • [08]. [Bonus] Scrieți un one-liner care afișează scripturile de inițializare care aparțin runlevel-ului curent.
Rezolvare
root@heimdall:~# ls /etc/rc$(runlevel | cut -d ' ' -f 2).d
K20ssh	       S19rsyslog  S20dbus	    S22bootlogs
README	       S20acpid    S20exim4	    S23rc.local
S16rpcbind     S20atd	   S20mpt-statusd   S23rmnologin
S17nfs-common  S20cron	   S21avahi-daemon  S23stop-bootlogd

5. Procese si daemoni (2p)

  • Comenzi/concepte/fișiere
    • ps
    • pstree
    • pgrep
    • top/htop
    • &, CTRL+Z, fg, bg, jobs
    • kill

Tutorial

  • [01]. Deschideți un nou terminal.
  • [02]. Din acest terminal porniți o instanță de xterm, rulând comanda xterm
  • [02].a. În acest moment fereastra de xterm este activă, putând scrie comenzi în ea
  • [02].b. Fereastra terminalului pornit mai devreme este și ea activă, dar nu pot fi scrise comenzi
  • [03]. În terminal apăsați CTRL+z.
  • [03].a. În acest moment fereastra de xterm este inactivă, nu pot fi scrise comenzi în ea
  • [03].b. Fereastra terminalului pornit mai devreme este activă, se pot scrie comenzi în ea
  • [04]. În terminal rulați jobs
  • [05]. În terminal rulați fg 1
  • [05].a. În acest moment fereastra de xterm este activă, putând scrie comenzi în ea
  • [05].b. Fereastra terminalului pornit mai devreme este și ea activă, dar nu pot fi scrise comenzi
  • [06]. În terminal apăsați CTRL+z
  • [07]. În terminal rulați jobs
  • [08]. În terminal rulați bg 1
  • [08].a. În acest moment fereastra de xterm este activă, putând scrie comenzi în ea
  • [08].b. Fereastra terminalului pornit mai devreme este și ea activă, putând scrie comenzi în ea
  • [09]. Ieșiți din xterm, tastând exit
  • [10]. Din terminal porniți o altă instanță de xterm, rulând comanda xterm &. Ce observați?

Exerciții

  • [01]. Afișați lista proceselor pornite de utilizatorul curent. Afișați apoi lista proceselor pornite de toți utilizatorii. (Hint: man ps, /userlist, -A)
Rezolvare
student@mjolnir:~$ ps -u student
  PID TTY          TIME CMD
[...]
 3176 ?        00:00:06 gnome-terminal
 3181 ?        00:00:00 gnome-pty-helpe
 3182 pts/0    00:00:00 bash
 3293 ?        00:00:00 gedit
 3385 pts/0    00:00:00 ssh
 3394 ?        00:00:04 eog
 3400 ?        00:00:00 dconf-service
 3469 pts/1    00:00:00 bash
 3678 pts/1    00:00:00 ps
 
student@mjolnir:~$ ps -A
  PID TTY          TIME CMD
    1 ?        00:00:00 init
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 ksoftirqd/0
    5 ?        00:00:00 kworker/u:0
    6 ?        00:00:00 migration/0
    7 ?        00:00:00 watchdog/0
    8 ?        00:00:00 migration/1
   10 ?        00:00:00 ksoftirqd/1
[...] 
  • [02]. Obțineți o listare arborescentă a proceselor folosind comanda pstree și apoi obțineți o listare similară (arborescentă) folosind comanda ps. (Hint: forest)
Rezolvare
student@mjolnir:~$ pstree
init─┬─NetworkManager─┬─dhclient
     │                └─2*[{NetworkManager}]
     ├─acpid
     ├─atd
     ├─avahi-daemon───avahi-daemon
     ├─bluetoothd
     ├─bonobo-activati───{bonobo-activat}
     ├─console-kit-dae───64*[{console-kit-da}]
     ├─cron
     ├─cupsd
     ├─2*[dbus-daemon]
     ├─dbus-launch
     ├─dconf-service───{dconf-service}
     ├─dd
     ├─eog───3*[{eog}]
     ├─exim4
     ├─firefox-bin─┬─plugin-containe───4*[{plugin-contain}]
     │             └─22*[{firefox-bin}]
     ├─gconfd-2
[...]

student@mjolnir:~$ ps -AH
  PID TTY          TIME CMD
[...]
    1 ?        00:00:00 init
  263 ?        00:00:00   udevd
 1875 ?        00:00:00     udevd
 2140 ?        00:00:00     udevd
  860 ?        00:00:00   rpcbind
  875 ?        00:00:00   rpc.statd
  891 ?        00:00:00   rpc.idmapd
 1083 ?        00:00:00   syslogd
 1099 ?        00:00:00   dbus-daemon
 1109 ?        00:00:00   NetworkManager
 1258 ?        00:00:00     dhclient
 1119 ?        00:00:00   polkitd
 1123 ?        00:00:00   modem-manager
 1142 ?        00:00:00   gdm3
 1150 ?        00:00:00     gdm-simple-slav
 1152 tty7     00:01:19       Xorg
 1803 ?        00:00:00       gdm-session-wor
 2499 ?        00:00:00         x-session-manag
 2535 ?        00:00:00           ssh-agent
 2549 ?        00:00:00           notification-da
 2550 ?        00:00:00           gnome-power-man
 2551 ?        00:00:00           polkit-gnome-au
 2586 ?        00:00:05           metacity
 2589 ?        00:00:08           gnome-panel
 2591 ?        00:00:00           nautilus
 2601 ?        00:00:00           gdu-notificatio
 2603 ?        00:00:00           nm-applet
 2604 ?        00:00:00           evolution-alarm
 2607 ?        00:00:00           bluetooth-apple
 2610 ?        00:00:00           python
 2612 ?        00:00:00           kerneloops-appl
 1156 ?        00:00:00   acpid
  • [03]. Folosiți comanda top pentru a vizualiza în timp real evoluția proceselor și a resurselor acestora.
Rezolvare
root@mjolnir:~# top
  • [04]. Configurați top în așa fel încât să fie afișate numai 10 procese care aparțin utilizatorului root
Rezolvare
root@mjolnir:~# top -u $USER
in top: n 10
[sau "u root" daca nu s-a specificat ca argument]
  • [04].a. Hint: În timpul rulării top se pot folosi tastele “h” și ”?” pentru a afișa o listă de ajutor a comenzilor disponibile.
  • [05]. Verificați faptul că init adoptă procesele orfane
  • [05].a. Deschideți un nou terminal și din acesta porniți o instanță de xterm în background
Rezolvare
student@mjolnir:~$ xterm &
[1] 3848
  • [05].b. Din instanța de xterm, porniți o a doua instanță de xterm în background
Rezolvare
student@mjolnir:~$ xterm &
[1] 3927
  • [05].c. Din terminal afișați lista proceselor în format arborscent, afișând și pid-ul fiecărui proces (Hint: man pstree, /pid)
Rezolvare
student@mjolnir:~$ pstree -p
[...]
        ├─gnome-terminal(3176)─┬─bash(3182)───ssh(3385)
        │                      ├─bash(3747)─┬─pstree(3980)
        │                      │            └─xterm(3848)───bash(3850)───xterm(3927)───bash(3929)
[...]
  • [05].d. Identificați pid-ul primei sesiuni de xterm și trimiteți procesului respectiv semnalul SIGKILL (Hint: kill)
Rezolvare
student@mjolnir:~$ kill -9 3848
  • [05].e. Identificați procesul părinte al celei de-a doua sesiuni de xterm
Rezolvare
student@mjolnir:~$ pstree -p
init(1)─┬─NetworkManager(1109)─┬─dhclient(1258)
        │                      ├─{NetworkManager}(1117)
        │                      └─{NetworkManager}(1268)
[...]
        └─xterm(3927)───bash(3929)

6. Jurnalizare (2p)

  • Comenzi/concepte/fișiere
    • rsyslog: /etc/rsyslog.conf
    • log rotate
    • logger

Tutorial

  • N/A

Exerciții

  • [01]. Pe mașina virtulă verificați dacă daemonul de syslog este instalat (Hint: rsyslog).
Rezolvare
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.
  • [02]. Adaugati în /etc/rsyslog.conf o intrare prin care TOATE mesajele din sistem sa fie înregistrate în /var/log/all_logs
Rezolvare
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).
  • [03]. Reporniți daemonul rsyslog și verificați conținutul fișierului /var/log/all_logs.
Rezolvare
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
  • [04]. 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.
Rezolvare
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
  • [05]. 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)
Rezolvare
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
}
laboratoare/laborator-05.txt · Last modified: 2012/02/14 20:22 by george.milescu