You are on page 1of 57

Linux.

Niezbdnik programisty
Autor: John Fusco
ISBN: 978-83-246-1485-1
Tytu oryginau: The Linux Programmer's Toolbox
Format: 200x230, stron: 736

Wszystko, czego potrzebujesz,


aby tworzy wydajny, elastyczny i bezbdny kod!
Jaki edytor wybra?
Jak dziaaj systemy kontroli wersji?
Jak zapewni wysok wydajno oraz bezbdne dziaanie
tworzonych rozwiza?

Programista, jak kady fachowiec, posiada perfekcyjnie dobrany zestaw narzdzi,


pozwalajcy mu na szybkie, wygodne, elastyczne i co najwaniejsze optymalne
rozwizywanie postawionych problemw. Wybranie odpowiednich narzdzi
i skomponowanie ich zbioru zabiera czsto wiele dni, miesicy, a nawet i lat.
A przecie my, programici, nie mamy a tyle czasu! Koniecznie trzeba znale jaki
szybszy sposb!
Najlepsz odpowiedzi na ten problem jest wanie niniejsza ksika. Dziki niej
opanujesz sposoby pobierania i instalacji rnych narzdzi, a nowo nabyta wiedza
na temat sposobw zarzdzania pakietami w rnych dystrybucjach na pewno
nie pjdzie na marne. W kolejnych rozdziaach poznasz przebieg procesu kompilacji
oraz dowiesz si, jak interpretowa poszczeglne bdy i ostrzeenia. John Fusco
omawia tu take edytory Vim oraz Emacs ale nie wskazuje, ktry z nich jest lepszy!
Dziki ksice Linux. Niezbdnik projektanta wykorzystanie systemw kontroli wersji
nie bdzie stanowio dla Ciebie najmniejszego problemu. Na kolejnych stronach
szczegowo omawiane s zasady funkcjonowania jdra systemu oraz sposb dziaania
procesw i komunikacji midzy nimi. Lektura kolejnych rozdziaw dostarczy Ci
niezbdnych informacji na temat zapewniania wysokiej wydajnoci tworzonych
rozwiza oraz metod diagnozowania problemw z oprogramowaniem.
Zdobywanie i instalacja oprogramowania open source
Proces kompilacji kodu rdowego
Zarzdzanie pakietami w rnych dystrybucjach
Interpretacja komunikatw o bdach i ostrzee
Edytory plikw tekstowych
Wykorzystanie systemw kontroli wersji
Wykorzystanie procesw
Komunikacja midzy procesami
Diagnozowanie problemw z komunikacj pomidzy procesami
Zwikszanie wydajnoci tworzonych rozwiza
Wykrywanie problemw w napisanym oprogramowaniu

Spis treci

Spis treci

Sowo wstpne ............................................................................................................................................. 17


Przedmowa ................................................................................................................................................... 19
Podzikowania ............................................................................................................................................. 25
O autorze ...................................................................................................................................................... 27
Rozdzia 1.

Pobieranie i instalacja narzdzi oferowanych w trybie open source ............... 29

1.1.

Wprowadzenie ................................................................................................................................... 29

1.2.

Czym jest tryb open source? ............................................................................................................ 30

1.3.

Co idea otwartego dostpu do kodu rdowego oznacza dla nas? ............................................... 30

1.3.1.

Odnajdywanie waciwych narzdzi ........................................................................................ 31

1.3.2.

Formaty dystrybucji oprogramowania .................................................................................... 32

1.4.

Wprowadzenie do tematyki plikw archiwalnych .......................................................................... 33

1.4.1.

Identyfikacja plikw archiwalnych .......................................................................................... 35

1.4.2.

Przegldanie zawartoci plikw archiwalnych ........................................................................ 36

1.4.3.

Rozpakowywanie plikw z pliku archiwalnego ...................................................................... 40

1.5.

Poznajmy wykorzystywany meneder pakietw ............................................................................ 42

1.5.1.

Wybr pomidzy kodem rdowym a wersj binarn .......................................................... 43

1.5.2.

Praca z pakietami ...................................................................................................................... 46

1.6.

Kilka sw o bezpieczestwie w kontekcie pakietw .................................................................... 46

1.6.1.

Potrzeba uwierzytelniania ........................................................................................................ 48

1.6.2.

Podstawowe uwierzytelnianie pakietw ................................................................................. 49

1.6.3.

Uwierzytelnianie pakietw z podpisami cyfrowymi .............................................................. 51

Spis treci

1.6.4.

Podpisy narzdzia GPG, stosowane dla pakietw RPM ........................................................ 52

1.6.5.

Kiedy uwierzytelnienie pakietu jest niemoliwe .................................................................... 56

1.7.

Analiza zawartoci pakietu ................................................................................................................ 57

1.7.1.

Jak analizowa pobrane pakiety ................................................................................................ 59

1.7.2.

Szczegowa analiza pakietw RPM ....................................................................................... 61

1.7.3.

Szczegowa analiza pakietw Debiana ................................................................................... 62

1.8.

Aktualizowanie pakietw .................................................................................................................. 64

1.8.1.

APT Advanced Package Tool ............................................................................................. 66

1.8.2.

YUM Yellowdog Updater Modified .................................................................................. 67

1.8.3.

Synaptic nakadka narzdzia APT z graficznym interfejsem uytkownika ...................... 67

1.8.4.

up2date narzdzie aktualizujce pakiety dystrybucji Red Hat .......................................... 69

1.9.

Podsumowanie .................................................................................................................................. 71

1.9.1.

Narzdzia uyte w tym rozdziale ............................................................................................ 71

1.9.2.

Materiay dostpne w internecie .............................................................................................. 72

Rozdzia 2.

Kompilacja kodu rdowego .................................................................................... 73

2.1.

Wprowadzenie ................................................................................................................................... 73

2.2.

Narzdzia kompilujce ..................................................................................................................... 74

2.2.1.

Rys historyczny ......................................................................................................................... 74

2.2.2.

Zrozumie program make ....................................................................................................... 77

2.2.3.

Jak przebiega proces czenia programw ............................................................................. 103

2.2.4.

Zrozumie biblioteki .............................................................................................................. 104

2.3.

Proces kompilacji ............................................................................................................................ 109

2.3.1.

Narzdzia kompilacji GNU .................................................................................................. 110

2.3.2.

Etap konfiguracji (skrypt configure) ...................................................................................... 111

2.3.3.

Etap kompilacji narzdzie make ....................................................................................... 113

2.3.4.

Etap instalacji polecenie make install ............................................................................... 114

Spis treci

2.4.

Zrozumie bdy i ostrzeenia ....................................................................................................... 115

2.4.1.

Typowe bdy w plikach Makefile ......................................................................................... 115

2.4.2.

Bdy na etapie konfiguracji ................................................................................................... 119

2.4.3.

Bdy na etapie kompilacji ..................................................................................................... 120

2.4.4.

Zrozumie bdy kompilatora ............................................................................................... 124

2.4.5.

Zrozumie ostrzeenia kompilatora ...................................................................................... 126

2.4.6.

Zrozumie bdy programu czcego .................................................................................. 138

2.5.

Podsumowanie ................................................................................................................................ 140

2.5.1.

Narzdzia uyte w tym rozdziale .......................................................................................... 140

2.5.2.

Materiay dostpne w internecie ............................................................................................ 141

Rozdzia 3.

Szukanie pomocy ........................................................................................................ 143

3.1.

Wprowadzenie ................................................................................................................................. 143

3.2.

Narzdzia pomocy elektronicznej ................................................................................................. 144

3.2.1.

Strona man .............................................................................................................................. 144

3.2.2.

Organizacja stron man ........................................................................................................... 145

3.2.3.

Przeszukiwanie stron man narzdzie apropos ................................................................. 149

3.2.4.

Poszukiwanie waciwych stron man polecenie whatis .................................................. 151

3.2.5.

Czego naley szuka na stronach man .................................................................................. 152

3.2.6.

Kilka szczeglnie przydatnych stron man ............................................................................. 153

3.2.7.

Narzdzie info projektu GNU .............................................................................................. 155

3.2.8.

Przegldanie stron info ........................................................................................................... 156

3.2.9.

Przeszukiwanie stron info ...................................................................................................... 159

3.2.10. Zalecane strony info ............................................................................................................... 160


3.2.11. Narzdzia pomocy uruchamiane na pulpicie ....................................................................... 160
3.3.

Pozostae rda pomocy ................................................................................................................ 162

3.3.1.

Katalog /usr/share/doc ............................................................................................................ 162

3.3.2.

Odwoania do innych stron oraz mechanizmy indeksowania ............................................. 163

3.3.3.

Zapytania kierowane do pakietw ......................................................................................... 164

Spis treci

3.4.

Formaty dokumentacji ................................................................................................................... 166

3.4.1.

Formaty TeX, LaTeX i DVI ................................................................................................... 166

3.4.2.

Format Texinfo ....................................................................................................................... 167

3.4.3.

Format DocBook .................................................................................................................... 168

3.4.4.

Jzyk HTML ........................................................................................................................... 169

3.4.5.

Jzyk PostScript ...................................................................................................................... 171

3.4.6.

Format PDF ............................................................................................................................ 173

3.4.7.

Jzyk troff ................................................................................................................................ 174

3.5.

rda informacji w internecie ...................................................................................................... 174

3.5.1.

Witryna http://www.gnu.org/ ................................................................................................. 175

3.5.2.

Witryna http://SourceForge.net/ ............................................................................................ 175

3.5.3.

Witryna projektu The Linux Documentation Project ......................................................... 176

3.5.4.

Grupy dyskusyjne Usenet ...................................................................................................... 177

3.5.5.

Listy dyskusyjne ...................................................................................................................... 177

3.5.6.

Pozostae fora .......................................................................................................................... 178

3.6.

Odnajdywanie informacji o jdrze systemu Linux ....................................................................... 178

3.6.1.

Kompilacja jdra ..................................................................................................................... 178

3.6.2.

Moduy jdra ........................................................................................................................... 180

3.6.3.

Pozostae rda dokumentacji .............................................................................................. 182

3.7.

Podsumowanie ................................................................................................................................ 182

3.7.1.

Narzdzia uyte w tym rozdziale .......................................................................................... 182

3.7.2.

Materiay dostpne w internecie ............................................................................................ 183

Rozdzia 4.

Edycja i konserwacja plikw rdowych ............................................................. 185

4.1.

Wprowadzenie ................................................................................................................................. 185

4.2.

Edytor tekstu ................................................................................................................................... 186

4.2.1.

Edytor domylny ..................................................................................................................... 188

4.2.2.

Jakich funkcji naley szuka w edytorze tekstu .................................................................... 188

4.2.3.

Wielka dwjka vi oraz Emacs ............................................................................................ 190

Spis treci

4.2.4.

Vim udoskonalony edytor vi ............................................................................................. 191

4.2.5.

Edytor Emacs .......................................................................................................................... 215

4.2.6.

Atak klonw ............................................................................................................................ 227

4.2.7.

Podstawowe informacje o kilku edytorach tekstu


z graficznym interfejsem uytkownika ................................................................................. 230

4.2.8.

Wymagania pamiciowe ......................................................................................................... 235

4.2.9.

Podsumowanie wiadomoci o edytorach .............................................................................. 237

4.3.

Kontrola wersji ................................................................................................................................ 238

4.3.1.

Podstawy kontroli wersji ........................................................................................................ 238

4.3.2.

Terminologia obowizujca w wiecie kontroli wersji ........................................................ 240

4.3.3.

Narzdzia pomocnicze ........................................................................................................... 243

4.3.4.

Podstawy polece diff i patch ................................................................................................ 243

4.3.5.

Przegldanie i scalanie zmian ................................................................................................. 247

4.4.

Upikszacze i przegldarki kodu rdowego ............................................................................... 254

4.4.1.

Upikszacze wci w kodzie rdowym .............................................................................. 255

4.4.2.

Artystyczny styl narzdzia astyle ............................................................................................ 258

4.4.3.

Analiza kodu za pomoc narzdzia cflow .............................................................................. 259

4.4.4.

Analiza kodu za pomoc narzdzia ctags ............................................................................... 262

4.4.5.

Przegldanie kodu za pomoc narzdzia cscope ................................................................... 262

4.4.6.

Przegldanie i dokumentowanie kodu za pomoc narzdzia Doxygen .............................. 264

4.4.7.

Analiza kodu rdowego z wykorzystaniem kompilatora .................................................. 266

4.5.

Podsumowanie ................................................................................................................................ 268

4.5.1.

Narzdzia uyte w tym rozdziale .......................................................................................... 269

4.5.2.

Bibliografia .............................................................................................................................. 270

4.5.3.

Materiay dostpne w internecie ............................................................................................ 270

10

Spis treci

Rozdzia 5.

Co kady programista powinien wiedzie o jdrze systemu ........................... 273

5.1.

Wprowadzenie ................................................................................................................................. 273

5.2.

Tryb uytkownika a tryb jdra ....................................................................................................... 274

5.2.1.

Wywoania systemowe ........................................................................................................... 276

5.2.2.

Przenoszenie danych pomidzy przestrzeni uytkownika a przestrzeni jdra .................. 278

5.3.

Mechanizm szeregowania procesw ............................................................................................. 279

5.3.1.

Reguy szeregowania procesw ............................................................................................. 279

5.3.2.

Blokowanie, wywaszczanie i rezygnacje .............................................................................. 282

5.3.3.

Priorytety szeregowania i kwestia sprawiedliwoci .............................................................. 283

5.3.4.

Priorytety i warto nice ......................................................................................................... 287

5.3.5.

Priorytety czasu rzeczywistego .............................................................................................. 289

5.3.6.

Tworzenie procesw czasu rzeczywistego ............................................................................ 292

5.3.7.

Stany procesw ....................................................................................................................... 294

5.3.8.

Jak jest mierzony czas pracy procesw .................................................................................. 301

5.4.

Zrozumie urzdzenia i sterowniki urzdze ............................................................................... 313

5.4.1.

Rodzaje sterownikw urzdze ............................................................................................. 314

5.4.2.

Sowo o moduach jdra ......................................................................................................... 316

5.4.3.

Wzy urzdze ....................................................................................................................... 317

5.4.4.

Urzdzenia i operacje wejcia-wyjcia ................................................................................... 330

5.5.

Mechanizm szeregowania operacji wejcia-wyjcia ...................................................................... 340

5.5.1.

Winda Linusa (znana te jako noop) ..................................................................................... 342

5.5.2.

Mechanizm szeregowania operacji wejcia-wyjcia z terminem granicznym .................... 343

5.5.3.

Przewidujcy mechanizm szeregowania operacji wejcia-wyjcia ...................................... 344

5.5.4.

Mechanizm szeregowania operacji wejcia-wyjcia z penym kolejkowaniem .................. 344

5.5.5.

Wybr mechanizmu szeregowania operacji wejcia-wyjcia ............................................... 344

5.6.

Zarzdzanie pamici w przestrzeni uytkownika ........................................................................ 345

5.6.1.

Omwienie pamici wirtualnej ............................................................................................. 346

5.6.2.

Wyczerpanie dostpnej pamici ............................................................................................. 363

11

Spis treci

5.7.

Podsumowanie ................................................................................................................................ 378

5.7.1.

Narzdzia uyte w tym rozdziale .......................................................................................... 378

5.7.2.

Interfejsy API omwione w tym rozdziale ........................................................................... 379

5.7.3.

Materiay dostpne w internecie ............................................................................................ 379

5.7.4.

Bibliografia .............................................................................................................................. 379

Rozdzia 6.

Zrozumie procesy ..................................................................................................... 381

6.1.

Wprowadzenie ................................................................................................................................. 381

6.2.

Skd si bior procesy ..................................................................................................................... 381

6.2.1.

Wywoania systemowe fork i vfork ....................................................................................... 382

6.2.2.

Kopiowanie przy zapisie ......................................................................................................... 383

6.2.3.

Wywoanie systemowe clone ................................................................................................. 384

6.3.

Funkcje z rodziny exec ................................................................................................................... 384

6.3.1.

Skrypty wykonywalne ............................................................................................................ 385

6.3.2.

Wykonywalne pliki obiektw ................................................................................................. 387

6.3.3.

Rozmaite binaria ..................................................................................................................... 389

6.4.

Synchronizacja procesw za pomoc funkcji wait ........................................................................ 392

6.5.

Wymagania pamiciowe procesu ................................................................................................... 394

6.5.1.

Deskryptory plikw ................................................................................................................ 397

6.5.2.

Stos .......................................................................................................................................... 404

6.5.3.

Pami rezydentna i pami zablokowana ............................................................................ 405

6.6.

Ustawianie ogranicze dla procesw ............................................................................................. 406

6.7.

Procesy i system plikw procfs ...................................................................................................... 410

6.8.

Narzdzia do zarzdzania procesami ............................................................................................. 413

6.8.1.

Wywietlanie informacji o procesach za pomoc polecenia ps ............................................ 413

6.8.2.

Zaawansowane informacje o procesach, uzyskiwane z wykorzystaniem formatw .......... 416

6.8.3.

Odnajdywanie procesw wedug nazw za pomoc polece ps i pgrep ............................... 419

6.8.4.

ledzenie wymaga pamiciowych procesu za pomoc polecenia pmap ........................... 420

6.8.5.

Wysyanie sygnaw do procesw identyfikowanych przez nazwy ..................................... 422

12

Spis treci

6.9.

Podsumowanie ................................................................................................................................ 423

6.9.1.

Wywoania systemowe i interfejsy API uyte w tym rozdziale ............................................ 423

6.9.2.

Narzdzia uyte w tym rozdziale .......................................................................................... 424

6.9.3.

Materiay dostpne w internecie ............................................................................................ 424

Rozdzia 7.

Komunikacja pomidzy procesami ........................................................................ 425

7.1.

Wprowadzenie ................................................................................................................................. 425

7.2.

Technika IPC z wykorzystaniem zwykych plikw ..................................................................... 426

7.2.1.

Blokowanie plikw ................................................................................................................. 431

7.2.2.

Wady implementacji techniki IPC z wykorzystaniem plikw ............................................. 432

7.3.

Pami wspdzielona .................................................................................................................... 432

7.3.1.

Zarzdzanie pamici wspdzielon za porednictwem interfejsu POSIX API ............... 433

7.3.2.

Zarzdzanie pamici wspdzielon za porednictwem interfejsu System V API ............ 437

7.4.

Sygnay ............................................................................................................................................. 440

7.4.1.

Wysyanie sygnaw do procesu ............................................................................................ 441

7.4.2.

Obsuga sygnaw ................................................................................................................... 442

