Professional Documents
Culture Documents
Niezbdnik programisty
Autor: John Fusco
ISBN: 978-83-246-1485-1
Tytu oryginau: The Linux Programmer's Toolbox
Format: 200x230, stron: 736
Spis treci
Spis treci
1.1.
Wprowadzenie ................................................................................................................................... 29
1.2.
1.3.
1.3.1.
1.3.2.
1.4.
1.4.1.
1.4.2.
1.4.3.
1.5.
1.5.1.
1.5.2.
1.6.
1.6.1.
1.6.2.
1.6.3.
Spis treci
1.6.4.
1.6.5.
1.7.
1.7.1.
1.7.2.
1.7.3.
1.8.
1.8.1.
1.8.2.
1.8.3.
1.8.4.
1.9.
Podsumowanie .................................................................................................................................. 71
1.9.1.
1.9.2.
Rozdzia 2.
2.1.
Wprowadzenie ................................................................................................................................... 73
2.2.
2.2.1.
2.2.2.
2.2.3.
2.2.4.
2.3.
2.3.1.
2.3.2.
2.3.3.
2.3.4.
Spis treci
2.4.
2.4.1.
2.4.2.
2.4.3.
2.4.4.
2.4.5.
2.4.6.
2.5.
2.5.1.
2.5.2.
Rozdzia 3.
3.1.
3.2.
3.2.1.
3.2.2.
3.2.3.
3.2.4.
3.2.5.
3.2.6.
3.2.7.
3.2.8.
3.2.9.
3.3.1.
3.3.2.
3.3.3.
Spis treci
3.4.
3.4.1.
3.4.2.
3.4.3.
3.4.4.
3.4.5.
3.4.6.
3.4.7.
3.5.
3.5.1.
3.5.2.
3.5.3.
3.5.4.
3.5.5.
3.5.6.
3.6.
3.6.1.
3.6.2.
3.6.3.
3.7.
3.7.1.
3.7.2.
Rozdzia 4.
4.1.
4.2.
4.2.1.
4.2.2.
4.2.3.
Spis treci
4.2.4.
4.2.5.
4.2.6.
4.2.7.
4.2.8.
4.2.9.
4.3.
4.3.1.
4.3.2.
4.3.3.
4.3.4.
4.3.5.
4.4.
4.4.1.
4.4.2.
4.4.3.
4.4.4.
4.4.5.
4.4.6.
4.4.7.
4.5.
4.5.1.
4.5.2.
4.5.3.
10
Spis treci
Rozdzia 5.
5.1.
5.2.
5.2.1.
5.2.2.
5.3.
5.3.1.
5.3.2.
5.3.3.
5.3.4.
5.3.5.
5.3.6.
5.3.7.
5.3.8.
5.4.
5.4.1.
5.4.2.
5.4.3.
5.4.4.
5.5.
5.5.1.
5.5.2.
5.5.3.
5.5.4.
5.5.5.
5.6.
5.6.1.
5.6.2.
11
Spis treci
5.7.
5.7.1.
5.7.2.
5.7.3.
5.7.4.
Rozdzia 6.
6.1.
6.2.
6.2.1.
6.2.2.
6.2.3.
6.3.
6.3.1.
6.3.2.
6.3.3.
6.4.
6.5.
6.5.1.
6.5.2.
6.5.3.
6.6.
6.7.
6.8.
6.8.1.
6.8.2.
6.8.3.
6.8.4.
6.8.5.
12
Spis treci
6.9.
6.9.1.
6.9.2.
6.9.3.
Rozdzia 7.
7.1.
7.2.
7.2.1.
7.2.2.
7.3.
7.3.1.
7.3.2.
7.4.
7.4.1.
7.4.2.
7.4.3.
7.4.4.
7.4.5.
7.5.
7.6.
7.6.1.
7.6.2.
7.6.3.
7.6.4.
7.7.
7.7.1.
7.7.2.
7.7.3.
13
Spis treci
7.8.
7.8.1.
7.8.2.
7.9.
7.9.1.
7.9.2.
7.9.3.
Rozdzia 8.
8.1.
8.2.
8.2.1.
8.2.2.
8.2.3.
8.2.4.
8.2.5.
8.3.
8.3.1.
8.3.2.
8.3.3.
8.3.4.
8.4.
8.4.1.
8.4.2.
8.4.3.
8.5.
8.5.1.
8.5.2.
8.5.3.
14
Spis treci
8.6.
8.7.
8.7.1.
8.7.2.
8.8.
8.9.
8.9.1.
8.9.2.
Rozdzia 9.
9.1.
9.2.
9.2.1.
9.2.2.
9.2.3.
9.2.4.
9.3.
9.3.1.
9.3.2.
9.3.3.
9.3.4.
9.3.5.
9.3.6.
9.3.7.
9.4.
9.4.1.
9.4.2.
15
Spis treci
9.5.
9.5.1.
9.5.2.
9.5.3.
9.5.4.
9.5.5.
Rozdzia 10.
16
Spis treci
Rozdzia 1.[SR1]
1.1.
Wprowadzenie
29
30
1.2.
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.
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
1.3.
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.
32
1.4.
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.
34
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.
Narzdzie
Uwagi
tar
cpio
ar
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.
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.
Rozszerzenia
Typ
.tar
.tar.gz, .tgz
.tar.bz2
.tar.Z, .taz
.ar, .a
.cpio
36
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)
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
1.4.
37
TABELA 1.3.
Format
Polecenie
Uwagi
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
TABELA 1.4.
Kod
Znaczenie
Uwagi
Standardowy plik
Katalog
Urzdzenie znakowe
Urzdzenie blokowe
Dowizanie symboliczne
TABELA 1.5.
Uprawnienia
rwx
rw-
r-x
--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.
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.
acuch
uprawnie
Uprawnienia
wykonywania
Efektywny identyfikator
uytkownika
Efektywny identyfikator
grupy
-rwxr-xr-x
Uytkownik biecy
Uytkownik biecy
-rw-r-xr-x
Uytkownik biecy
Uytkownik biecy
-rwsr-xr-x
Waciciel pliku
Uytkownik biecy
-rwSr-xr-x
Waciciel pliku
Uytkownik biecy
-rwxr-sr-x
Uytkownik biecy
Waciciel grupy
-rwsr-sr-x
Waciciel pliku
Waciciel grupy
-rwsr-Sr-x
Waciciel pliku
Waciciel grupy
-rwxrwxT
1.4.
41
TABELA 1.7.
Format
Polecenie
Uwagi
Archiwum narzdzia ar
ar x nazwa_pliku
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
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.
1.5.
TABELA 1.8.
43
Dystrybucja
Format pakietw
Red Hat
RPM
Fedora
RPM
Debian
Deb
Knoppix
Deb
Ubuntu
Deb
Gentoo
portage
Xandros
Deb
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.
44
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.
TABELA 1.9.
45
Przegld architektur
Oznaczenie
Opis
i386
i486
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
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
IA64
ppc
ppc64
sparc
sparc64
mipseb
46
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.6.
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.
47
48
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.
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.
50
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:
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
1.6.
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).
52
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.
1.6.
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
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
1.6.
55
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
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
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.7.
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.
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
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.
59
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
Zapytanie
RPM
Debian
Informacje podstawowe
dpkg -s nazwa_pliku
dpkg -L nazwa_pliku
dpkg -e
niedostpny
dpkg -I
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
dpkg -s nazwa
rpm qa
dpkg --list
dpkg -L nazwa
cd /;
md5sum -c <
/var/lib/dpkg/info/name.md5sums
dpkg -S nazwa_pliku
rpm -q X
dpkg-query -W X
1.7.
61
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
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.
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
./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
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
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.
Aktualizowanie pakietw
67
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).
68
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.
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).
70
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.
72
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.