7.4.3.

Maska sygnaw i obsuga sygnaw ..................................................................................... 444

7.4.4.

Sygnay czasu rzeczywistego .................................................................................................. 447

7.4.5.

Zaawansowane operacje na sygnaach z wykorzystaniem funkcji sigqueue i sigaction ..... 450

7.5.

Potoki ............................................................................................................................................... 453

7.6.

Gniazda ............................................................................................................................................ 454

7.6.1.

Tworzenie gniazd ................................................................................................................... 455

7.6.2.

Przykad gniazda lokalnego, utworzonego za pomoc funkcji socketpair .......................... 458

7.6.3.

Przykad aplikacji klient-serwer, zbudowanej z wykorzystaniem gniazd lokalnych .......... 459

7.6.4.

Przykad aplikacji klient-serwer, zbudowanej z wykorzystaniem gniazd sieciowych ........ 465

7.7.

Kolejki komunikatw ..................................................................................................................... 466

7.7.1.

Kolejka komunikatw standardu System V .......................................................................... 467

7.7.2.

Kolejka komunikatw standardu POSIX .............................................................................. 471

7.7.3.

Rnice dzielce kolejki komunikatw standardw POSIX i System V ............................. 476

13

Spis treci

7.8.

Semafory .......................................................................................................................................... 477

7.8.1.

Interfejs API semaforw standardu POSIX .......................................................................... 483

7.8.2.

Interfejs API semaforw standardu System V ...................................................................... 486

7.9.

Podsumowanie ................................................................................................................................ 488

7.9.1.

Wywoania systemowe i interfejsy API uyte w tym rozdziale ............................................ 489

7.9.2.

Bibliografia .............................................................................................................................. 490

7.9.3.

Materiay dostpne w internecie ............................................................................................ 490

Rozdzia 8.

Diagnozowanie mechanizmw komunikacji midzyprocesowej


za pomoc polece powoki ..................................................................................... 491

8.1.

Wprowadzenie ................................................................................................................................. 491

8.2.

Narzdzia operujce na otwartych plikach .................................................................................... 491

8.2.1.

Polecenie lsof .......................................................................................................................... 492

8.2.2.

Polecenie fuser ........................................................................................................................ 493

8.2.3.

Polecenie ls .............................................................................................................................. 494

8.2.4.

Polecenie file ........................................................................................................................... 495

8.2.5.

Polecenie stat ........................................................................................................................... 495

8.3.

Zrzucanie danych z pliku ............................................................................................................... 496

8.3.1.

Polecenie strings ..................................................................................................................... 499

8.3.2.

Polecenie xxd .......................................................................................................................... 500

8.3.3.

Polecenie hexdump ................................................................................................................ 501

8.3.4.

Polecenie od ............................................................................................................................ 502

8.4.

Narzdzia powoki do obsugi komunikacji midzyprocesowej standardu System V ............... 504

8.4.1.

Pami wspdzielona standardu System V .......................................................................... 504

8.4.2.

Kolejki komunikatw standardu System V ........................................................................... 507

8.4.3.

Semafory standardu System V ............................................................................................... 509

8.5.

Narzdzia powoki do obsugi komunikacji midzyprocesowej standardu POSIX ................... 510

8.5.1.

Pami wspdzielona standardu POSIX ............................................................................. 510

8.5.2.

Kolejki komunikatw standardu POSIX .............................................................................. 511

8.5.3.

Semafory standardu POSIX ................................................................................................... 512

14

Spis treci

8.6.

Narzdzia pomocne w pracy z sygnaami ..................................................................................... 514

8.7.

Narzdzia pomocne w pracy z potokami i gniazdami .................................................................. 516

8.7.1.

Potoki i struktury FIFO ......................................................................................................... 517

8.7.2.

Gniazda .................................................................................................................................... 518

8.8.

Identyfikacja plikw i obiektw IPC na podstawie i-wzw ...................................................... 521

8.9.

Podsumowanie ................................................................................................................................ 523

8.9.1.

Narzdzia wykorzystane w tym rozdziale ............................................................................. 523

8.9.2.

Materiay dostpne w internecie ............................................................................................ 523

Rozdzia 9.

Doskonalenie wydajnoci .......................................................................................... 525

9.1.

Wprowadzenie ................................................................................................................................. 525

9.2.

Wydajno systemu ......................................................................................................................... 525

9.2.1.

Problemy zwizane z pamici .............................................................................................. 526

9.2.2.

Wykorzystanie procesora i rywalizacja o dostp do magistrali ............................................. 537

9.2.3.

Urzdzenia i przerwania ........................................................................................................ 541

9.2.4.

Narzdzia umoliwiajce identyfikacj problemw w zakresie wydajnoci systemu ........ 550

9.3.

Wydajno aplikacji ......................................................................................................................... 560

9.3.1.

Pierwsze kroki polecenie time .......................................................................................... 560

9.3.2.

Zrozumie architektur procesora z wykorzystaniem narzdzia x86info ........................... 561

9.3.3.

Stosowanie pakietu Valgrind do analizy efektywnoci rozkazw ........................................ 565

9.3.4.

Wprowadzenie do narzdzia ltrace ........................................................................................ 570

9.3.5.

Stosowanie narzdzia strace do monitorowania wydajnoci programu .............................. 572

9.3.6.

Tradycyjne programy do optymalizacji oprogramowania gcov oraz gprof .................... 574

9.3.7.

Podstawowe informacje o narzdziu OProfile ..................................................................... 583

9.4.

Wydajno w rodowisku wieloprocesorowym ............................................................................ 590

9.4.1.

Rodzaje systemw SMP ......................................................................................................... 591

9.4.2.

Programowanie dla komputerw SMP ................................................................................. 596

15

Spis treci

9.5.

Podsumowanie ................................................................................................................................ 600

9.5.1.

Omwione w tym rozdziale problemy zwizane z wydajnoci ......................................... 601

9.5.2.

Terminy wprowadzone w tym rozdziale .............................................................................. 601

9.5.3.

Narzdzia wykorzystane w tym rozdziale ............................................................................. 601

9.5.4.

Materiay dostpne w internecie ............................................................................................ 602

9.5.5.

Bibliografia .............................................................................................................................. 602

Rozdzia 10.

Diagnozowanie oprogramowania ........................................................................... 603

10.1. Wprowadzenie ................................................................................................................................. 603


10.2. Najprostsze narzdzie diagnostyczne funkcja printf ............................................................... 604
10.2.1. Problemy zwizane ze stosowaniem funkcji printf w roli narzdzia diagnostycznego ...... 604
10.2.2. Efektywne korzystanie z funkcji printf ................................................................................. 610
10.2.3. Kilka sw podsumowania metod diagnozowania oprogramowania
z wykorzystaniem funkcji printf ............................................................................................ 620
10.3. Jak opanowa podstawy debugera GNU gdb .......................................................................... 622
10.3.1. Wykonywanie kodu pod kontrol debugera gdb .................................................................. 623
10.3.2. Zatrzymywanie i wznawianie wykonywania kodu ............................................................... 624
10.3.3. Analiza i modyfikowanie danych ........................................................................................... 636
10.3.4. Doczanie debugera gdb do pracujcego procesu ............................................................... 649
10.3.5. Diagnozowanie plikw rdzenia ............................................................................................. 649
10.3.6. Diagnozowanie programw wielowtkowych za pomoc debugera gdb ............................ 653
10.3.7. Diagnozowanie zoptymalizowanego kodu ........................................................................... 655
10.4. Diagnozowanie obiektw dzielonych ............................................................................................ 659
10.4.1. Kiedy i dlaczego stosujemy obiekty dzielone ........................................................................ 659
10.4.2. Tworzenie obiektw dzielonych ........................................................................................... 660
10.4.3. Lokalizowanie obiektw dzielonych ..................................................................................... 661
10.4.4. Nadpisywanie domylnych lokalizacji obiektw dzielonych ............................................... 662
10.4.5. Problemy zwizane z bezpieczestwem obiektw dzielonych ............................................ 663
10.4.6. Narzdzia wykorzystywane w pracy z obiektami dzielonymi ............................................. 663

16

Spis treci

10.5. Poszukiwanie problemw zwizanych z pamici ....................................................................... 667


10.5.1. Podwjne zwalnianie pamici ................................................................................................ 668
10.5.2. Wycieki pamici ...................................................................................................................... 668
10.5.3. Przepenienia buforw ........................................................................................................... 669
10.5.4. Narzdzia biblioteki standardowej glibc ............................................................................... 671
10.5.5. Diagnozowanie problemw zwizanych z pamici za pomoc pakietu Valgrind ............. 675
10.5.6. Identyfikacja przepenie za pomoc debugera Electric Fence ........................................... 682
10.6. Techniki niekonwencjonalne ......................................................................................................... 685
10.6.1. Tworzenie wasnych czarnych skrzynek ............................................................................... 685
10.6.2. ledzenie wsteczne w czasie wykonywania .......................................................................... 688
10.6.3. Wymuszanie zrzutw rdzenia ................................................................................................ 691
10.6.4. Stosowanie sygnaw .............................................................................................................. 692
10.6.5. Diagnozowanie oprogramowania z wykorzystaniem systemu pakietu procfs .................... 693
10.7. Podsumowanie ................................................................................................................................ 696
10.7.1. Narzdzia wykorzystane w tym rozdziale ............................................................................. 697
10.7.2. Materiay dostpne w internecie ............................................................................................ 697
10.7.3. Bibliografia .............................................................................................................................. 697
Skorowidz ................................................................................................................................................ 699

Rozdzia 1.[SR1]

Pobieranie i instalacja narzdzi


oferowanych w trybie open source

1.1.

Wprowadzenie

W tym rozdziale omwi rne formy dystrybuowania darmowego oprogramowania, techniki


jego stosowania i miejsca, gdzie naley go szuka. Szczegowo opisz pliki archiwalne i pliki
pakietw, a take najbardziej popularne narzdzia utworzone z myl o operowaniu na tych plikach.
Stosowanie oprogramowania nieznanych autorw bywa ryzykowne. W zwizku z tym omwi
rozmaite zagadnienia zwizane z bezpieczestwem, ktre warto mie na uwadze, i techniki, ktre
mog nas chroni. Wprowadz zagadnienia uwierzytelniania i zaufania, po czym sprbuj je
odnie do problematyki bezpieczestwa. Z myl o sytuacjach, w ktrych uwierzytelnianie jest
niemoliwe, zaproponuj techniki przegldania pakietw i archiww.
I wreszcie wprowadz kilka narzdzi umoliwiajcych efektywne zarzdzanie pakietami
i dystrybucjami opartymi na pakietach oraz sposoby ich uzyskiwania.

29

30

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

1.2.

Czym jest tryb open source?

Nazwa open source jest marketingowym okreleniem darmowego oprogramowania tworzonego zgodnie z zaoeniami projektu Open Source Initiative (OSI)1. Organizacj OSI zaoono
z myl o promowaniu darmowego oprogramowania, a faktycznym rdem tej idei by projekt
GNU Richarda Stallmana. Jednym z celw tej organizacji jest zwalczanie negatywnych stereotypw zwizanych z darmowym oprogramowaniem i propagowanie darmowego dzielenia si
kodem rdowym aplikacji.
Pocztkowo wiele organizacji biznesowych obawiao si stosowania oprogramowania oferowanego w trybie open source. Nie ma wtpliwoci, e spory udzia w tym stanie rzeczy miay dziay
marketingu wielkich przedsibiorstw informatycznych. Jak mwi powiedzenie: Otrzymujesz to,
za co pacisz. Niektrzy obawiali si, e nowe licencje (np. GNU Public License) bd si rozprzestrzeniay jak wirus, ktry sprawi, e kod tworzony z wykorzystaniem darmowego oprogramowania take bdzie musia by upubliczniony.
Zdecydowana wikszo tych obaw zostaa na szczcie rozwiana. Wiele ogromnych przedsibiorstw korzysta obecnie z darmowego oprogramowania i promuje ide otwartego dostpu do
kodu rdowego we wasnych projektach. Co wicej, cz koncernw korzysta wycznie z oprogramowania open source. Din ostatecznie zosta uwolniony ze swojej lampy.

1.3.

Co idea otwartego dostpu do kodu rdowego oznacza dla nas?

Dla wikszoci z nas idea oprogramowania open source oznacza w istocie dostpno darmowych
narzdzi wysokiej jakoci. Okazuje si, niestety, e oprcz wspomnianego oprogramowania
wysokiej jakoci istnieje mnstwo gorszych produktw, co jest nieuniknione. Dobre koncepcje
projektowe s stale rozwijane, koncepcje chybione z czasem zanikaj. W tej sytuacji wybr oprogramowania open source przypomina troch wybr owocw wskazanie naprawd dojrzaych
wymaga sporego dowiadczenia.
Waciwie prowadzony proces wyboru musi uwzgldnia wiele poziomw. Na poziomie
kodu rdowego dobieramy funkcje i konstrukcje (w tym atki usuwajce usterki), aby dysponowa tylko najlepszymi rozwizaniami. Jako konsumenci wybieramy i pobieramy z internetu te
produkty, ktre w naszej ocenie zwikszaj szanse powodzenia realizowanych projektw. Trudno
oczekiwa, by kto tworzy kod, ktry nie bdzie wykorzystywany w adnym projekcie. Mniej
pobieranego oprogramowania oznacza mniej pracy dla programistw. Wicej pobra zawsze oznacza wicej pracy dla programistw, co z kolei przekada si na szerszy wybr kodu i tym
1

Patrz witryna internetowa http://www.opensource.org/.

1.3.

Co idea otwartego dostpu do kodu rdowego oznacza dla nas?

31

samym lepszy kod. Zdarza si, e wybr waciwego projektu przypomina rozgrywk hazardow, w ktrej o sile naszych kart decyduje wycznie ilo powicanego czasu i wkadanego
wysiku. Sytuacje, w ktrych bdziemy aowa dokonanych wczeniej wyborw, s nieuniknione warto wic pamita, e podobne zdarzenia s nieodczn czci tego procesu.
Dla czci uytkownikw niepena wiedza o pobieranym oprogramowaniu bywa rdem
pozytywnych emocji. Traktuj poznawanie nowych narzdzi jak rozpakowywanie prezentw
urodzinowych. Inni uytkownicy uwaaj, e tego rodzaju eksperymenty s wyjtkowo kopotliwe i czasochonne. Okazuje si jednak, e take osoby zainteresowane wygod zwizan z gotowym oprogramowaniem, ktre wystarczy zainstalowa i uruchomi, znajd w internecie co dla
siebie problem w tym, e wybr naprawd dojrzaych projektw jest nieco mniejszy. Internet
oferuje wiele zasobw, ktre uatwiaj wybr podanych projektw.

1.3.1. Odnajdywanie waciwych narzdzi


Pierwszym miejscem, od ktrego naley zacz poszukiwania (zanim przystpimy do przegldania zasobw dostpnych w internecie), s pyty CD lub DVD naszej dystrybucji systemu Linux.
Jeli zainstalowalimy system znajdujcy si na wielu nonikach, najprawdopodobniej pominito
w tym procesie mnstwo uytecznych narzdzi. Wikszo dystrybucji zawiera na pytach CD lub
DVD duo wicej oprogramowania, ni instaluje si zgodnie z ustawieniami domylnymi. Z reguy
uytkownik instalujcy system operacyjny jest pytany o docelowe przeznaczenie danego komputera. Wskutek takiego wyboru na dysku jest instalowany okrelony podzbir pakietw, ktry
wedug twrcw programu instalacyjnego najlepiej pasuje do profilu stacji roboczej czy serwera.
Zbir zainstalowanych pakietw zawsze moemy rozszerzy rcznie, lokalizujc interesujce
nas narzdzia na pytach CD lub DVD. Wad proponowanego podejcia jest brak jednego schematu organizowania pakietw i tym samym konieczno dysponowania do precyzyjn
wiedz o poszukiwanych rozwizaniach. Cz dystrybucji oferuje jednak graficzne interfejsy
organizujce pakiety w ramach kategorii, ktre znacznie uatwiaj dobr instalowanego oprogramowania.
Uytkownicy, ktrzy nie do koca wiedz, czego szukaj, powinni skorzysta z materiaw
dostpnych w internecie. Istnieje wiele witryn internetowych, stworzonych wycznie z myl
o uytkownikach poszukujcych oprogramowania open source. Jedn z takich witryn jest http://
freshmeat.net/. Mona tam znale oprogramowanie uporzdkowane wedug kategorii, co znacznie
uatwia przeszukiwanie oferowanych zasobw. W czasie prac nad t ksik wpisaem w wyszukiwarce Freshmeat wyraenie word processor i znalazem 71 dostpnych projektw. A trudno sobie
wyobrazi wybr spomidzy 71 edytorw tekstu!

32

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

Witryna Freshmeat umoliwia filtrowanie wynikw przeszukiwania, co dodatkowo pozwala


zawzi zbir dostpnych narzdzi. Pocztkowe wyniki obejmuj oprogramowanie dla rnych
systemw operacyjnych (w tym innych ni Linux), a take projekty na rnych etapach realizacji. W tej sytuacji podjem decyzj o ograniczeniu przeszukiwania do projektw tworzonych
z myl o systemie Linux, projektw dojrzaych i takich, ktre s oferowane zgodnie z licencj
Open Source, zaakceptowan przez organizacj OSI. (Witryna Freshmeat domylnie odnajduje
take oprogramowanie komercyjne). W ten sposb ograniczyem liczb projektw do 12 wybr
spord takiej liczby edytorw jest duo prostszy. Blisza analiza wynikw ujawnia jednak, e
cz projektw nie do koca odpowiada moim oczekiwaniom i wynika z do szerokiej interpretacji wyraenia word processor. Po zastosowaniu kilku dodatkowych filtrw byem w stanie
zidentyfikowa kilka znanych mi wczeniej, sprawdzonych projektw wysokiej jakoci, np. edytor
AbiWord, oraz kilka projektw, o ktrych do tej pory nie syszaem. Wyniki nie obejmoway jednak tak wanych projektw jak pakiet OpenOffice, w ktrym pisaem t ksik. Okazao si, e
wspomniany pakiet nie znalaz si w wynikach przeszukiwania, poniewa naley do kategorii
Office/Business Office Suites, a nie Word Processors. Moje dowiadczenia pokazay, e jeli nie
moemy odnale interesujcego nas projektu, nie powinnimy rezygnowa, tylko stara si szuka do skutku.

1.3.2. Formaty dystrybucji oprogramowania


Kiedy ju uda nam si odnale potrzebne oprogramowanie, najprawdopodobniej staniemy przed
kolejnym wanym wyborem. Dojrzae projekty z reguy oferuj pakiety w postaci gotowej do
zainstalowania, zwykle w co najmniej jednym formacie. Mniej dojrzae projekty czsto maj posta
kodu rdowego lub plikw binarnych, zawartych w pliku archiwalnym. Okazuje si, e sam format bywa cenn wskazwk sugerujc, z jakim pakietem mamy do czynienia. Pobieranie pliku
pakietu dojrzaego oprogramowania mona porwna z kupowaniem nowego samochodu
poniewa nie wiemy, jak to dziaa, ograniczamy si do przekrcenia kluczyka w stacyjce. Pobieranie archiwum z plikami rdowymi lub binarnymi bardziej przypomina kupowanie uywanego
samochodu jeli niewiele wiemy o samochodach, tak naprawd nie wiemy, co kupujemy.
Jeli jaki projekt obejmuje pakiet gotowy do natychmiastowej instalacji, zwykle jest to sygna
o dojrzaoci tego projektu. Co wicej, istnienie takiego pakietu sugeruje, e cykl wyda danego
projektu jest do stabilny. Gdyby nowe wydania tego projektu pojawiay si co tydzie, najprawdopodobniej nikt nie zawracaby sobie gowy tworzeniem pakietw. Dysponujc plikiem pakietu
oprogramowania i odrobin szczcia najprawdopodobniej bdziemy w stanie od razu zainstalowa i uruchomi nowe narzdzie. Okazuje si jednak, e podobnie jak w przypadku nowych
samochodw, szybko moemy si przekona, i dokonany wybr nie by najlepszy.

1.4.

Wprowadzenie do tematyki plikw archiwalnych

33

Alternatyw dla pliku pakietu jest plik archiwum (plik archiwalny). W projektach tworzonych
z myl o systemie operacyjnym Linux archiwa z reguy maj posta skompresowanych plikw
z rozszerzeniem .tar. Plik archiwalny (ang. archive file) jest kolekcj plikw upakowanych w jednym pliku za pomoc narzdzia archiwizujcego, czyli np. polecenia tar. Tego rodzaju pliki
z reguy s dodatkowo kompresowane za pomoc programu gzip, co pozwala oszczdzi cenn
przestrze na dysku tak przygotowane pliki okrela si mianem plikw tar.
Pliki tar s preferowanym formatem dystrybucji kodu rdowego projektw. Ich tworzenie
i stosowanie jest bardzo proste, a obsuga programu tar nie stanowi problemu dla adnego programisty. Duo rzadziej mamy do dyspozycji pliki tar obejmujce binarne pliki wykonywalne.
Naley tego rozwizania unika, chyba e dobrze wiemy, co tak naprawd robimy. Pliki tar powinny by przekazywane osobom, ktre dysponuj pewn wiedz o programowaniu i administracji systemami.

1.4.

Wprowadzenie do tematyki plikw archiwalnych

Podczas pobierania i instalacji oprogramowania open source w pewnym momencie zetkniemy si


z plikiem archiwalnym w tej czy innej formie. Mianem pliku archiwalnego okrelamy kady
plik zawierajcy kolekcj innych plikw. Uytkownicy systemu operacyjnego Windows zapewne
znaj dominujce na tej platformie narzdzie archiwizujce PKZip. Jego odpowiedniki pracujce
w systemach Linux dziaaj podobnie, z t rnic, e nie oferuj moliwo kompresji. Narzdzia
archiwizujce systemu Linux koncentruj si na samej archiwizacji i pozostawiaj kompresj innym
narzdziom (zwykle gzip lub bzip2). Na tym polega filozofia platformy Unix.
Poniewa pracujemy w systemie Linux, mamy oczywicie szerszy wybr narzdzi archiwizujcych. Jako konsumenci oprogramowania open source nie powinnimy si jednak wykazywa
przesadn wybrednoci. Mimo e w naszej pracy bdziemy mieli do czynienia przede wszystkim
z plikami tar, warto przynajmniej wiedzie o istnieniu innych narzdzi.
Narzdziom archiwizujcym stawiamy wiksze wymagania ni tylko te zwizane ze skadowaniem nazw i danych plikw. Oprcz cieek i danych archiwum musi obejmowa metadane
waciwe dla poszczeglnych plikw. Przez okrelenie metadane (ang. metadata) rozumiemy
waciciela pliku, grup i inne atrybuty (w tym uprawnienia odczytu, zapisu i wykonywania).
Narzdzie archiwizujce rejestruje wszystkie te informacje, co oznacza, e stwarza moliwo
usunicia pliku z systemu plikw i jego pniejsze przywrcenie z pliku archiwalnego bez utraty
jakichkolwiek informacji. Jeli umiecimy w archiwum jaki plik wykonywalny, po czym usuniemy go z systemu plikw, odtworzenie tego pliku z archiwum umoliwi nam jego ponowne
uruchomienie. W systemie Windows samo rozszerzenie pliku okrela, czy mamy do czynienia

34

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

z plikiem wykonywalnym (tak jest np. w przypadku plikw .exe); w systemie Linux o moliwoci
uruchamiania plikw decyduj ich metadane, dlatego konieczne jest skadowanie tych informacji
przez narzdzie archiwizujce.
Najbardziej popularne narzdzia archiwizujce, stosowane w systemie Linux, wymieniono
i krtko opisano w tabeli 1.1. Zdecydowanie najpopularniejszym formatem archiwizowania plikw jest tar. Nazwa tego narzdzia i formatu jest skrtem od angielskiego okrelenia tape archive,
czyli nazwy stosowanych kiedy systemw archiwizowania danych na tamach magnetycznych.
Narzdzie tar jest obecnie wykorzystywane przede wszystkim w roli uniwersalnego programu do
archiwizacji kolekcji plikw w ramach pojedynczych plikw wynikowych. Mniej popularn alternatyw dla tego narzdzia jest cpio, czyli program realizujcy te same zadania, ale stosujcy zupenie odmienn skadni polece. Istnieje te narzdzie pax, ktre jest zgodne ze standardem POSIX
i ktre potrafi prawidowo interpretowa pliki narzdzia tar, pliki archiwalne programu cpio
i oczywicie pliki we wasnym formacie. Co prawda, nigdy nie spotkaem si z dystrybucj w formacie narzdzia pax, warto jednak o nim wspomnie dla kompletnoci prowadzonych rozwaa.
TABELA 1.1.

Najpopularniejsze narzdzia archiwizujce

Narzdzie

Uwagi

tar

Najbardziej popularne narzdzie

cpio

Narzdzie stosowane wewntrznie przez format RPM, niewykorzystywane nigdzie indziej

ar

Narzdzie wykorzystywane wewntrznie przez mechanizm pakujcy Debiana; poza tym


systemem stosuje si je wycznie dla bibliotek budowanego oprogramowania. Narzdzie
ar nie skaduje w archiwach informacji o ciekach

Warto powici troch uwagi narzdziu ar, ktre jest wykorzystywane przede wszystkim do
tworzenia bibliotek z kodem obiektw stosowanych w procesie wytwarzania oprogramowania, ale
take do tworzenia plikw pakietw na potrzeby dystrybucji systemu Debian.
W internecie mona bez trudu odnale zarwno narzdzia przetwarzajce pliki .zip, tworzone
za pomoc aplikacji PKZip, jak i mniej znane narzdzia generujce skompresowane archiwa, np.
lha. Warto jednak pamita, e podane formaty niemal nigdy nie s wykorzystywane do dystrybuowania programw open source dla systemu Linux. Oznacza to, e widzc archiwum z rozszerzeniem .zip, moemy by niemal pewni, e jest przeznaczone dla systemu operacyjnego firmy
Microsoft.
W wikszoci przypadkw musimy dysponowa dwiema informacjami na temat poszczeglnych formatw: jak sprawdzi zawarto archiwum i jak wyodrbni pliki z tego archiwum.

1.4.

Wprowadzenie do tematyki plikw archiwalnych

35

W przeciwiestwie do narzdzi archiwizujcych, stosowanych w systemach operacyjnych Windows, ktre oferuj rozmaite, czsto niebezpieczne funkcje dodatkowe, programy archiwizujce
przeznaczone dla systemw Linux koncentruj si wycznie na podstawowych funkcjach. W tej
sytuacji przegldanie i rozpakowywanie plikw archiwalnych jest do bezpieczne (szczeglnie jeli
nie dysponujemy uprawnieniami administratora). Mimo to zawsze warto przyjrze si zawartoci
archiwum przed przystpieniem do wypakowywania plikw, aby przypadkiem nie nadpisa tak
samo nazwanych plikw ju istniejcych.

1.4.1. Identyfikacja plikw archiwalnych


Archiwa pobierane z internetu najczciej s kompresowane z myl o oszczdzaniu przepustowoci czy. Istnieje szereg konwencji nazewniczych, stosowanych dla plikw skompresowanych
(cz spord tych konwencji przedstawiono w tabeli 1.2).
TABELA 1.2.

Konwencje nazewnictwa plikw archiwalnych

Rozszerzenia

Typ

.tar

Nieskompresowany plik archiwalny narzdzia tar

.tar.gz, .tgz

Plik archiwalny narzdzia tar, skompresowany za pomoc narzdzia gzip

.tar.bz2

Plik archiwalny narzdzia tar, skompresowany za pomoc narzdzia bzip2

.tar.Z, .taz

Plik archiwalny narzdzia tar, skompresowany za pomoc polecenia compress systemu


Unix

.ar, .a

Plik archiwalny narzdzia ar, stosowany przede wszystkim podczas tworzenia


oprogramowania

.cpio

Nieskompresowany plik archiwalny narzdzia cpio

W razie wtpliwoci warto pamita o przydatnym poleceniu file. Wspomniane narzdzie


wprost doskonale nadaje si do identyfikacji plikw, ktrych nazwy niewiele nam mwi o faktycznej zawartoci. Z tego rodzaju sytuacjami mamy do czynienia np. wtedy, gdy nasza przegldarka internetowa lub inne narzdzie tak modyfikuje nazwy plikw, e ich rozpoznanie staje si
kopotliwe. Przypumy, e dysponujemy skompresowanym archiwum narzdzia tar, nazwanym
foo.x. Nazwa ta nie informuje o zawartoci tego pliku. W tej sytuacji mona skorzysta z nastpujcego polecenia:
$ file foo.x
foo.x: gzip compressed data, from UNIX, max compression

36

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

Teraz moemy by pewni, e nasz plik skompresowano za pomoc narzdzia gzip, nadal
jednak nie wiemy, czy mamy do czynienia z plikiem wygenerowanym przez narzdzie tar.
Moemy sprbowa rozpakowa ten plik za pomoc narzdzia gzip i ponownie uy polecenia
file. Lepszym rozwizaniem bdzie jednak zastosowanie opcji polecenia -z:
$ file -z foo.x
foo.x: tar archive (gzip compressed data, from UNIX, max compression)

Tera dokadnie wiemy, czym dysponujemy.


Z reguy uytkownicy kieruj si intuicyjnymi konwencjami nazewnictwa plikw, a same
nazwy w zdecydowanej wikszoci przypadkw s podstawowym rdem wiedzy o rodzajach
plikw archiwalnych i sposobie ich opracowania.

1.4.2. Przegldanie zawartoci plikw archiwalnych


Pliki archiwalne ledz informacje o zawieranych plikach w formie swoistego spisu treci, ktry
mona uzyska (co jest do wygodne), stosujc flag -t. Jest ona obsugiwana przez wszystkie
wspomniane do tej pory narzdzia archiwizujce. Poniej przedstawiono sposb uycia tej flagi
na przykadzie instalacji cron systemu Debian:
$ tar -tzvf data.tar.gz
drwxr-xr-x root/root
drwxr-xr-x root/root
drwxr-xr-x root/root
-rwsr-xr-x root/root
drwxr-xr-x root/root
-rwxr-xr-x root/root

0
0
0
22460
0
25116

2001-10-01
2001-10-01
2001-10-01
2001-10-01
2001-10-01
2001-10-01

07:53:19
07:53:15
07:53:18
07:53:18
07:53:18
07:53:18

./
./usr/
./usr/bin/
./usr/bin/crontab
./usr/sbin/
./usr/sbin/cron

W powyszym przykadzie dodatkowo uyto opcji -v, wymuszajcej doczanie dodatkowych


informacji podobnych do tych znanych z dugich list polecenia ls. Dane wyjciowe obejmuj
uprawnienia waciwe dla poszczeglnych plikw (w pierwszej kolumnie) i informacje o wasnoci
(w drugiej kolumnie). Kolejna, trzecia kolumna zawiera rozmiary plikw (wyraone w bajtach);
warto zwrci uwag na katalogi, ktrych rozmiar wynosi 0. Analizujc zawarto pliku archiwalnego, naley zwraca szczegln uwag na wasno i uprawnienia waciwe dla poszczeglnych
plikw.
Podstawowe polecenia umoliwiajce wywietlanie zawartoci plikw archiwalnych w rnych
formatach przedstawiono w tabeli 1.3. Dla wszystkich trzech formatw uzyskujemy niemal identyczne dane wynikowe.

1.4.

37

Wprowadzenie do tematyki plikw archiwalnych

TABELA 1.3.

Polecenia przegldania plikw archiwalnych

Format

Polecenie

Archiwum narzdzia tar

tar tvf nazwa_pliku

Archiwum narzdzia tar, skompresowane


za pomoc narzdzia gzip

tar -tzvf nazwa_pliku

Archiwum narzdzia tar, skompresowane


za pomoc narzdzia bzip2

tar -tjvf nazwa_pliku

Archiwum narzdzia cpio

cpio tv < nazwa_pliku

Uwagi

Narzdzie cpio wykorzystuje


stdin i stdout w roli strumieni
binarnych

Czytanie symbolicznej reprezentacji uprawnie dostpu do pliku jest do proste wystarczy si przyzwyczai do tego specyficznego formatu. Warto opanowa popularne zabiegi majce
na celu reprezentowanie dodatkowych informacji (oprcz standardowych uprawnie odczytu,
zapisu i wykonywania).
W pierwszej kolejnoci zajmiemy si samym acuchem uprawnie. Skada si on z 10 znakw.
Pierwszy znak okrela rodzaj plikw, pozostae trzy trjznakowe grupy opisuj odpowiednio:
uprawnienia waciciela pliku, uprawnienia czonkw grupy i uprawnienia wszystkich pozostaych uytkownikw.
Typ pliku jest reprezentowany przez pojedynczy znak. Dopuszczalne wartoci tego znaku wraz
ze znaczeniami przedstawiono w tabeli 1.4.
Kolejne dziewi znakw mona podzieli na trzy grupy po trzy bity. Poszczeglne bity reprezentuj odpowiednio: uprawnienia odczytu (r), zapisu (w) i wykonywania (x) pliku. Znak - na
ktrej z tych pozycji oznacza, e dane uprawnienia nie zostay ustawione. Przykadowo znak - na
pozycji w oznacza, e dany plik nie jest dostpny do zapisu. Kilka prostych przykadw przedstawiono w tabeli 1.5.
Przy okazji analizy uprawnie warto jeszcze wspomnie o bitach setuid, setgid i sticky.
Wspomnianych bitw do tej pory nie uwzgldnialimy, poniewa ich wpyw ogranicza si do
zachowania plikw wykonywalnych.
Jeli bit setuid jest ustawiony, kod danego pliku bdzie wykonywany z wykorzystaniem identyfikatora waciciela tego pliku w roli faktycznego identyfikatora uytkownika. Oznacza to, e
nasz program moe realizowa wszelkie zadania, do ktrych jest uprawniony waciciel odpowiedniego pliku. Jeli dany plik naley do administratora i jeli jest ustawiony bit setuid tego pliku,

38

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

TABELA 1.4.

Typy plikw na listach zawartoci archiww

Kod

Znaczenie

Uwagi

Standardowy plik

Do tej kategorii zaliczamy pliki tekstowe, pliki z danymi,


pliki wykonywalne itp.

Katalog

Urzdzenie znakowe

Plik specjalny, wykorzystywany w procesie komunikacji ze sterownikiem


urzdzenia znakowego (ang. character device). Tego rodzaju pliki
tradycyjnie mog by skadowane tylko w katalogu /dev i zwykle nie s
umieszczane w plikach archiwalnych

Urzdzenie blokowe

Plik specjalny, wykorzystywany w procesie komunikacji ze sterownikiem


urzdzenia blokowego (ang. block device). Tego rodzaju pliki tradycyjnie
mog by skadowane tylko w katalogu /dev i zwykle nie s umieszczane
w plikach archiwalnych

Dowizanie symboliczne

Nazwa pliku wskazujca na inny plik. Wskazywany plik moe by


skadowany w innym systemie plikw lub nawet moe w ogle nie istnie

TABELA 1.5.

Przykady bitw uprawnie do pliku

Uprawnienia
rwx

Dany plik moe by odczytywany, zapisywany i wykonywany

rw-

Dany plik moe by odczytywany i zapisywany, ale nie moe by wykonywany

r-x

Dany plik moe by odczytywany i wykonywany, ale nie moe by zapisywany

--x

Dany plik moe by wykonywany, ale nie moe by odczytywany ani zapisywany

zawarty w nim kod moe modyfikowa i usuwa dowolne pliki w ramach systemu (niezalenie
od tego, ktry uytkownik uruchomi ten program). Brzmi dziwnie, prawda? W przeszoci programy z ustawionym bitem setuid byy przedmiotem atakw.
Za to samo zadanie odpowiada bit setgid, z t rnic, e kod zawarty w tak oznaczonym
pliku jest wykonywany z przywilejami grupy, do ktrej ten plik naley. Standardowo pliki wykonywalne s wykonywane z przywilejami waciwymi dla grupy, do ktrej naley uytkownik uruchamiajcy odpowiednie programy. Jeli bit setgid jest ustawiony, program dziaa tak, jakby zosta
uruchomiony przez uytkownika nalecego do tej samej grupy co jego waciciel.
Plik z ustawionym bitem setuid lub setgid mona rozpozna, zerkajc na bit x acucha
uprawnie. Litera x na tej pozycji standardowo oznacza, e mamy do czynienia z plikiem wykonywalnym, a znak - oznacza, e nie jest to plik wykonywalny.

1.4.

Wprowadzenie do tematyki plikw archiwalnych

39

Bity setuid i setgid dodaj jeszcze dwie moliwe wartoci tego znaku. Maa litera s (zamiast
litery x) w bicie uprawnie waciciela oznacza, e dany plik moe by wykonywany przez swojego waciciela i e ustawiono jego bit setuid. Take wielka litera S oznacza, e ustawiono bit
setuid, ale waciciel danego pliku nie dysponuje prawem jego wykonywania. Wyglda to do
dziwacznie, ale taka konstrukcja jest dopuszczalna i bywa niebezpieczna. Plik moe nalee np.
do administratora, ktry nie moe tego pliku wykona. Linux daje administratorowi prawo uruchamiania kadego pliku, pod warunkiem e ktokolwiek dysponuje takimi uprawnieniami.
Oznacza to, e nawet jeli bit wykonywalnoci dla administratora nie zostanie ustawiony, dopki
biecy uytkownik ma takie prawo, kod zawarty w danym pliku zostanie wykonany z przywilejami administratora.
Bit setgid , podobnie jak bit setuid, mona zmieni, modyfikujc pozycj x w ramach czci
acucha uprawnie, reprezentujcej prawa grupy. Maa litera s oznacza, e dla danego pliku ustawiono bit setgid i e czonkowie danej grupy dysponuj prawem jego wykonywania. Wielka litera
S oznacza, e dla danego pliku ustawiono bit setgid, ale czonkowie danej grupy nie mog tego
pliku wykonywa.
W danych wynikowych, wygenerowanych dla pakietu cron (przedstawionych we wczeniejszej czci tego rozdziau), wida, ze program crontab ma ustawiony bit setuid i e naley do
administratora. Dodatkowe przykady przedstawiono w tabeli 1.6.
Bit sticky naley traktowa jak relikt przeszoci. W zaoeniu mia gwarantowa szybkie adowanie wybranych programw wykonywalnych przez utrzymywanie ich w stronach kodowych na
dysku wymiany. W systemie Linux bit sticky jest stosowany wycznie dla katalogw i ma zupenie
inne znaczenie. Kiedy nadajemy innym uytkownikom uprawnienia zapisu i wykonywania plikw
skadowanych w naszym katalogu, mog oni swobodnie tworzy pliki w tym katalogu i usuwa je.
Jednym z przywilejw, ktrych z rnych wzgldw moemy nie chcie nadawa, jest moliwo
usuwania plikw nalecych do innych uytkownikw. Jeli jaki uytkownik dysponuje prawem
zapisu w ramach jakiego katalogu, zwykle moe usuwa z tego katalogu dowolne pliki (nie tylko
te, ktre do niego nale). Moemy ten przywilej odebra, ustawiajc bit sticky dla interesujcego
nas katalogu. Z tak oznaczonego katalogu uytkownicy mog usuwa tylko swoje pliki. Jak zwykle
w tego rodzaju sytuacjach waciciel katalogu i administrator zachowuje prawo usuwania wszystkich
plikw. W wikszoci systemw bit sticky jest ustawiany dla katalogu /tmp.
Katalog z ustawionym bitem sticky jest oznaczany liter t lub T w miejscu reprezentujcym
uprawnienia wykonywania, nadane pozostaym uytkownikom. Przykady takich rozwiza przedstawiono poniej:
-rwxrwxrwt

Dany katalog moe by odczytywany i zapisywany przez wszystkich uytkownikw; dla tego katalogu ustawiono bit sticky

40

TABELA 1.6.

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

Wybrane przykady uprawnie wraz ze znaczeniami

acuch
uprawnie

Uprawnienia
wykonywania

Efektywny identyfikator
uytkownika

Efektywny identyfikator
grupy

-rwxr-xr-x

Dany plik moe by wykonywany


przez wszystkich uytkownikw

Uytkownik biecy

Uytkownik biecy

-rw-r-xr-x

Dany plik moe by wykonywany


przez wszystkich czonkw
odpowiedniej grupy z wyjtkiem
jego waciciela

Uytkownik biecy

Uytkownik biecy

-rwsr-xr-x

Dany plik moe by wykonywany


przez wszystkich uytkownikw

Waciciel pliku

Uytkownik biecy

-rwSr-xr-x

Dany plik moe by wykonywany


przez wszystkich z wyjtkiem jego
waciciela

Waciciel pliku

Uytkownik biecy

-rwxr-sr-x

Dany plik moe by wykonywany


przez wszystkich uytkownikw

Uytkownik biecy

Waciciel grupy

-rwsr-sr-x

Dany plik moe by wykonywany


przez wszystkich uytkownikw

Waciciel pliku

Waciciel grupy

-rwsr-Sr-x

Dany plik moe by wykonywany


przez wszystkich uytkownikw
wcznie z jego wacicielem, ale
z wyjtkiem czonkw danej grupy

Waciciel pliku

Waciciel grupy

-rwxrwxT

Zawarto danego katalogu moe by odczytywana i zapisywana tylko przez jego


waciciela i czonkw grupy; dla tego katalogu ustawiono bit sticky

1.4.3. Rozpakowywanie plikw z pliku archiwalnego


Skoro wiemy ju, jak przeglda zawarto pliku archiwalnego, warto si bliej przyjrze problemowi wyodrbniania plikw zawartych w archiwach. Podstawowe polecenia przedstawiono
w tabeli 1.7.
Chocia rozpakowywanie plikw z archiww jest operacj do bezpieczn, warto zwraca
uwag na cieki do katalogw, aby wyeliminowa ryzyko nadpisania danych w naszym systemie.
Szczegln ostrono naley zachowywa, korzystajc z narzdzia cpio, ktre moe skadowa
w plikach archiwalnych cieki bezwzgldne (poczwszy od katalogu gwnego). Oznacza to, e
jeli plik archiwalny narzdzia cpio zawiera pliki w katalogu /etc, jego rozpakowanie moe dopro-

1.4.

41

Wprowadzenie do tematyki plikw archiwalnych

TABELA 1.7.

Polecenia rozpakowywania plikw z pliku archiwalnego

Format

Polecenie

Uwagi

Archiwum narzdzia tar

tar -xf nazwa_pliku

To polecenie domylnie wypakowuje


pliki do biecego katalogu

Archiwum narzdzia tar,


skompresowane za pomoc
narzdzia gzip

tar -xzf nazwa_pliku

Archiwum narzdzia tar,


skompresowane za pomoc
narzdzia bzip2

tar -xjf nazwa_pliku

Archiwum narzdzia cpio

cpio -i -d < nazwa_pliku

Musimy pamita o ciekach


bezwzgldnych

Archiwum narzdzia ar

ar x nazwa_pliku

Pliki nie obejmuj informacji o ciekach

wadzi do niezamierzonego nadpisania plikw ju skadowanych w tym katalogu. Wyobramy


sobie archiwum narzdzia cpio, zawierajce m.in. kopi pliku /etc/hosts. Jeli sprbujemy rozpakowa pliki z tego archiwum, narzdzie cpio podejmie prb nadpisania naszej kopii pliku /etc/hosts.
atwo to sprawdzi, wykonujc nastpujce polecenie:
cpio -t < foo.cpio
/etc/hosts

Pocztkowy znak ukonika (/) jest wskazwk sugerujc, e nasze archiwum przywrci t
konkretn kopi pliku /etc/hosts. Oznacza to, e jeli sprbujemy rozpakowa pliki wycznie
celem ich sprawdzenia, najprawdopodobniej bdziemy chcieli unikn nadpisania naszych kopii
tego samego pliku. W tej sytuacji naleaoby uy opcji GNU --no-absolute-filenames, aby plik
hosts zosta wypakowany do cieki:
./etc/hosts
Na szczcie z archiwami narzdzia cpio bdziemy mieli do czynienia wycznie w ramach
plikw pakietw RPM, a meneder pakietw RPM zawsze stosuje cieki wzgldne wobec biecego katalogu, aby wbrew naszej woli nie nadpisa plikw systemowych.
Warto pamita, e take wersja narzdzia tar, oferowana w ramach niektrych wersji systemu operacyjnego Unix, umoliwia stosowanie cieek bezwzgldnych. Wersja GNU narzdzia
tar, stosowana w systemach Linux, automatycznie usuwa pocztkowy znak / ze cieek do rozpakowywanych plikw. Oznacza to, e nawet jeli bdziemy dysponowali archiwum narzdzia

42

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

tar, wygenerowanym przez jedn ze wspomnianych wersji systemu Unix, narzdzie tar w wersji
GNU wyeliminuje ryzyko nadpisania plikw przez usunicie ewentualnych znakw / z pocztku
cieek do spakowanych plikw.

1.5.

Poznajmy wykorzystywany meneder pakietw

Menedery pakietw to skomplikowane narzdzia odpowiedzialne za instalowanie i konserwacj


oprogramowania w naszym systemie. Menedery pakietw uatwiaj nam zarzdzanie instalowanym oprogramowaniem i rozmieszczeniem plikw. Za ich pomoc moemy te ledzi zalenoci
pomidzy pakietami, aby mie pewno, e instalowane oprogramowanie jest zgodne z oprogramowaniem ju zainstalowanym. Gdybymy np. chcieli zainstalowa pakiet KDE w komputerze
z zainstalowanym pakietem GNOME, meneder pakietw powinien zasygnalizowa brak wymaganych bibliotek czasu wykonywania. Taki mechanizm jest oczywicie nieporwnanie bardziej
wygodny od samodzielnego instalowania pakietw tylko po to, by stwierdzi, e ich uruchomienie
z jakiego powodu jest niemoliwe.
Jednym z najcenniejszych elementw funkcjonalnoci, oferowanych przez meneder pakietw,
jest moliwo odinstalowywania oprogramowania. Za pomoc odpowiednich mechanizmw
moemy instalowa wybrane fragmenty oprogramowania, sprawdza ich dziaanie i jeli nie
przypadn nam do gustu odinstalowywa niepotrzebne rozwizania. Po odinstalowaniu pakietu
system wraca do konfiguracji sprzed jego instalacji. Wanie odinstalowywanie oprogramowania
jest jednym ze sposobw jego aktualizacji. Wystarczy usun star wersj i zainstalowa now.
Wikszo menederw pakietw oferuje specjalne polecenie aktualizacji, ktre umoliwia nam
realizacj tego procesu w jednym kroku.
Meneder pakietw tworzy scentralizowan baz danych, odpowiedzialn za ledzenie zainstalowanych aplikacji. Jest ona take cennym rdem informacji o stanie naszego systemu. Moemy
np. wywietli list wszystkich aktualnie zainstalowanych aplikacji lub sprawdzi, czy interesujcy
nas program by stosowany od czasu instalacji. W niektrych sytuacjach samo przegldanie tej bazy
danych bywa ciekawym dowiadczeniem uytkownik odkrywa oprogramowanie, o ktrego
istnieniu w ogle nie wiedzia.
Do najczciej stosowanych formatw pakietw naley RPM (RPM Package Manager2) oraz
Debian Package. Wybrane przykady tych i kilku innych formatw przedstawiono w tabeli 1.8.
Jak atwo si domyli, format RPM jest wykorzystywany przez dystrybucje Red Hat i Fedora,
okazuje si jednak, e jest wykorzystywany take przez dystrybucj Suse i wiele innych. Format

Nazywany wczeniej Red Hat Package Manager.

1.5.

Poznajmy wykorzystywany meneder pakietw

TABELA 1.8.

43

Kilka popularnych dystrybucji systemu Linux wraz z wykorzystywanymi w nich formatami


pakietw

Dystrybucja

Format pakietw

Red Hat

RPM

Fedora

RPM

Debian

Deb

Knoppix

Deb

Ubuntu

Deb

Gentoo

portage

Xandros

Deb

Mandriva (dawniej Mandrake)

RPM

MEPIS

Deb

Slackware

pkgtool

Debiana jest wykorzystywany nie tylko w ramach swojej macierzystej dystrybucji, ale te przez
wiele innych (m.in. Knoppix czy Ubuntu). Warto te zwrci uwag na pozostae menedery
pakietw: wykorzystywanego w dystrybucji Slackware menedera pkgtool oraz stosowanego
w dystrybucji Gentoo menedera portage.
Decyzja o wyborze waciwego menedera pakietu nie naley do nas (chyba e chcemy opracowa wasn dystrybucj systemu operacyjnego). Kada dystrybucja systemu Linux oferuje pojedyncze narzdzie odpowiedzialne za zarzdzanie zainstalowanym oprogramowaniem. Stosowanie dwch menederw pakietw w pojedynczym systemie nie miaoby najmniejszego sensu.
Jeli meneder pakietw, oferowany w ramach dystrybucji, w ktrej pracujemy, nie przypad nam
do gustu, wybr innej dystrybucji bdzie lepszym rozwizaniem ni prba wdroenia innego
menedera.
Kiedy ju zidentyfikujemy format, ktry powinnimy pobra, najprawdopodobniej staniemy
przed jeszcze jednym istotnym wyborem. Poniewa koncentrujemy si na oprogramowaniu typu
open source, musimy zakada moliwo pobrania z internetu kodu rdowego.

1.5.1. Wybr pomidzy kodem rdowym a wersj binarn


Jeli korzystamy z systemu operacyjnego Linux na platformie z procesorem 32-bitowym, zgodnym
ze standardem Intela, najprawdopodobniej bdziemy mieli moliwo pobierania oprogramowania
w formie gotowych, skompilowanych plikw binarnych (tzw. binariw). Binaria najczciej s

44

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

dostpne w formie pakietw, rzadziej w formie archiww narzdzia tar. Jeli zdecydujemy si
pobra i zainstalowa oprogramowanie w formie skompilowanych wczeniej binariw, w ogle
nie bdziemy musieli si zajmowa kodem rdowym (chyba e bdziemy tego chcieli).
Jeli korzystamy z systemu Linux na innej platformie ni procesor zgodny ze standardem
Intela, jedynym rozwizaniem jest pobranie kodu rdowego i jego samodzielna kompilacja.
W niektrych przypadkach moemy sami podj decyzj o takiej kompilacji mimo dostpnoci
odpowiednich plikw binarnych. Twrcy oprogramowania celowo generuj binaria tylko dla
architektur zapewniajcych jak najwiksz zgodno, aby trafi do moliwie szerokiej grupy
odbiorcw. Jeli dysponujemy najnowszym, najszybszym procesorem CPU, moemy uzna za
stosowne ponowne skompilowanie pobranego pakietu z myl o optymalizacji pod ktem tej konkretnej architektury (zamiast korzysta z wersji zoptymalizowanej dla starszych, wolniejszych
architektur).
Uytkownicy popularnej architektury Intela mog znale w internecie niezliczone, binarne
pliki wykonywalne, skompilowane dla architektury i386. Oznaczenie i386 odwouje si do procesora 80386, czyli swoistego najmniejszego wsplnego mianownika 32-bitowych architektur
Intela. Obecnie oznaczenie pakietu etykiet i386 najczciej odwouje si do architektury Pentium
lub nowszej. Wiele pakietw oznacza si bardziej precyzyjn etykiet i586, ktra wprost wskazuje
na procesor Pentium. Tak czy inaczej, kod skompilowany i zoptymalizowany z myl o procesorze Pentium wcale nie musi dziaa najefektywniej na procesorach Pentium 4 czy Xeon.
To, czy wydajno oprogramowania rzeczywicie wzronie po jego skompilowaniu dla nowszych procesorw, zaley od poszczeglnych aplikacji. Nigdy nie mamy gwarancji, e kada aplikacja w widoczny sposb przyspieszy dziaanie wskutek kompilacji z myl o docelowej platformie.
W tabeli 1.9 wymieniono i krtko opisano najczciej spotykane etykiety architektur, stosowane w nazwach pakietw RPM. Mimo e przedstawione oznaczenia w wielu przypadkach s
identyczne jak etykiety stosowane przez kompilator GNU, nie naley ich z sob utosamia. Etykiety pakietw czsto s swobodnie wybierane przez twrcw oprogramowania i jako takie nie
musz odpowiada faktycznemu sposobowi kompilacji. Przykadowo: zdecydowana wikszo
wspczesnych pakietw oznaczanych etykiet i386 w praktyce jest kompilowana dla platformy
Pentium lub Pentium II. Poniewa mao kto uruchamia dzi system Linux na procesorach 80386,
nikt nie protestuje przeciwko takiemu stanowi rzeczy.
Kompilowanie kodu rdowego nie zawsze jest trudne. W przypadku stosunkowo prostych
projektw, np. narzdzi tekstowych, taka kompilacja moe by do prosta. W przypadku projektw bardziej zoonych, np. przegldarek internetowych lub edytorw tekstu, kompilacja
moe si okaza wyjtkowo kopotliwa. Oglnie rzecz biorc, im wikszy projekt, tym wicej

1.5.

Poznajmy wykorzystywany meneder pakietw

TABELA 1.9.

45

Przegld architektur

Oznaczenie

Opis

i386

Najbardziej popularna architektura, z jak bdziemy mieli do czynienia (w kompilatorze


gcc etykieta i386 odnosi si wycznie do procesorw 80386). Widzc tak oznaczony pakiet,
naley przyjmowa, e zawarte w nim oprogramowanie bdzie wymagao procesora nie
starszego ni Pentium I

i486

Wyjtkowo rzadko stosowana etykieta. Najczciej zaoenie o zgodnoci tak oznaczonego


pakietu z architektur 80486 (lub zgodn) jest w peni bezpieczne

i586

Coraz bardziej popularna etykieta. Kompilator GNU stosuje etykiet i586 do opisywania
procesorw z serii Pentium I. Oznacza to, e od tak oznaczonych pakietw naley oczekiwa
zgodnoci z dowolnym procesorem klasy Pentium lub nowszym

i686

Kompilator GNU wykorzystuje etykiet i686 do opisywania procesorw z serii Pentium


Pro, ktre stanowiy podstaw dla procesorw Pentium II i nowszych. Widzc tak oznaczony
pakiet, naley przyjmowa, e zawarte w nim oprogramowanie bdzie wymagao procesora
Pentium II lub nowszego

ix86

Etykieta ix86 nie jest stosowana zbyt czsto, ale zaoenie o bezpiecznym dziaaniu na
komputerach Pentium lub nowszych z reguy okazuje si zasadne

x86_64

Reprezentuje procesory AMD Opteron oraz Intel Pentium 4 z rozszerzeniami EM64T.


Te nowoczesne architektury oferuj moliwo przetwarzania 32- i 64-bitowego. Tak
oznaczony kod jest kompilowany z myl o pracy w trybie 64-bitowym, co oznacza brak
jego zgodnoci z procesorami 32-bitowymi taki kod nie bdzie dziaa ani na procesorach
Opteron, ani na procesorach z rozszerzeniem EM64T, jeli sprbujemy go uruchomi
w systemie z 32-bitowym jdrem systemu Linux

IA64

Etykieta IA64 odwouje si wprost do 64-bitowych procesorw Itanium. Itanium jest


jedyn w swoim rodzaju architektur koncernw Intel i Hewlett-Packard, stosowan
wycznie w bardzo drogich stacjach roboczych i superkomputerach

ppc

Procesory PowerPC G2, G3 i G4, instalowane w niektrych komputerach Apple Macintosh


i Apple iMac

ppc64

Procesor PowerPC G5, stosowany w komputerach Apple iMac

sparc

Procesor SPARC, stosowany w stacjach roboczych firmy Sun

sparc64

64-bitowy procesor SPARC, stosowany w stacjach roboczych firmy Sun

mipseb

Procesor MIPS, stosowany przede wszystkim w stacjach roboczych firmy SGI

46

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

bibliotek pomocniczych bdziemy potrzebowa do jego kompilacji. Na przykad wielkie projekty z graficznym interfejsem uytkownika (GUI) z reguy korzystaj z wielu rnych bibliotek
programowych, ktre rzadko s zainstalowane w naszym systemie. Poszukiwanie waciwych
wersji wszystkich tych pakietw bywa czasochonne, a w skrajnych przypadkach okazuje si wrcz
niewykonalne. Problem kompilowania kodu rdowego projektw omwimy bardziej szczegowo w rozdziale 2. Poszukujc oprogramowania, powinnimy si kierowa dostpnoci odpowiednich plikw binarnych.

1.5.2. Praca z pakietami


Twrcy wielu nowych dystrybucji systemu Linux staraj si w moliwie duym stopniu uatwia
prac uytkownikowi, aby mg korzysta z systemu Linux nawet bez wiadomoci funkcjonowania w tle menedera pakietw. Mimo to warto opanowa dziaanie tego rodzaju narzdzi, jeli
tylko planujemy wychyli gow poza miejsca przygotowane dla nas przez autorw dystrybucji.
Znajomo otoczenia odpowiedzialnego za zarzdzanie pakietami bywa bardzo przydatne, kiedy
co idzie nie po naszej myli. Podstawowe funkcje, ktrych moemy oczekiwa od menederw
pakietw, obejmuj:
instalacj nowego oprogramowania w systemie,
usuwanie (odinstalowywanie) oprogramowania z systemu,
weryfikacj zainstalowanych plikw pod ktem prawidowej instalacji lub ewentualnych
uszkodze,
aktualizacj zainstalowanych wersji oprogramowania,
analiz zainstalowanego oprogramowania (np. identyfikacj pakietw, w ramach ktrych
zainstalowano poszczeglne pliki),
analiz zawartoci pakietw przed instalacj.

1.6.

Kilka sw o bezpieczestwie w kontekcie pakietw

Niemal kady uytkownik komputera ma jakie dowiadczenia z tzw. zoliwym oprogramowaniem (ang. malware, malicious software). Uytkownicy systemu Linux czsto otrzymuj
dziwaczne wiadomoci poczty elektronicznej od swoich przyjaci pracujcych w systemie
Windows wiele takich wiadomoci jest wynikiem najnowszych wirusw rozprzestrzeniajcych
si pomidzy komputerami z systemem Windows za porednictwem internetu.

1.6.

Kilka sw o bezpieczestwie w kontekcie pakietw

47

Zoliwe oprogramowanie to co wicej ni tylko wirusy rozsyane za porednictwem poczty


elektronicznej zaliczamy do tej kategorii wszystkie programy, ktre s instalowane i uruchamiane w systemie bez naszej zgody i wiedzy. S to wirusy, programy szpiegujce (ang. spyware)
i kade destrukcyjne oprogramowanie, ktre w ten czy inny sposb uzyskuje dostp do naszego
systemu. Obrocy systemu Windows argumentuj, e platforma firmy Microsoft tak czsto staje
si celem atakw twrcw zoliwego oprogramowania tylko dlatego, e jest stosowana na duo
wikszej liczbie komputerw ni system Linux. Chocia z samym uzasadnieniem trudno si spiera, naley pamita, e system Windows jest te duo wdziczniejszym obiektem atakw. Pit
achillesow systemw Windows 98, Windows ME i wersji domowych systemu Windows XP jest
moliwo uzyskiwania dostpu do wszystkich plikw przez wszystkich uytkownikw i wprowadzania zmian o zasigu systemowym. Oznacza to, e niedowiadczony uytkownik systemu
Windows, klikajc zacznik do wiadomoci, moe przeksztaci swj komputer w potwora przeprowadzajcego ataki blokowania usug (ang. Denial of Service DoS) lub usuwajcego zawarto
dysku C.
Motywy kierujce autorami zoliwego oprogramowania bywaj bardzo rne zdarza si, e
takie oprogramowanie jest narzdziem w dziaaniach przestpczoci zorganizowanej, osb dnych zemsty lub zwykych wandali. Nigdy nie moemy zakada, e akurat nasz komputer nie
stanie si celem ataku.
Wielu uytkownikw systemu Linux sdzi, e ich komputery s odporne na dziaanie zoliwego oprogramowania, co nie jest prawd. Plik JBellz w formacie MP3 by np. koniem trojaskim, wykorzystujcym luk w zabezpieczeniach programu mpg123 (odtwarzacza plikw MP3,
oferowanego w trybie open source dla systemw Linux). Kiedy uytkownik prbowa odtworzy
ten plik za pomoc innego programu, wszystko wskazywao na to, e ma do czynienia z plikiem
uszkodzonym bez moliwoci odtworzenia. Plik JBellz by wic dobrze zaprojektowanym programem, ktry opracowano z myl o konkretnej luce w programie mpg123. Program mpg123
zawiera bd przepenienia bufora, umoliwiajcy odpowiednio spreparowanemu plikowi MP3
wykonywanie dowolnego skryptu. W przypadku pliku JBellz wspomniany skrypt usuwa zawarto katalogu domowego uytkownika.
Chocia jest mao prawdopodobne, by nasze komputery pracujce pod kontrol systemu Linux
rozpowszechniay wirusy na tak skal jak komputery z systemem Microsoft Windows, musimy
pamita o potencjalnych lukach w zabezpieczeniach. Przewidywanie zdarze podobnych do
pojawienia si konia trojaskiego JBellz jest niemoliwe, jedyne zatem, co nam pozostaje, to
uwzgldnianie z naleyt uwag wszelkich ostrzee. W przypadku wspomnianego pliku uszkodzenia obejmoway swoim zasigiem dane pojedynczego uytkownika system nie by wic
zagroony przynajmniej do czasu odtworzenia tego pliku przez administratora.

48

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

Mona by wskaza jeszcze wiele przykadw luk dla zoliwego oprogramowania, pozostawionych w kodzie rdowym popularnych pakietw. Jednym z nich by kod rdowy pakietu
OpenSSH3. Luka w kodzie OpenSSH polegaa na pozostawieniu furtki nadajcej intruzowi takie
same uprawnienia, jakimi dysponowaa osoba, ktra skompilowaa ten kod. Oznacza to, e jeli
pobralimy tak zmodyfikowany kod pakietu OpenSSH, skompilowalimy go i zainstalowalimy,
musimy si liczy z ryzykiem wykorzystania tej luki przez osob niepowoan.
Linux nie oferuje adnego odpowiednika programu antywirusowego, ktry mona by wykorzysta do skanowania programw pod ktem zainfekowania w rodowisku Linux musimy
bazowa na zaufaniu i uwierzytelnianiu. Istniej dwa bardzo rne podejcia do problemu wirusw: proaktywne i reaktywne. W systemach Windows bez wtpienia obowizuje zasada reaktywnoci, co wcale nie oznacza, e czynnik zaufania traci na znaczeniu. Kiedy pobieramy z internetu program systemu Windows, musimy przyjmowa, e nasze definicje wirusw s aktualne
i e nie jestemy pierwszymi uytkownikami, ktrzy ucierpi z powodu pojawienia si zupenie
nowego wirusa. Zupenie inna zasada obowizuje w systemach Linux, ktrych uytkownicy
powinni przestrzega reguy ufaj, ale sprawdzaj jej stosowanie w najwikszym skrcie polega
na uwierzytelnianiu oprogramowania i korzystaniu z aplikacji zaufanych producentw. (Problemem uwierzytelniania zajmiemy si w kolejnym podrozdziale).
Jednym z elementw decydujcych o wikszym bezpieczestwie systemw Linux jest brak
moliwoci instalowania oprogramowania przez uytkownikw pozbawionych odpowiednich
uprawnie. Uytkownik instalujcy oprogramowanie musi dysponowa przywilejami administratora, musi si zatem albo zalogowa jako root, albo uy programu sudo (lub podobnego).
Okazuje si, e wspomniane wymaganie jest te rdem saboci systemu, poniewa wikszo
programw wymaga wykonywania skryptw zarwno w czasie ich instalacji, jak i w czasie ich
usuwania. Niezalenie od poziomu naszej wiadomoci w tej kwestii, uruchamiajc skrypty
pobrane w ramach pakietu, obdarzamy jego twrc sporym zaufaniem (w nadziei, e uruchamiany
skrypt nie naruszy zasad bezpieczestwa). W tej sytuacji uwierzytelnianie autora pakietu jest kluczowym krokiem w kierunku bezpieczestwa systemu, w ktrym pracujemy.

1.6.1. Potrzeba uwierzytelniania


O bezpieczestwie systemu nie decyduje tylko to, co uruchamiamy, ale te to, kiedy to robimy.
Uytkownik systemu Linux moe tworzy i prbowa uruchamia dowolne rodzaje zoliwego
oprogramowania, bez uprawnie administratora nie bdzie mg jednak przej kontroli nad
caym komputerem. Warto wic pamita, e wszystkie formaty pakietw mog obejmowa skrypty
3

Patrz strona internetowa http://www.cert.org/advisories/CA-2002-24.html.

1.6.

Kilka sw o bezpieczestwie w kontekcie pakietw

49

wykonywane w czasie ich instalacji i (lub) usuwania. Zwykle s to skrypty powoki Bournea,
wykonywane z uprawnieniami administratora i tym samym mogce wykonywa dosownie wszystkie operacje. Wanie te skrypty stanowi potencjaln kryjwk dla zoliwego oprogramowania koni trojaskich, std konieczno kadorazowego uwierzytelniania oprogramowania jeszcze przed instalacj (nie przed uruchomieniem).
W tej sytuacji powinnimy podchodzi niechtnie do narzdzi wymagajcych uprawnie
administratora (jedynym wyjtkiem od tej reguy jest sam meneder pakietw). Baza danych
o pakietach jest sercem typowej dystrybucji i jako taka moe by dostpna wycznie dla administratora. Pakiety mona uwierzytelnia na wiele rnych sposobw. Narzdzie rpm oferuje np.
wbudowane funkcje uwierzytelniajce. Uytkownicy innych dystrybucji, np. Debiana, musz
uwierzytelnia oprogramowanie w ramach odrbnego kroku.

1.6.2. Podstawowe uwierzytelnianie pakietw


Uwierzytelnianie pakietw w najprostszej formie wymaga uycia tzw. funkcji mieszajcej (ang.
hashing function). Idea stosowania tej funkcji przypomina troch mechanizm sum kontrolnych,
ktre maj na celu unikatow identyfikacj danych w formie sumy wszystkich skadajcych si na
nie bajtw. Suma kontrolna wszystkich bajtw danego pliku nie wystarczy jednak do zagwarantowania bezpieczestwa. Nie do, e identyczna suma kontrolna moe cechowa wiele rnych
zbiorw danych, to jeszcze manipulowanie danymi celem osignicia waciwej sumy nie stanowi
adnego problemu. W tej sytuacji proste sumy kontrolne nigdy nie s stosowane do uwierzytelniania pakietw z uwagi na atwo podrabiania podpisw w tej formie.
Warto generowan przez funkcj mieszajc okrela si mianem skrtu (ang. hash). Moe
on, podobnie jak suma kontrolna, reprezentowa zbir danych dowolnej wielkoci w formie
pojedynczej wartoci staej dugoci. Inaczej ni w przypadku sumy kontrolnej, wynik dziaania
funkcji mieszajcej jest nieprzewidywalny, co znacznie utrudnia modyfikowanie danych z myl
o osigniciu okrelonego kodu. Wikszo algorytmw mieszajcych wykorzystuje wielkie klucze
(np. 128-bitowe), co sprawia, e prawdopodobiestwo wygenerowania identycznych kluczy dla
dwch rnych zbiorw danych jest bliskie zeru. Jeli pobierzemy plik z nieznanego rda i jeli
dysponujemy kodem ze rda zaufanego, moemy by pewni dwch rzeczy:
prawdopodobiestwo uzyskania zmodyfikowanego pliku z identycznym kodem funkcji
mieszajcej jest wyjtkowo niskie;
szanse na zmodyfikowanie oprogramowania przez wprowadzenie do niego zoliwego kodu
z zachowaniem tego samego kodu s znikome.

50

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

Jednym z najbardziej popularnych narzdzi do tworzenia tego rodzaju kodw jest program

md5sum, zbudowany z wykorzystaniem algorytmu MD54 i generujcy kody 128-bitowe. Program md5sum nie tylko generuje kody funkcji mieszajcej, ale te moe je weryfikowa. Moemy

generowa kody, wskazujc nazwy interesujcych nas plikw w wierszu polece. W odpowiedzi
program md5sum wywietli w kolejnych wierszach kody wynikowe dla poszczeglnych plikw:
$ md5sum foo.tar bar.tar
af8e7b3117b93df1ef2ad8336976574f *foo.tar
2b1999f965e4abba2811d4e99e879f04 *bar.tar

Gotowe kody moemy wykorzysta w roli danych wejciowych programu md5sum celem
weryfikacji pobranych plikw:
$ md5sum
$ md5sum
foo.tar:
bar.tar:

foo.tar bar.tar > md5.sums


--check md5.sums
OK
OK

Kady kod jest reprezentowany przez 32-cyfrow liczb szesnastkow. (Informacja dla mniej
dowiadczonych Czytelnikw: kada cyfra szesnastkowa zajmuje 4 bity). Mona ten kod porwna z wartoci otrzyman z zaufanego rda, aby sprawdzi, czy pobrane dane s prawidowe.
Jeli kod MD5 pasuje do naszego wzorca, moemy by niemal pewni, e dany plik nie zosta zmieniony od chwili utworzenia wspomnianego kodu. Jedynym problemem jest to, czy rdo sumy
MD5 rzeczywicie jest godne zaufania z pewnoci nie powinno to by to samo miejsce, z ktrego pobrano waciwy pakiet. Jeli pobrany plik jest koniem trojaskim, a witryna rdowa bya
celem skutecznego ataku, naley zakada, e take kody MD5 oferowane przez t witryn zostay
podmienione.
Przypumy, e chcemy pobra najnowsz i najdoskonalsz wersj pakietu biurowego
OpenOffice z witryny internetowej OpenOffice.org. Skoro ta oficjalna witryna kieruje nas na
jedn z wielu witryn lustrzanych, skd pewno, e ktry z tych serwerw nie by celem ataku
i e interesujcego nas pakietu nie zastpiono koniem trojaskim? W tym i podobnych przypadkach dobrym rozwizaniem jest powrt na witryn oficjaln i pobranie pliku z sum MD5 wanie
za jej porednictwem. Witryna OpenOffice.org oferuje sumy MD5 dla wszystkich dostpnych
plikw, po pobraniu ktrego z tych plikw moemy zatem bez trudu porwna jego kod z kodem
dostpnym w witrynie oficjalnej. Zdarza si, e moemy pobra odpowiedni plik w formacie waciwym dla danych wejciowych programu md5sum; jeli nie, bdziemy musieli przygotowa odpo4

MD5 jest skrtem od Message Digest algorithm number 5.

1.6.

Kilka sw o bezpieczestwie w kontekcie pakietw

51

wiedni plik samodzielnie przez skopiowanie i wklejenie kodu wywietlonego przez przegldark
internetow. Poniej przedstawiono sum dla pobranego pliku Ooo_1.1.4_LinuxIntel_install.tar.gz,
wklejon do pliku md5.sum:
cf2d0beb6cae98acae81e4d690d63094 Ooo_1.1.4_LinuxIntel_install.tar.gz

Warto pamita, e program md5sum jest mao elastyczny w kwestii obsugi znakw biaych.
md5sum oczekuje, e kod wejciowy nie jest poprzedzony adn spacj i jest oddzielony od nazwy
pliku dokadnie dwiema spacjami. Kada inna skadnia spowoduje zasygnalizowanie bdu.
Kiedy ju bdziemy dysponowali plikiem md5.sum, bdziemy mogli sprawdzi pobrany plik
pakietu za pomoc nastpujcego polecenia:
$ md5sum --check md5.sum
OOo_1.1.4_LinuxIntel_install.tar.gz: OK

Przedstawiony przykad pokazuje, e w tym konkretnym przypadku program md5sum jednoznacznie potwierdza poprawno sumy MD5. Oznacza to, e plik pobrany z niesprawdzonej
witryny pasuje do sumy MD5 dostpnej w oficjalnej witrynie internetowej OpenOffice.org. Teraz
moemy by pewni, e dysponujemy uwierzytelnion kopi danego pliku (zakadajc, e sama
witryna OpenOffice.org nie bya przedmiotem skutecznego ataku).

1.6.3. Uwierzytelnianie pakietw z podpisami cyfrowymi


Innym rodzajem kodu (alternatywnym wzgldem kodu MD5) jest podpis cyfrowy, ktry sprawdza si, gdy unikatowo uwierzytelnianych danych nie jest niezbdna. Uwierzytelnienie podpisu
cyfrowego wymaga tylko pojedynczego klucza publicznego, uzyskanego od osoby bd organizacji bdcej przedmiotem uwierzytelniania. Kiedy ju bdziemy dysponowali takim kluczem,
bdziemy mogli uwierzytelnia dowolne dane podpisane przez okrelonego autora. Oznacza to,
e nawet jeli kady z podpisw generowanych przez tego samego autora ma posta unikatowego kodu, uwierzytelnianie wszystkich produktw tego autora wymaga zaledwie jednego klucza
publicznego.
Producent, ktry chce podpisa swoje dane, musi wygenerowa dla nich dwa klucze: publiczny
i prywatny. Wspomniane klucze s tworzone na podstawie dugiego hasa (ang. passphrase) znanego tylko autorom oprogramowania. Zachowuj oni klucz prywatny w tajemnicy i jednoczenie udostpniaj klucz publiczny wszystkim zainteresowanym. Kada zmiana klucza prywatnego
lub danych uniemoliwi uwierzytelnienie oprogramowania. Warto pamita, e prawdopodobiestwo wygenerowania prawidowego podpisu z takim samym kluczem publicznym, ale innym

52

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

dugim hasem i kluczem prywatnym jest wyjtkowo niskie. Oznacza to, e szanse na podrobienie podpisu pasujcego do istniejcego klucza publicznego s minimalne.
Opisywana metoda bazuje na zaufaniu. Musimy bowiem uwierzy okrelonym programistom
i organizacjom, e nie bd podpisyway danych zainfekowanych zoliwym oprogramowaniem.
Musimy wierzy, e podejmuj kroki niezbdne do zachowania w tajemnicy kluczy prywatnych
i dugich hase. Musimy te mie zaufanie do rde, z ktrych pobieramy wykorzystywane klucze
publiczne. Jeli wspomniane witryny internetowe s godne zaufania, moemy by pewni, e uwierzytelniamy dane z wykorzystaniem waciwych kluczy publicznych.
Najczciej wykorzystywanym narzdziem do obsugi podpisw cyfrowych stosowanych dla
kodu open source jest GNU Privacy Guard (GPG). Proces podpisywania danych za pomoc tego
narzdzia przedstawiono na rysunku 1.1.

RYSUNEK 1.1. Proces podpisywania danych za pomoc narzdzia GPG

1.6.4. Podpisy narzdzia GPG, stosowane dla pakietw RPM


Format pakietw RPM umoliwia stosowanie podpisw narzdzia GPG z myl o autoryzacji
oprogramowania. Format RPM wykorzystuje te inne formy uwierzytelniania, w tym kody
(np. kody MD5), w ramach poszczeglnych pakietw. Mona te kody z powodzeniem wykorzystywa zarwno do wykrywania ewentualnych uszkodze pakietw wskutek bdw pobierania,

1.6.

Kilka sw o bezpieczestwie w kontekcie pakietw

53

jak i do potwierdzania ich prawidowego stanu (ju po instalacji), ale nie stanowi pomocy w procesie uwierzytelniania. Do uwierzytelniania pakietw w formacie RPM su wycznie podpisy
GPG. Alternatywnym rozwizaniem jest rczne uwierzytelnianie pakietw z wykorzystaniem
kodw MD5, pobieranych z zaufanego rda.
Narzdzie rpm obsuguje flag --checksig, ktra co jest pewnym utrudnieniem powoduje umieszczenie wszystkich kodw w jednym wierszu. Oznacza to, e jeli jaki plik nie zawiera
podpisu GPG, narzdzie rpm nadal bdzie potwierdzao poprawno sumy MD5. W razie braku
podpisu GPG otrzymamy we waciwym wierszu danych wynikowych komunikat gpg ok. Poniej przedstawiono przykadowe dane wyjciowe tego narzdzia:
$ rpm -checksig *.rpm
abiword-2.2.7-1.fc3.i386.rpm: sha1 md5 OK
abiword-plugins-impexp-2.2.7-1.fc3.i386.rpm: sha1 md5 OK
abiword-plugins-tools-2.2.7-1.fc2.i386.rpm: sha1 md5 OK
firefox-1.0-2.fc3.i386.rpm: (sha1) dsa sha1 md5 gpg OK
dpkg-1.10.21-1mdk.i586.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#26752624)

Chocia narzdzie rpm wywietlio pi plikw pakietw RPM, tylko pakiety firefox i dpkg
zawieraj podpisy GPG. Poniewa dysponujemy tylko kluczem publicznym pakietu firefox
(nie mamy takiego klucza dla pakietu dpkg), wanie firefox jest jedynym spord tych piciu
pakietw, ktry mona uzna za prawidowo uwierzytelniony. atwo zauway, e narzdzie rpm
w aden sposb nie wyrnio tego pakietu. Oznacza to, e nawet jeli sprawdzany pakiet jest
podpisany, nie dysponujemy rozwizaniem umoliwiajcym weryfikacj tego podpisu.
W powyszym przykadzie sygnatura pakietu firefox zostaa rozpoznana tylko dlatego, e
opracowano j w ramach projektu Red Hat i e narzdzie rpm uruchomilimy w dystrybucji
Fedora. Wspomniana dystrybucja obejmuje wiele kluczy publicznych, wykorzystywanych przez
firm Red Hat do podpisywania udostpnianych przez ni pakietw. Klucze publiczne s kopiowane na dysk twardy w czasie instalacji dystrybucji systemu Linux. Jeli pakiet RPM pobierzemy
z internetu i jeli jego sygnatur bdzie mona zweryfikowa pod ktem zgodnoci z ktrym
z tych kluczy, bdziemy mieli pewno, e dany pakiet nie rni si od tego opracowanego przez
firm Red Hat (i e nie zosta zainfekowany adnym zoliwym kodem). Odnalezienie klucza
publicznego pakietu dpkg jest niemoliwe, poniewa wspomniany pakiet pochodzi z dystrybucji
Mandrake, odpowiedni klucz nie jest zatem dostpny w instalacji systemu Fedora. W tej sytuacji
musimy odnale ten klucz gdzie indziej.
Jeli pobralimy pakiet z niewaciwym podpisem lub wymagajcy nieznanego klucza publicznego (tak byo w przypadku pakietu dpkg w powyszym przykadzie), narzdzie rpm wygeneruje
stosowne ostrzeenie ju na etapie instalacji tego pakietu. Okazuje si, niestety, e nawet w razie

54

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

Odnajdywanie brakujcego klucza publicznego


W internecie mona bez trudu znale witryny oferujce klucze publiczne narzdzia GPG, w wielu
przypadkach jednak najprostszym rozwizaniem jest pobieranie tych kluczy u rde. W prezentowanym przykadzie wykorzystamy klucz publiczny, zaczerpnity z dystrybucji systemu Mandrake. Mona
to atwo sprawdzi, wykonujc nastpujce polecenie:
$ rpm -qip dpkg-1.10.21-1mdk.i586.rpm
Name : dpkg
Version : 1.10.21
Release : 1mdk

Vendor: Mandrakesoft
Build Date: Thu May 20 07:03:20 2004

Host: n1.mandrakesoft.com
Packager : Michael Scherer <misc@mandrake.org>
URL
: http://packages.debian.org/unstable/base/dpkg.html
Summary : Package maintenance system for Debian

Poszukujc zaufanych kluczy publicznych, warto si kierowa kilkoma wskazwkami. W naszym


przypadku warto rozpocz poszukiwania od witryn internetowych mandrakesoft.com i mandrake.org.
Z uzyskanych przed chwil informacji o pakiecie wynika, e opracowano go w 2004 roku, co w dobie
internetu jest czasem wyjtkowo odlegym. Poniewa dystrybucje Mandrake zastpiono dystrybucjami Mandriva, wspomniane witryny ju od duszego czasu s niedostpne. Sytuacja si komplikuje. Potrzebujemy jeszcze jednej informacji o poszukiwanym kluczu jego identyfikatora:
$ rpm --checksig dpkg-1.10.21-1mdk.i586.rpm
dpkg-1.10.21-1mdk.i586.rpm: ...
... (GPG) NOT OK (MISSING KEYS: GPG 78d019f5)

W ten sposb otrzymalimy interesujcy nas identyfikator.


W kolejnym kroku powinnimy zajrze na oficjaln stron internetow dystrybucji Mandriva.
Wyszukiwarka Google kieruje nas pod adres http://mandriva.com/. W wyniku poszukiwania wyraenia
public keys w ramach tej witryny otrzymalimy stron z kilkoma kodami i jednym kluczem publicznym
(innym ni ten, ktrego szukamy). Take kilka kolejnych prb zakoczyo si niepowodzeniem. Wydaje
si, e utknlimy w martwym punkcie.
W tej sytuacji warto wpisa w wyszukiwarce Google wyraenie public keys, aby uzyska dug list
witryn oferujcych klucze publiczne. Metod prb i bdw odnalazem interesujcy nas klucz w witrynie http://keys.pgp.net/ (musiaem si posuy identyfikatorem 0x78d019f5):
Search results for '0x78d019f5'
Type bits/keyID cr. time exp time key expir
pub 1024D/78D019F5 2003-12-10
uid MandrakeContrib <cooker@linux-mandrake.com>

1.6.

Kilka sw o bezpieczestwie w kontekcie pakietw

55

sig sig3 78D019F5 2003-12-10 __________ __________ [selfsig]


sig sig3 70771FF3 2003-12-10 __________ __________ Mandrake Linux
<mandrake@mandrakesoft.com>
sig sig3 26752624 2003-12-10 __________ __________ MandrakeCooker <cooker@linuxmandrake.
com>
sig sig3 45D5857E 2004-09-22 __________ __________ Fabio Pasquarelli (Lavorro)
<fabiopasquarelli@tin.it>
sig sig3 17A0F9A0 2004-09-22 __________ __________ Fafo (Personale)
<rec.r96@tin.it>
sub 1024g/4EE127FA 2003-12-10
sig sbind 78D019F5 2003-12-10 __________ __________ []

Poszukiwany klucz udao mi si odnale na licie wygenerowanej dla wyraenia Mandrake. Po klikniciu hipercza 78D019F5 w oknie przegldarki zosta wywietlony klucz PGP (w formie zwykego
tekstu). Zaimportowanie tego klucza wymagao zapisania wywietlonego tekstu w pliku 78D019F5.txt.
Sama operacja importowania klucza sprowadza si do wykonania nastpujcego polecenia:
rpm --import 78D019F5.txt

Jeli skopiowany tekst zawiera prawidowy klucz publiczny, cay proces powinien przebiega
bezbdnie. I wreszcie moemy zweryfikowa poprawno oryginalnego pakietu za pomoc polecenia w postaci:
rpm --checksig dpkg-1.10.21-1mdk.i586.rpm
dpkg-1.10.21-1mdk.i586.rpm: (sha1) dsa sha1 md5 gpg OK

Z naszego punktu widzenia najwaniejsze jest wyraenie gpg OK.


Zanim zakoczymy nasze rozwaania powicone tej kwestii, warto powici jeszcze chwil
problemowi zaufania. Sygnatur pobrano z domeny pgp.net. Wierzymy, e waciciele tej bazy danych
zadbali o to, by oferowane klucze publiczne pochodziy z uprawnionego rda. Tak czy inaczej,
wszystko jest kwesti zaufania.

braku moliwoci uwierzytelnienia podpisu narzdzie rpm (przynajmniej w wersji 4.3.2) umoliwia nam instalacj pakietu. Takie rozwizanie jest o tyle niefortunne, e naraa cay system na
niebezpieczestwo zwizane z dziaaniem potencjalnie niebezpiecznych skryptw uruchamianych
z uprawnieniami administratora. Narzdzie GPG nawet nie prbuje odrnia sytuacji, w ktrych klucz jest podrobiony, od sytuacji, w ktrych w ogle nie dysponujemy kluczem publicznym.
Co wicej, takie rozrnienie jest niemoliwe. Nie mona wykluczy, podobnie jak w przypadku
zwykych podpisw, e dwie osoby o takich samych nazwiskach podpisuj si w identyczny sposb trudno wtedy mwi o podrabianiu podpisw. Z analogiczn sytuacj mamy do czynienia

56

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

w przypadku kluczy publicznych, ktre nie gwarantuj unikatowoci. Narzdzie GPG ogranicza
si wic do sygnalizowania niemonoci uwierzytelnienia podpisu wskutek braku odpowiedniego klucza publicznego.
Naley szczeglnie bacznie przyglda si pakietom, ktre s podpisane, ale ktrych podpisy
nie s rozpoznawane przez nasz system (wskutek braku odpowiedniego klucza publicznego). Jeli
bdziemy zmuszeni do samodzielnego odnalezienia klucza publicznego, powinnimy go pobra
z innej witryny ni ta, z ktrej pobrano waciwy pakiet RPM najlepiej ze strony, ktra nie jest
wskazywana z poziomu witryny oferujcej ten pakiet. Nie powinnimy ufa kluczom z witryn
wskazywanych przez producenta, poniewa takie klucze mog by podmieniane przez autorw
zoliwego oprogramowania. Z podobnymi sytuacjami mamy do czynienia w rzeczywistym wiecie. Zwykle nie podejmuje si wsppracy z kontrahentem wycznie na podstawie jego akcji promocyjnych przed podjciem ostatecznej decyzji warto zweryfikowa jego dotychczasowe
osignicia w niezalenych rdach, ktrymi z pewnoci nie powinny by osoby z jego najbliszej rodziny.

1.6.5. Kiedy uwierzytelnienie pakietu jest niemoliwe


Uytkownicy powinni si dobrze zastanowi, zanim podejm decyzj o instalacji nieuwierzytelnionego pakietu bybym jednak nieuczciwy, gdybym si nie przyzna do amania tej reguy
i instalowania rozmaitych pakietw w swoim komputerze domowym. Zupenie inne rodki
ostronoci naley stosowa w przypadku komputerw domowych, a inne podczas wdraania
pakietw w sieciach korporacyjnych. Utrata danych skadowanych w moim komputerze domowym nie byaby wielkim problemem, awaria systemu w wielkiej korporacji byaby natomiast
prawdziw katastrof.
Zdarza si, e autor oprogramowania w ogle nie docza adnych informacji uwierzytelniajcych. Mimo to prawdopodobiestwo pobrania pakietu systemu Linux z koniem trojaskim jest
stosunkowo niskie, co jednak w przyszoci moe ulec zmianie. Poniej przedstawiono kilka praktycznych krokw, ktre warto podj przed instalacj pakietu pozbawionego podpisu cyfrowego:
Kompilacja kodu rdowego.
Takie podejcie nie gwarantuje penego bezpieczestwa (warto sobie przypomnie
choby histori pakietu OpenSSH, opisan we wczeniejszej czci tego rozdziau). Warto
mie na uwadze, e poziom trudnoci procesu kompilacji kodw rdowych moe by
zarwno bardzo niski, jak i bardzo wysoki. Kady projekt jest inny jedynym sposobem
sprawdzenia, jak jest w przypadku naszego projektu, jest przeprowadzenie stosownego
eksperymentu. Nawet w przypadku stosunkowo niewielkich, ale nieznanych nam pro-

1.7.

Analiza zawartoci pakietu

57

jektw prba kompilacji moe wymaga pobrania dodatkowych pakietw. Problem kompilacji kodu rdowego zosta szczegowo omwiony w rozdziale 2.
Analiza skryptw instalacyjnych.
Skrypty instalacyjne stanowi najwiksze zagroenie, poniewa s wykonywane z uprawnieniami administratora w trakcie instalacji pakietw (a wic jeszcze przed waciwym uruchomieniem instalowanego oprogramowania). W dalszej czci tego rozdziau omwi
sposoby analizy skryptw dla poszczeglnych formatw pakietw.
Analiza waciwej zawartoci pakietu.
Warto si uwanie przyjrze instalowanym plikom binarnym. Typowa aplikacja uytkownika nie powinna wymaga do prawidowej pracy binariw z katalogw /usr/sbin ani
/sbin, poniewa wspomniane katalogi s zarezerwowane dla demonw systemowych i narzdzi administracyjnych. Naley unika wszelkich plikw z ustawionym bitem setuid lub
setgid, szczeglnie jeli ich wacicielem jest administrator. Tego rodzaju pliki mog by
wykonywane z uprawnieniami swojego waciciela i jako takie stanowi doskona kryjwk
dla zoliwego oprogramowania. Ustawione bity setuid lub setgid s niezbdne zaledwie
w przypadku kilku programw systemowych w pozostaych sytuacjach naley je traktowa z daleko idc ostronoci.
Niezalenie od wybranej techniki musimy pamita, e wci kluczowym czynnikiem jest
zaufanie. Tym razem zamiast wykazywa zaufanie do uwierzytelnionego rda, musimy zaufa
wasnym umiejtnociom w zakresie identyfikacji zoliwego oprogramowania.

1.7.

Analiza zawartoci pakietu

Istnieje kilka aspektw, ktre warto podda analizie przed przystpieniem do procesu instalacji
pobranego pakietu. Wikszo formatw pakietw obejmuje nastpujce elementy:
Archiwum plikw, ktre zostan zainstalowane w naszym systemie. Tego rodzaju archiwa
z reguy maj posta plikw narzdzia tar, plikw narzdzia cpio lub plikw dowolnego
innego programu archiwizujcego.
Skrypty, ktre bd wykonywane w trakcie instalacji i usuwania danego pakietu.
Informacje o zalenociach narzdzia instalacyjnego, na podstawie ktrych mona stwierdzi,
czy nasz system spenia wymagania danego pakietu.
Dodatkowe informacje tekstowe o samym pakiecie.

58

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

Ilo informacji zawartych w pakiecie zaley przede wszystkim od woli osoby, ktra ten pakiet
przygotowywaa. Zwykle s to podstawowe dane autora, data sporzdzenia pakietu oraz warunki
umowy licencyjnej. Bardziej odpowiedzialni producenci umieszczaj dodatkowo w pakietach
informacje o faktycznym przeznaczeniu oferowanego oprogramowania (cho wci zbyt wiele
pakietw nie obejmuje tego rodzaju danych opisowych).
Informacje o zalenociach pakietw mog by w zalenoci od specyfiki oprogramowania do rozbudowane, mog by bardzo proste lub mog w ogle nie istnie. Pakiety dla dystrybucji zbudowanych na bazie projektu Slackware w ogle np. nie obejmuj danych o zalenociach. Oznacza to, e instalujc tego rodzaju pakiety, musimy trzyma kciuki za ich prawidowe
funkcjonowanie. Na drugim biegunie znajduj si pakiety RPM. Podczas konstruowania takiego
pakietu moemy wymusi na stosowanych narzdziach automatyczne wykrywanie i uwzgldnianie
ewentualnych zalenoci w ramach gotowego pakietu. Okazuje si jednak, e nawet w przypadku
pakietw RPM decyzja o zapisaniu informacji o zalenociach naley do ich twrcw, ktrzy
mog wzorem dystrybucji Slackware zrezygnowa z tej opcji.
Kady format pakietw oferuje jak metod wykonywania skryptw w czasie instalacji i usuwania oprogramowania. Skrypty instalacyjne powinnimy analizowa ze szczegln uwag. Nawet
jeli ryzyko wystpowania zoliwego oprogramowania wydaje nam si niewielkie, musimy pamita, e mniej dojrzae projekty mog obejmowa wadliwe skrypty instalacyjne, ktre wbrew
intencjom swoich autorw mog doprowadzi do uszkodzenia naszego systemu. Jeli wspomniane skrypty s zbyt skomplikowane i niezrozumiae, warto poszuka jakiego sposobu uwierzytelnienia pakietu przed instalacj.
Skrypty instalacyjne zwykle mona zaliczy do nastpujcych kategorii:
Przedinstalacyjne tego rodzaju skrypty s wykonywane przed rozpakowaniem danych
z archiwum.
Poinstalacyjne skrypty zaliczane do tej kategorii s wykonywane po wypakowaniu
danych z archiwum. Tego rodzaju skrypty z reguy odpowiadaj za mniej istotne zadania
zwizane z dostosowywaniem instalacji do wymaga docelowego systemu, w tym za ustawianie cieek czy tworzenie plikw konfiguracyjnych.
Przeddeinstalacyjne tego rodzaju skrypty s wykonywane bezporednio po podjciu
decyzji o odinstalowaniu pakietu, ale przed usuniciem z systemu jakichkolwiek plikw.
Podeinstalacyjne skrypty z tej grupy s wykonywane ju po usuniciu z systemu podstawowych plikw pakietu.

1.7.

Analiza zawartoci pakietu

59

Zakres informacji tekstowych doczanych do pakietw rni si w zalenoci od stosowanych


formatw. Takie dane czsto obejmuj dodatkowe informacje uwierzytelniajce, w tym adres
strony projektu w witrynie internetowej SourceForge.net. Take ilo informacji o zalenociach jest
cile zwizana z formatem pakietu. Takie dane mog obejmowa nazwy pozostaych pakietw lub
nazwy wymaganych programw wykonywalnych.

1.7.1. Jak analizowa pobrane pakiety


Pakiety wymagaj analizy zarwno przed instalacj, jak i po niej. Przed instalacj naley si dokadnie przyjrze plikowi pakietu, ktry moe mie posta dowolnego, prawidowego pliku systemu
Linux. Nazwa tego pliku z reguy, cho nie zawsze, pochodzi od oficjalnej nazwy pakietu,
czyli nazwy skadowanej w bazie danych zainstalowanych pakietw. Nazwa pakietu jest kodowana w ramach jego pliku i powinna by widoczna po wykonaniu podstawowego zapytania na
tym pliku. Mimo e twrcy pakietw staraj si uwzgldnia ich nazwy w nazwach oferowanych
plikw, nie powinnimy oczekiwa penej zgodnoci obu nazw. Do zainstalowanego pakietu
moemy si odwoywa wycznie z wykorzystaniem nazwy okrelonej w ramach pliku pakietu,
dlatego warto korzysta z zapyta zwracajcych oficjalne nazwy na podstawie jeszcze niezainstalowanych plikw. Moe si okaza, e np. plik pakietu RPM kompilatora gcc z jakiego powodu
nazwano foo.rpm. Aby sprawdzi zawarto tego pliku, naley wykona nastpujce polecenie:
$ rpm -qip foo.rpm

Ju po instalacji opisane zadanie mona zrealizowa, stosujc zapytanie w formie:


$ rpm -qi gcc

Polecenie rpm zwykle kieruje zapytanie do bazy danych o pakietach RPM, jednak opcja -p
okrela, e waciwym przedmiotem zapytania ma by plik pakietu. Ten sam pakiet moe by
reprezentowany przez dowolnie nazwane pliki, ju po instalacji w bazie danych jest jednak reprezentowany przez jedn nazw.
Jak ju wspomniano, podstawowe informacje wczane do pakietu obejmuj nastpujce
elementy: jego nazw, numer wersji, dane autora, informacje o prawach autorskich oraz opis
zalenoci. Informacje dodatkowe obejmuj list instalowanych plikw, a take wykaz wszelkich
skryptw wykonywanych w czasie instalacji i usuwania pakietu. Tego rodzaju dane powinnimy
poddawa analizie przed przystpieniem do instalacji pakietu. Przykady podstawowych zapyta
kierowanych do plikw pakietw w formatach RPM i Debian przedstawiono w tabeli 1.10.

60

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

TABELA 1.10. Przykadowe zapytania kierowane do plikw pakietw

Zapytanie

RPM

Debian

Informacje podstawowe

rpm -qpi nazwa_pliku

dpkg -s nazwa_pliku

Lista instalowanych plikw

rpm -qpl nazwa_pliku

dpkg -L nazwa_pliku

Skrypty instalacyjne lub deinstalacyjne

rpm -qp -scripts nazwa_pliku

dpkg -e

Weryfikacja informacji uwierzytelniajcych

rpm checksig nazwa_pliku

niedostpny

Lista innych pakietw wymaganych

rpm -qp --requires nazwa_pliku

dpkg -I

Pakiet zawarty w ramach danego pliku


(np. nazwa i wersja wystpujca w bazie
danych o pakietach)

rpm -qp --provides nazwa_pliku

dpkg -I

Istnieje wiele powodw, dla ktrych moemy si decydowa na kierowanie zapyta do bazy
danych o pakietach. Moemy np. potrzebowa listy wszystkich pakietw zainstalowanych w systemie lub by zmuszeni do okrelenia zainstalowanej wersji interesujcego nas pakietu. Innym
przydatnym krokiem jest weryfikacja zawartoci zainstalowanego pakietu celem sprawdzenia, czy
aden z zainstalowanych plikw nie zosta przypadkowo usunity. Format zapyta dotyczcych
pakietw ju zainstalowanych jest inny ni w przypadku plikw pakietw. Kilka przykadowych
zapyta dotyczcych zainstalowanych pakietw przedstawiono w tabeli 1.11.
TABELA 1.11. Zapytania dotyczce zainstalowanych pakietw

Zapytanie

RPM

Debian

Podstawowe informacje o okrelonym


pakiecie

rpm -qi nazwa

dpkg -s nazwa

Lista wszystkich zainstalowanych pakietw

rpm qa

dpkg --list

Lista wszystkich plikw zainstalowanych


przez dany pakiet

rpm -ql nazwa

dpkg -L nazwa

Weryfikacja plikw zainstalowanych przez rpm -V nazwa


dany pakiet

cd /;
md5sum -c <
/var/lib/dpkg/info/name.md5sums

Okrelenie pakietu, do ktrego naley


dany plik

rpm -qf nazwa_pliku

dpkg -S nazwa_pliku

Okrelenie aktualnie zainstalowanej wersji


pakietu X

rpm -q X

dpkg-query -W X

1.7.

Analiza zawartoci pakietu

61

1.7.2. Szczegowa analiza pakietw RPM


RPM jest jednym z najbardziej dojrzaych i wszechstronnych formatw pakietw, stosowanych
w systemach operacyjnych Linux. Pakiet RPM moe obejmowa mnstwo przydatnych informacji, co wcale nie oznacza, e ich wyodrbnienie z tego pakietu musi by atwe. Aby uproci
uzyskiwanie tych dodatkowych danych, narzdzie rpm oferuje opcj --queryformat (--qf w wersji
skrconej). Wikszoci znacznikw stosowanych przez t opcj nie udokumentowano w podrczniku uytkownika, ich list mona jednak uzyska za pomoc polecenia w postaci:
$ rpm --querytags
HEADERIMAGE
HEADERSIGNATURES
HEADERIMMUTABLE
HEADERREGIONS
HEADERI18NTABLE
SIGSIZE
SIGPGP
SIGMD5
SIGGPG
PUBKEYS
...

Warto pamita, e w przypadku znacznikw zapyta wielko liter nie ma znaczenia, mimo
e dane wynikowe, prezentowane przez narzdzie rpm, s pisane wielkimi literami. Gdybymy np.
chcieli si dowiedzie, kto opracowa poszczeglne pakiety dla naszej dystrybucji, powinnimy
wykona nastpujce zapytanie:
$ rpm -qa --qf '%{vendor}' | sort | uniq -c
1 Adobe Systems, Incorporated
12 (none)
1 RealNetworks, Inc
838 Red Hat, Inc.
1 Sun Microsystems, Inc.

Powysze zapytanie, wykonane w moim systemie Fedora Core 3, wykazao, e a 838 pakietw opracowaa firma Red Hat, a 12 pakietw pochodzi z niezidentyfikowanych rde. Okazuje
si, e wspomniane pakiety z niezidentyfikowanych rde to tak naprawd klucze publiczne
GPG. Kady taki klucz jest reprezentowany w bazie danych jako odrbny pakiet (zwykle bez ustawionego identyfikatora twrcy).
Innym ciekawym przykadem zapytania jest polecenie generujce list skryptw instalacyjnych,
doczonych do wskazanego pakietu RPM. Poniej przedstawiono jedno z takich zapyta:

62

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

$ rpm -qp --scripts gawk-3.1.3-9.i386.rpm


postinstall scriptlet (through /bin/sh):
if [ -f /usr/share/info/gawk.info.gz ]; then
/sbin/install-info /usr/share/info/gawk.info.gz
/usr/share/info/dir
fi
preuninstall scriptlet (through /bin/sh):
if [ $1 = 0 -a -f /usr/share/info/gawk.info.gz ]; then
/sbin/install-info --delete /usr/share/info/gawk.info.gz
/usr/share/info/dirfi

Powysze dane wynikowe obejmuj pojedynczy wiersz identyfikujcy przeznaczenie skryptu


(np. skryptu poinstalacyjnego) oraz typ skryptu (np. /bin/sh). Takie rozwizanie umoliwia nam
wstpn analiz skryptw jeszcze przed ich wykonaniem.
Zawarto pliku archiwalnego, skadowanego w ramach pakietu RPM, moemy uzyska za
pomoc polecenia rpm2cpio. Konwertuje ono wskazany plik pakietu RPM do postaci archiwum
narzdzia cpio (czyli formatu wykorzystywanego wewntrznie przez format RPM). cpio jest
formatem archiww, podobnym do formatu narzdzia tar, ale cechujcym si nieco inn skadni.
Inaczej ni w przypadku narzdzia tar, dane wynikowe narzdzia rpm2cpio s domylnie kierowane do strumienia stdout (podobnie dziaa samo narzdzie cpio). Aby wyodrbni pliki z pakietu
RPM do katalogu biecego (bez instalowania tego pakietu), naley wykona nastpujce polecenie:
rpm2cpio filename.rpm | cpio -i --no-absolute-filenames

Warto zwrci uwag na opcj --no-absolute-filenames polecenia cpio, ktra eliminuje ryzyko nadpisania cennych plikw systemowych. W praktyce pakiety RPM nie daj moliwoci
stosowania cieek bezwzgldnych w archiwach narzdzia cpio, co nie oznacza, e takie dodatkowe zabezpieczenie nie ma sensu.

1.7.3. Szczegowa analiza pakietw Debiana


Pakiety Debiana cechuj si prostszym formatem ni pakiety RPM, a narzdzie dpkg nie oferuje
wielu spord funkcji znanych uytkownikom narzdzia rpm. Oznacza to, e praca z tego rodzaju
pakietami wymaga od uytkownika opanowania nowych umiejtnoci. Pliki pakietw Debiana
z reguy wyrnia si rozszerzeniem .deb, mimo e w rzeczywistoci s to archiwa utworzone za
pomoc programu ar. W tej sytuacji mona oczywicie przeglda zawarto tego rodzaju pakietw za pomoc polecenia ar, tak uzyskiwane informacje bd jednak niekompletne. Poniej przedstawiono odpowiedni przykad:

1.7.

Analiza zawartoci pakietu

63

$ ar -t cron_3.0pl1-72_i386.deb
debian-binary
control.tar.gz
data.tar.gz

Plik nazwany debian-binary zawiera pojedynczy wiersz tekstu ASCII, okrelajcy wersj pakietu
i format wykorzystany do jego utworzenia. Plik nazwany control.tar.gz jest skompresowanym archiwum narzdzia tar, obejmujcym zarwno skrypty instalacyjne, jak i kilka innych przydatnych
informacji. Plik nazwany data.tar.gz jest skompresowanym archiwum narzdzia tar, obejmujcym
pliki instalacyjne programu. Wyodrbnienie tych plikw celem dalszej analizy wymaga uycia
nastpujcego polecenia ar:
$ ar -x filename.deb

Sprbujmy teraz podda ten przykadowy plik bardziej szczegowej analizie. Plik data.tar.gz
zawiera pliki wymagane do prawidowego funkcjonowania danego programu. W niektrych przypadkach instalacja wymaga tylko wypakowania plikw z pobranego archiwum, co jednak nie
jest zalecane. W tym konkretnym przypadku lista plikw zawartych w naszym archiwum ma
nastpujc posta:
$ tar -tzf data.tar.gz
./
./usr/
./usr/bin/
./usr/bin/crontab
./usr/sbin/
./usr/sbin/cron
./usr/sbin/checksecurity
./usr/share/
./usr/share/man/
./usr/share/man/man1/
...

Plik control.tar.gz zawiera przede wszystkim pliki wymagane w procesach instalacji, usuwania
i konserwacji pakietu. Mona te pliki wypakowa za pomoc polecenia dpkg z opcj -e:
$ dpkg -e cron_3.0pl1-72_i386.deb
$ ls ./DEBIAN/*
./DEBIAN/conffiles
./DEBIAN/control
./DEBIAN/md5sums
./DEBIAN/postinst

64

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

./DEBIAN/postrm
./DEBIAN/preinst
./DEBIAN/prerm

Jak atwo si domyli, pliki preinst i postinst to, odpowiednio, skrypty przed- i poinstalacyjne
(opisane we wczeniejszej czci tego rozdziau). Podobnie: pliki prerm i postrm to, odpowiednio,
skrypty przed- i podeinstalacyjne.
Plik md5sums zawiera list kodw MD5, ktre mona wykorzysta do sprawdzenia integralnoci plikw zawartych w archiwum data.tar.gz. Plik md5sums mona wykorzysta w roli danych
wejciowych dla programu md5sum warto jednak mie na uwadze, e zawarte w tym pliku kody
mog suy wycznie weryfikacji, nie uwierzytelnianiu. Za pomoc narzdzia md5sum moemy
sprawdzi, czy dany pakiet nie uleg uszkodzeniu przed instalacj i czy uszkodzeniu nie ulegy pliki
ju zainstalowane, wspomniany program w aden sposb nie uatwia jednak zadania uwierzytelniania rda weryfikowanych plikw. Tak czy inaczej, okresowe sprawdzanie zainstalowanych
pakietw za porednictwem tego narzdzia jest dobr praktyk.
Plik md5sums nie obejmuje kodw wszystkich instalowanych plikw, poniewa pakiety czsto
wymagaj plikw konfiguracyjnych, ktre powinny by modyfikowane ju po instalacji. Oczekuje
si, e po instalacji tego rodzaju pliki nie bd pasoway do oryginalnej zawartoci pakietu. Pliki
konfiguracyjne mona wyczy z procesu weryfikacji, umieszczajc ich nazwy w pliku conffiles.
Wszystkie pliki wymienione w tym pliku s ignorowane w czasie weryfikacji integralnoci instalacji.

1.8.

Aktualizowanie pakietw

Narzdzia aktualizujce pakiety uatwiaj ledzenie plikw poszczeglnych pakietw oraz wicych je zalenoci. Przypumy, e chcemy zainstalowa pakiet X, ktry wymaga trzech innych,
do tej pory niezainstalowanych pakietw. Oznacza to, e bdziemy musieli zainstalowa te trzy
pakiety, zanim bdziemy mogli zainstalowa pakiet X. Musimy jednak pamita, e take te trzy
pakiety mog wymaga innych, rwnie niezainstalowanych pakietw, ktre z kolei mog wymaga jeszcze innych pakietw itd.
Wanie w takich sytuacjach narzdzia aktualizujce pakiety okazuj si szczeglnie przydatne. Jeli dysponujemy takim narzdziem, wystarczy, e wskaemy interesujcy nas pakiet X
wspomniane narzdzie automatycznie okreli, jakie inne pakiety s wymagane do instalacji, po
czym wykona kroki niezbdne do ich pobrania i zainstalowania.
Dziaanie narzdzia aktualizujcego polega na utrzymywaniu listy repozytoriw pakietw,
niezbdnych podczas poszukiwania danych pakietw. Takie repozytoria s udostpniane
w internecie, a za ich konserwacj odpowiada dystrybutor (np. firma Red Hat). Za porednic-

1.8.

Aktualizowanie pakietw

65

twem repozytorium dystrybutor oprogramowania sygnalizuje dostpno poprawek i aktualizacji


zabezpiecze, a czsto take bardziej oglne aktualizacje.
Repozytorium moe by skadowane take w lokalnym systemie plikw, np. na pycie CD lub
na innym komputerze oddzielonym (wraz z naszym komputerem) od sieci zewntrznym firewallem. To drugie rozwizanie sprawdza si, gdy musimy utrzymywa wiele komputerw w jednej
sieci LAN. Moemy pobiera niezbdne pakiety z internetu i udostpnia je w sieci wewntrznej
z myl o szybszej aktualizacji komputerw klienckich.
Do obsugi pakietw dystrybucji, korzystajcych z formatu Debiana, najlepiej stosowa narzdzie APT (od ang. Advanced Package Tool). Przystosowano je take do pracy z dystrybucjami
stosujcymi format RPM. To, czy APT zyska popularno jako najlepsze narzdzie do zarzdzania
pakietami w formacie RPM, okae si w bliszej lub dalszej przyszoci.
W kontekcie dystrybucji, w ktrych stosuje si pakiety w formacie RPM, warto wspomnie
o dwch najwaniejszych narzdziach. Pierwszym z nich jest program up2date, zaprojektowany
Red Hat z myl o dystrybucjach Enterprise Server i Fedora Core. Drugim takim narzdziem jest
YUM (od ang. Yellowdog Updater Modified)5.
Niektrzy twierdz, e narzdzia APT i YUM mog aktualizowa cae instalacje np.
zaktualizowa instalacj Red Hat 8.0 do wersji 9.0 bez koniecznoci ponownego instalowania
caego systemu operacyjnego. Bybym bardzo ostrony przed podjciem decyzji o przetestowaniu
tego rozwizania na wasnym systemie6.
Nie naley oczekiwa od narzdzia aktualizujcego pakiety realizacji wszystkich niezbdnych
zada. Poniewa tego rodzaju narzdzia bazuj na kilku wybranych repozytoriach i tam poszukuj pakietw, zakres dostpnego oprogramowania i wersji jest ograniczony. Oficjalne repozytoria z reguy preferuj dojrzae narzdzia i sprawdzone, stabilne wersje. Okazuje si jednak, e
pewne narzdzia lub wersje s umieszczane przez twrcw repozytoriw wbrew tej regule, albo
wskutek kaprysw, albo z uwagi na obsug pewnych dystrybucji. W tej sytuacji nigdy nie naley
bra powanie sw autorw repozytoriw: Jeli nie ma czego w repozytorium, najpewniej nie
bdziesz tego potrzebowa. Mnstwo doskonaych produktw nie jest uwzgldnianych w dystrybucjach ani repozytoriach. Jeli chcemy korzysta z najnowszej wersji jakiego pakietu lub
sprbowa czego nowego, nietypowego, najprawdopodobniej bdziemy musieli zrezygnowa
z usug narzdzia aktualizujcego.

Kiedy to samo narzdzie wchodzio w skad dystrybucji Yellowdog dla platformy PowerPC, nazywano
je yup.
6
Do najczstszych skutkw ubocznych tego rodzaju dziaa naley bl gowy, infekcja uszu, stany lkowe,
mdoci i wymioty.

66

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

Wystarczy chwila poszukiwa, aby odnale w internecie raporty o bdach i skargi uytkownikw poszczeglnych narzdzi aktualizujcych pakiety. Dbao o stae aktualizowanie setek
niezalenych pakietw oprogramowania bywa jednak bardzo trudne. Mimo e programici
stale podnosz swoje umiejtnoci i nabieraj dowiadczenia, wystpowanie bdw jest nieuniknione. Wielu Czytelnikw zapewne ucieszy to, e opisywany obszar jest przedmiotem cigego
rozwoju, odpowiednie rozwizania w przyszoci bd wic zapewne lepsze od wspczesnych.

1.8.1. APT Advanced Package Tool


APT jest jednym z najbardziej dojrzaych narzdzi do zarzdzania pakietami w dystrybucjach
budowanych na bazie Debiana, a od jakiego czasu dodatkowo oferuje moliwo zarzdzania
pakietami w dystrybucjach wykorzystujcych format RPM. Najwiksz zalet APT-a jest to, e
w przeciwiestwie do narzdzia dpkg, umoliwia automatyczne uwierzytelnianie pakietw obejmujcych podpisy cyfrowe GPG. Warto pamita, e podpisy GPG ju teraz s obsugiwane przez
format RPM. Co wicej, narzdzie APT pyta uytkownika o zgod przed instalacj pakietu, ktrego uwierzytelnienie jest niemoliwe, nie musimy si zatem obawia zmodyfikowanych repozytoriw ani koni trojaskich umieszczanych w pakietach.
Program APT, podobnie jak narzdzie dpkg, nie ma postaci pojedynczego polecenia, tylko
zbioru polece. Do najczciej stosowanych polece APT-a nale apt-get i apt-cache. Pocztkowo bdziemy korzystali przede wszystkim z polecenia apt-get, czyli rozbudowanego mechanizmu obsugujcego zadania zwizane z pobieraniem i instalacj pakietw. Polecenie apt-cache
umoliwia nam wykonywanie zapyta na licie pakietw pobranych i umieszczonych w lokalnej
pamici podrcznej, co oznacza znaczne przyspieszenie wzgldem wielokrotnego wykonywania
zapyta na repozytoriach udostpnianych w internecie. Przetwarzana lista obejmuje nie tylko
wszystkie dostpne pakiety, wcznie z tymi, ktrych jeszcze nie zainstalowano, ale te zainstalowane aktualizacje.
Polecenie apt-key umoliwia dodawanie do bazy danych kluczy publicznych, uzyskiwanych
z zaufanych rde. Za pomoc tego samego polecenia moemy przeglda klucze ju skadowane
w tej bazie danych. W ten sposb moemy uwierzytelnia pakiety podpisane przez twrcw.
Za pomoc polecenia apt-setup moemy wskaza repozytoria, w ktrych narzdzie APT powinno
poszukiwa pakietw. W mojej dystrybucji Ubuntu polecenie apt-setup nie umoliwia odwoywania si do repozytoriw Debiana, a jedynie do serwerw Ubuntu. W tej sytuacji warto rozway rczn edycj pliku /etc/apt/sources.list celem dodania niezbdnych repozytoriw. Elementy
zdefiniowane w pliku /etc/apt/sources.list mog wskazywa na dowolne witryny internetowe, katalogi lokalne naszego systemu lub katalogi dostpne w naszej sieci lokalnej. APT wymaga tylko, by
do repozytoriw odwoywa si za porednictwem adresw URL.

1.8.

Aktualizowanie pakietw

67

1.8.2. YUM Yellowdog Updater Modified


YUM jest alternatywnym narzdziem aktualizujcym pakiety w systemach stosujcych format
RPM. Ten program wiersza polece dziaa w sposb zbliony do APT-a. Yum, podobnie jak
APT, utrzymuje pami podrczn z informacjami o dostpnych pakietach. Inaczej jednak ni
APT domylnie kieruje zapytania do wszystkich repozytoriw podczas kadego uruchomienia.
Takie rozwizanie jest duo bardziej czasochonne ni odwoania do samej pamici podrcznej
(jak w przypadku narzdzia APT).
Za instalacj, wykonywanie zapyta i aktualizowanie pakietw odpowiada polecenie yum.
Opcja -C wymusza na programie uycie pamici podrcznej na potrzeby dania pocztkowego.
Oznacza to, e jeli na bazie tego dania narzdzie YUM zdecyduje o instalacji oprogramowania,
w pierwszej kolejnoci zaktualizuje pami podrczn.
Narzdzie YUM oferuje opcjonaln moliwo uwierzytelniania pakietw na podstawie podpisw GPG. Mona tym procesem sterowa (na poziomie poszczeglnych repozytoriw) za
porednictwem plikw konfiguracyjnych /etc/yum.conf i /etc/yum.repos.d. Jeli ustawimy flag
gpgcheck=1, polecenie yum nie bdzie instalowao nieuwierzytelnionych pakietw. Podobnie jak
w przypadku narzdzia APT istnieje moliwo tworzenia wasnych repozytoriw w katalogach,
do ktrych mona uzyskiwa dostp za porednictwem adresw URL.
Opcje polecenia yum s do intuicyjne. Aby uzyska np. list wszystkich aktualnie zainstalowanych pakietw, dla ktrych istniej aktualizacje, naley uy polecenia w postaci:
$ yum list updates

W ten sposb moemy wygenerowa list pakietw, ktre mona zaktualizowa. Najbliszym
odpowiednikiem przytoczonego polecenia w wiecie APT-a jest duo mniej intuicyjna apt-get
--dry-run -u dist-upgrade (ktra dodatkowo wywietla mnstwo nieprzydatnych danych dodatkowych).

1.8.3. Synaptic nakadka narzdzia APT z graficznym interfejsem uytkownika


Kiedy pisaem t ksik, projekt Synaptic nie osign nawet wersji 1.0, a mimo to by ju wyjtkowo wygodn nakadk z graficznym interfejsem uytkownika, uatwiajcym zarzdzanie pakietami z wykorzystaniem narzdzia APT. W moim komputerze z dystrybucj Debiana byo zainstalowanych 861 pakietw. Za kadym razem, kiedy korzystaem z narzdzia aktualizujcego,
okazywao si, e istniej aktualizacje przynajmniej dla kilkudziesiciu spord tych pakietw.
W tym i podobnych przypadkach naturalnym rozwizaniem jest uycie oprogramowania z graficznym interfejsem uytkownika (GUI). Synaptic grupuje pakiety wedug kategorii, co znacznie

68

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

uatwia lokalizowanie i przegldanie aktualizacji dla najczciej stosowanych programw. Programici najprawdopodobniej bd chcieli wiedzie, kiedy kompilator gcc zostanie zaktualizowany
z wersji 3.3 do wersji 3.4, ale raczej nie bd zainteresowani aktualizacj gry FreeCell z wersji 1.0.1
do wersji 1.0.2. Kategorie mona wykorzystywa take do poszukiwania nowszego oprogramowania lub narzdzi, ktrych do tej pory w ogle nie instalowalimy. Jako programista regularnie
przegldam dostpne narzdzia programistyczne pod ktem nowych, czsto bardzo obiecujcych
projektw. Przykad dziaania nakadki Synaptic w praktyce przedstawiono na rysunku 1.2.

RYSUNEK 1.2.

Przykad graficznego interfejsu uytkownika nakadki Synaptic

1.8.

Aktualizowanie pakietw

69

Fronton Synaptic, podobnie jak narzdzie APT, nie instaluje nieuwierzytelnionych pakietw
bez wyranego potwierdzenia takiej woli przez uytkownika. Jedn z ciekawszych funkcji tego
programu jest moliwo zapoznawania si z konsekwencjami planowanych dziaa bez koniecznoci dugiego oczekiwania na pobranie niezliczonych pakietw, ktrymi czsto nie jestemy zainteresowani. Jeli przejd do kategorii Games and Amusements i naka instalacj gry kasteroids, stan
przed pewnym problemem dystrybucja Ubuntu domylnie wykorzystuje rodowisko Gnome,
a gra kasteroids jest typow aplikacj rodowiska KDE. Jeli wic zdecyduj si na instalacj tej
gry, bd si musia liczy z koniecznoci instalacji 10 dodatkowych pakietw. Synaptic moe
oczywicie zrealizowa to zadanie bez mojego udziau, ale najpierw wygeneruje stosowne ostrzeenie o potrzebie instalacji 10 dodatkowych pakietw wymagajcych pobrania wielu megabajtw.
Takie rozwizanie sprawia, e jeli nie mamy zbyt wiele czasu, powinnimy odoy instalacj gry
kasteroids na pniej.
Synaptic, niestety, nie oferuje funkcji identyfikacji pakietw, dla ktrych s dostpne aktualizacje zabezpiecze. Okrelenie, czy narzdzie gcalctool naprawd wymaga aktualizacji z wersji
5.5.41-0 do wersji 5.5.41-1, jest niezwykle trudne. Na pierwszy rzut oka mona by stwierdzi, e
mamy do czynienia z drobn zmian, eliminujc, by moe, jeden bd. Czy taki wniosek uprawnia nas jednak do stwierdzenia, e chodzi o aktualizacj zabezpiecze? Trudno oceni. Wydaje si,
e spoeczno open source powinna si wreszcie zaj tym problemem.
Innym przydatnym mechanizmem oferowanym przez nakadk graficzn Synaptic jest filtr, za
pomoc ktrego moemy zarzdza iloci prezentowanych danych o aktualizacjach i tym
samym ogranicza te informacje do tych, ktrymi naprawd jestemy zainteresowani. Synaptic
wci znajduje si we wczesnej fazie rozwoju (w czasie, kiedy pisano t ksik, bya to wersja 0.56),
std konieczno udoskonalenia wspomnianego filtra. Obecnie nie ma moliwoci eliminowania z prezentowanych danych np. mniej istotnych zmian w pakietach. Takie zmiany zwykle polegaj na eliminowaniu pojedynczych bdw i wprowadzaniu poprawek w obszarze zabezpiecze;
powane zmiany z reguy polegaj na dodawaniu nowych funkcji.
Synaptic okazuje si wyjtkowo wygodny i jako taki powinien by wykorzystywany w roli
nakadki GUI we wszystkich systemach na bazie Debiana. W przyszoci Synaptic zyska, by
moe, popularno take w dystrybucjach stosujcych pakiety w formacie RPM (obecnie tylko
niewielka cz repozytoriw pakietw w tym formacie jest zgodna z narzdziami APT i Synaptic).

1.8.4. up2date narzdzie aktualizujce pakiety dystrybucji Red Hat


Firma Red Hat opracowaa narzdzie up2date, oferujce graficzny interfejs uytkownika, ktry
mona z powodzeniem stosowa do przetwarzania repozytoriw narzdzia YUM. Program
up2date, uruchomiony bez adnych opcji, generuje i wywietla list dostpnych plikw aktualizacji
(czsto obejmujc setki pozycji), spord ktrych moemy wskaza pakiety do zaktualizowania.

70

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

Dane wynikowe domylnie nie obejmuj pakietw, ktrych jeszcze nie zainstalowalimy, co
oznacza, e w razie pojawienia si nowego narzdzia up2date nie poinformuje o tym uytkownika.
up2date, podobnie jak Synaptic, uwierzytelnia pakiety na podstawie podpisw GPG i nie instaluje pakietw, w przypadku ktrych takie uwierzytelnienie jest niemoliwe.
Graficzny interfejs uytkownika narzdzia up2date pozostawia wiele do yczenia. Oferowany
zakres funkcjonalnoci jest minimalny i obejmuje wycznie aktualizacj istniejcych pakietw
nie prezentuje uytkownikowi nowych produktw, nie umoliwia te przegldania i odinstalowywania pakietw. Brak odpowiednich mechanizmw jest spor strat, szczeglnie jeli mamy na
uwadze przydatno i intuicyjno mechanizmw obsugiwanych z poziomu wiersza polece.
up2date prbuje w sposb moliwie transparentny zapewnia uytkownikowi dostp do repozytoriw narzdzi YUM, APT i samego narzdzia up2date. Konfiguracja domylna, doczana
do dystrybucji Fedora Core 4, kieruje nas do wyczerpujcej listy repozytoriw narzdzia YUM.
Takie rozwizanie pocztkowo sprawia wraenie przemylanego, szybko jednak okazuje si, e tak
realizowane aktualizacje wymagaj duo wicej czasu. Lepszym podejciem jest samodzielne
operowanie na kilku repozytoriach i bezporednie dodawanie odpowiednich odwoa do pliku
/etc/sysconfig/rhn/sources. Ciekaw funkcj narzdzia up2date jest moliwo wskazywania katalogw
penych pakietw RPM i automatycznego okrelania czcych je zalenoci. Dopki wskazany
katalog zawiera wszystkie wymagane pakiety RPM, proces przebiega znakomicie. W tej sytuacji
warto rozway zamontowanie instalacyjnej pyty DVD jako /mnt/dvd i umieszczenie w pliku
/etc/sysconfig/rhn/sources nastpujcego wiersza:
dir fc-dvd /mnt/dvd/Fedora/RPMS

Od tej pory moemy instalowa pakiety z pyty DVD i korzysta z mechanizmw narzdzia
up2date, ktre bd automatycznie uwzgldniay zalenoci. Poniej przedstawiono prosty przykad wywoania tego narzdzia z poziomu wiersza polece:
$ up2date --install gcc

Nie miaem, niestety, zbyt wiele szczcia, kiedy prbowaem sprawdzi graficzny interfejs
uytkownika narzdzia up2date w praktyce. Sdziem, e mog wykorzysta to narzdzie w moim
systemie Fedora Core 3 do zaktualizowania zbioru pakietw wyselekcjonowanych z listy ponad
200 programw, dla ktrych istniay aktualizacje. Okazao si jednak, e kiedy kliknem przycisk
OK, graficzny interfejs uytkownika nagle przesta odpowiada. W czasie przesyania danych za
porednictwem mojego poczenia szerokopasmowego mona byo odnie wraenie, e system
utkn w martwym punkcie na ekranie nie pojawi si nawet pasek postpu. Po okoo 15

1.9.

Podsumowanie

71

minutach narzdzie up2date poinformowao mnie o niezgodnoci jdra z dwoma spord wybranych pakietw i niepowodzeniu aktualizacji wszystkich pozostaych pakietw.
Jednym z gwnych powodw wspomnianego spowolnienia byo wskazywanie za porednictwem pliku /etc/syscsonfig/rhn/sources repozytoriw narzdzia yum, wymienionych w pliku /etc/yum.
repos.d, ktry zawiera sze wpisw (kady z list kopii witryn). Wyglda na to, e wanie lista
kopii stron doprowadzia do opisanej przed chwil sytuacji. Jedna z tych list obejmowaa a 65
witryn! Wydaje si, e w przeciwiestwie do programu uruchamianego z poziomu wiersza polece, prezentowany interfejs GUI wykorzystuje te informacje bardzo nieefektywnie. W tej sytuacji warto sprawdzi dziaanie narzdzia up2date, zanim graficzny interfejs uytkownika zdy
nas zniechci.

1.9.

Podsumowanie

W tym rozdziale omwiono wybrane aspekty idei oprogramowania open source. Koncentrowalimy si przede wszystkim na formatach pakietw stosowanych w rozmaitych dystrybucjach oraz
na narzdziach, ktre na tych formatach operuj. Powicilimy troch czasu plikom archiwalnych,
ktre s powszechnie stosowane w formatach wszystkich wspczesnych dystrybucji, a w niektrych przypadkach wrcz stanowi te formaty.
Omwiem kilka podstawowych rozwiza w zakresie bezpieczestwa, ktrych stosowanie
pozwala wyeliminowa lub ograniczy ryzyko pobierania i instalacji zoliwego oprogramowania.
Przeanalizowaem podstawy techniki uwierzytelniania i oglne techniki zabezpieczania systemw
informatycznych.
Na kocu skupilimy uwag na kilku narzdziach zbudowanych ponad popularnymi mechanizmami przetwarzania pakietw. Za pomoc tych narzdzi mona z powodzeniem zarzdza
wszystkimi pakietami zainstalowanymi w naszym systemie. Kade z tych rozwiza ma swoje
zalety i wady.

1.9.1. Narzdzia uyte w tym rozdziale


dpkg podstawowe narzdzie wykorzystywane do instalowania i przegldania pakietw
w formacie Debian (stosowanym przez dystrybucj Debian i jej dystrybucje pokrewne,
w tym Ubuntu).
gpg narzdzie GNU, odpowiedzialne za szyfrowanie i podpisywanie danych. Ten uniwersalny program moe z powodzeniem suy do zabezpieczania pakietw przez dodawanie podpisw cyfrowych.

72

Rozdzia 1 Pobieranie i instalacja narzdzi oferowanych w trybie open source

gzip, bzip2 narzdzia GNU, umoliwiajce kompresj plikw (stosowane zwykle cznie
z plikami archiwalnymi).
rpm podstawowe narzdzie do instalacji i przegldania pakietw w formacie Red Hat
Package Manager (RPM). Format RPM jest wykorzystywany nie tylko w dystrybucji
Red Hat, ale te w dystrybucji Suse i innych.
tar, cpio, ar narzdzia archiwizujce systemu Unix, wykorzystywane w wikszoci
formatw pakietw.

1.9.2. Materiay dostpne w internecie


http://www.debian.org/ strona domowa dystrybucji Debian, obejmujca dzia czsto zadawanych pyta (FAQ), w ktrym omwiono m.in. format pakowania.
http://www.gnupg.org/ strona domowa projektu GNU Privacy Guard, w ramach ktrego
opracowano narzdzie gpg.
http://www.pgp.net/ repozytorium kluczy publicznych, stosowanych m.in. przez narzdzie gpg.
http://www.rpm.org/ strona domowa projektu RPM.

You might also like