Pomógł: 13 razy Dołączył: 11 Lis 2006 Posty: 3119 Otrzymał 6 piw(a) Skąd: Wieluń
Wysłany: 2010-06-25, 15:10 Porównanie bezpieczeństwa: Gnu/Linux vs BSD
Wstęp
Od wieków ludzie toczą zacięte boje ideologiczne na temat pojęcia wolności. Dla jednych, wolność jest niezbywalnym prawem, dla innych przywilejem. Odblask tych wojen możemy z łatwością zaobserwować nawet w tak ścisłym, w rozumieniu matematycznym, świecie jakim jest uniwersum komputerów.
Ideologia GPL i BSD. Niewolników wolności i prawdziwie wolnych. Pomimo widocznych różnic niewątpliwie niepodważalnym faktem jest to że wolność idzie w parze z odpowiedzialnością. Natomiast jedną z podstawowych składowych odpowiedzialności, jest troska o bezpieczeństwo. Bezpieczeństwo nasze, naszych maszyn, naszych sieci oraz ich użytkowników. W tym artykule postaram się przybliżyć różnice w pojmowaniu, tych pojęć, przez twórców systemów GNU/Linux i rodziny BSD.
Idea
Kompletność
Główną cechą rozróżniającą systemy BSD od Gnu/Linux jest podejście ideologiczne. Podstawowym zadaniem developerów systemów BSD jest dostarczenie pełnego systemu operacyjnego. Kompletność oznacza mianowicie, że ta sama grupa ludzi odpowiada zarówno za jądro jak wszystkie pozostałe składowe systemu. System nie będzie kompletny dopóki nie będzie w stanie sam się skompilować.
Natomiast Gnu/Linux podzielony jest na dwie części Gnu oraz Linux. Pierwsza z nich oznacza całe środowisko, które jest wykorzystywane przez jądro. Druga, z kolei, część jest tylko i wyłącznie jądrem. Nie istnieje też żadna kontrola nad obiema składowymi. Zarówno pierwsza jak i druga żyje swoim własnym życiem.
Kontrola
Oba systemy rozwijane są przez grupy ludzi żyjących w różnych państwach, mówiących różnymi językami i posiadających odmienne ideologie. W takich mało-optymalnych warunkach należy prowadzić kontrolę oraz ułatwiać komunikację developerom pracującym nad poszczególnymi częściami systemu. Ze względu na ewidentny podział projektu Gnu/Linux, za każdą z części odpowiadają inni ludzie. Ma to niekorzystny wpływ na przepływ informacji oraz śledzenie zmian kodu, co z kolei ma również niekorzystny wpływ na bezpieczeństwo.
Ze względu na ujednolicają pracę nad jądrem i resztą systemu, BSD zminimalizowały wpływ rozproszonego projektowania. Dzięki jednolitości wszelkie zmiany są łatwo dostępne. Co daje możliwość każdemu z developerów, w stosunkowo krótkim czasie, szansę sprawdzenia interesującego go fragmentu kodu. W tak panujących warunkach łatwo znaleźć miejsce w którym się coś zepsuło.
Odpowiedzialność
Ze względu na podział panujący w Gnu i Linux trudno wyszczególnić jednoznacznie jakąś grupę osób odpowiedzialnych za rozwój całego projektu. Zarówno nad jądrem jak i środowiskiem pracują dziesiątki tysięcy developerów. Teoretycznie pieczę nad Linuksem sprawuje Linus Torvalds ale w rzeczywistości odpowiada on jedynie za podejmowanie decyzji w sprawach kluczowy dla całego projektu. Nie jest również w stanie śledzić na bieżąco wszystkich zmian jakie są wprowadzane. W świecie rozmytej odpowiedzialności, żadna odpowiedzialność nie istnieje. To wszystko przenosi się na grunt bezpieczeństwa.
W przeciwieństwie stoją systemy z rodziny BSD, które to z kolei nie mają aż tak licznej rzeszy developerów jak Gnu/Linux. Są natomiast w stanie wyszczególnić osoby odpowiedzialne za poszczególne podsystemy. Większość zmian w kodzie musi być zatwierdzona przez inną osobę odpowiedzialną za tą część systemu lub za inną ściśle powiązaną. Eliminuje to w znacznym stopniu wprowadzanie błędnych instrukcji do repozytoriów. Co oczywiście wpływa na poprawę bezpieczeństwa.
Współpraca
Każdy z system z rodziny BSD ma swoje własne cele i założenia, które są realizowane przez developerów. Daje to możliwość równoległego testowania różnych technologi i rozwiązań. Sprzyja to również ogólnemu rozwojowi wszystkich systemów. Ze względu na niedrastyczne różnice kodów poszczególnych BSD istnieje możliwość wymiany technologicznej. Czyli w momencie w którym jakaś technologia zostanie wprowadzona i przetestowana przez jeden z systemów może nastąpić przeportowanie jej do innego BSD przy stosunkowo niewielkim nakładzie pracy. Taka wymiana nie jest możliwa z systemem Linux a przynajmniej nie z taką łatwością.
Licencja
Oba systemy wykorzystują otwarte i wolne typy licencji. Linux korzysta z GPL natomiast BSD z (i tu zaskoczenie) - BSD. Porównanie obu licencji daje jednoznacznie do zrozumienia że licencja typu BSD jest bardziej wolna i otwarta od GPL. Pozwala to między innymi na o wiele łatwiejsze wykorzystanie kodu BSD w projektach komercyjnych. Pomimo pewnych zastrzeżeń bardzo często zdarza się że firma która modyfikuje oryginalny kod udostępnia swoje poprawki i oddaje je społeczności.
Prostota
Nie trzeba wyjaśniać że zbyt skomplikowane systemy są trudne w utrzymaniu. Niejednokrotnie przerost formy nad treścią utrudnia nasze życie. Dlatego ludzkość dąży do znacznego uproszczania sobie życia. Takiej też zasadzie twórcy BSD poświęcili sporo czasu. Każda część systemu jest dostatecznie przemyślana i odpowiednio zaprojektowana. Umożliwia to w sposób wydajny oraz szybki skonfigurowanie interesującej nas usługi bądź właściwości systemu. Każdy plik konfiguracyjny jest human-readable co minimalizuje możliwość błędnej konfiguracji.
Odrobinę inną drogą poszli twórcy Gnu/Linux, którzy niejednokrotnie dodają funkcjonalności i narzędzia do ich obsługi mające ułatwić nam życie. Po krótkim czasie okazuje się że nie są one wykorzystywane lub są, ale bardzo rzadko. Zamiast skupiać się na już istniejących rozwiązaniach i upraszczać ich obsługę developerzy muszą zajmować się różnego rodzaju nowinkami i rozszerzeniami. W gąszczu przeróżnych dźwigni łatwo się pomylić i przez przypadek narazić bezpieczeństwo naszego systemu. Skomplikowany jest również proces tworzenia plików konfiguracyjnych, niejednokrotnie twórcy danego narzędzia wymagają od nas nauki nowego slangu konfiguracyjnego. Tutaj też łatwo o pomyłkę.
Komercja
Równie ważne jak sam system jest fakt jego wykorzystania przez rynkowych liderów. Dlatego ważny jest proces komercjalizacji, nie systemu, ale produktów na nim opartych. Istnieje wiele rozwiązań komercyjnych wykorzystujących Gnu/Linux jak i BSD. To znaczy, że zarówno pierwszy jak i drugi system dają się łatwo sprzedać. Niestety dość restrykcyjna licencja GPL często odstrasza dużych graczy. Dlatego firma produkująca wysokiej klasy sprzęt oparła swoje rozwiązania na systemie BSD.
Kernel
Każdy z systemów z rodziny BSD ma swoje własne podejście do jądra. W przeciwieństwie do Linuxa, który to jest zarządzany przez dużą grupę ludzi powiązanych z jeszcze większą ilością różnych dystrybucji. Podstawową różnicą pomiędzy nimi jest sposób konfiguracji jądra. Taki proces jest dość uciążliwy jeśli przyjdzie nam go przeprowadzić pod Linuksem. Natomiast jest czystą przyjemnością na wszystkich systemach z rodziny BSD. Co zapewne jest oczywiste, aby skonfigurować i skompilować jądro Linuksa musimy wydać komendę ‘make menuconfig; w odpowiednim katalogu. Po krótkiej chwili, a dokładniej procesie budowania menu, czyli zautomatyzowanym przeczytaniu setek różnych Makefile’ów rozsianych po wielu różnych katalogach, otrzymamy rozbudowane menu. Wspomniane już, gotowe menu dysponuje setkami, jak nie tysiącami, przeróżnych opcji, sterowników oraz ustawień. W takim gąszczu informacji trudno się połapać a tym bardziej wyłowić wszystkie, niezbędne nam szczegóły potrzebne do skonfigurowania i zabezpieczenia naszego systemu.
Miłą odmianę wprowadzają systemy BSD. Cała zabawa zaczyna się i kończy podczas edycji tylko jednego pliku konfiguracyjnego. W tym Makefile’u znajdują się wszystkie potrzebne nam ustawienia, opcje i sterowniki. Jeśli czegoś tam nie ma, to znaczy że nie powinno tego tam być. Wszystko jest doskonale udokumentowane i opisane. Sam plik jest tworzony w taki sposób aby był w łatwy sposób zinterpretowany przez człowieka (czyt. administratora/developera).
Systemy plików
Niewątpliwie Linux obsługuje największą ilość różnorakich systemów plików. Między innymi ext2, ext3, ext4, FAT, HFS, JJFS, JFS, UDF, XFS, ReiserFS, Reiser4, Tux3. Zapewne większość z nich jest bardzo dobrze przetestowana. Jednak warto zauważyć że przy tak dużej ilości systemów plików bardzo trudnym staje się dokładne przetestowanie nowej wersji jądra wraz ze wszystkimi możliwymi systemami plików. Co niekiedy zmniejsza stabilność naszej maszyny.
Z kolei systemy BSD nie obsługują tak imponującej ilości systemów plików. Są w stanie wykorzystać między innymi UFS, FAT, ext2 oraz ZFS. Dzięki małej różnorodności każdy aspekt poszczególnego systemu plików jest zbadany i należycie przetestowany co minimalizuje straty danych.
Firewall
Ważnym zabezpieczeniem systemu operacyjnego jest firewall. Dlatego też standardem stało się dołączanie zapory ogniowej do systemu. Linux standardowo dystrybuowany jest z netfilter/iptables, który zapewnia pełną dowolność w zarządzaniu naszymi portami i pakietami sieciowymi.
Natomiast systemy z rodziny BSD wykorzystują inne filtry pakietów. Są nimi PF lub IPFW w zależności od upodobań developerów. Istotną przewagę nad szeroko wykorzystywanym netfilter’em filtry BSD mają w prostocie konfiguracji. Bardzo dużą uwagę poświęcili developerzy kwestiom tworzenia reguł. Zapewniło to znaczącą poprawę czytelności wszystkich plików konfiguracyjnych, oczywiście są one human-readable. Filtry BSD w żadnej mierze nie ustępują wydajnością ani funkcjonalnością netfilter’owi, niejednokrotnie go przewyższając.
Exploity
Zarówno Linux jak i BSD wykorzystują różne technologie w celu mitygowania ataków typu Exploit. Głównym zabezpieczeniem Linux’a jest stanie z technologi PaX oraz Exec Shield. Niestety, nie zawsze są one standardowo włączone.
BSD z kolei wykorzystują między innymi W^X, PaX, GCC-SSP. Wykorzystanie poszczególnych technologii ściśle zależy od konkretnego systemu. Na szczęście wszystkie zabezpieczenia są w większości standardowo włączane. Zwalnia nas to z konieczności konfiguracji i rekompilacji jądra oraz poszczególnych podsystemów.
Zabezpieczenia
Każdy system z rodziny BSD implementuje swoje własne zabezpieczenia. W większości wykorzystywane są jail, chroot, POSIX ACL, TrustedBSD MAC, kauth, securelevels oraz Xen. Jak to zwykle bywa z BSD większość jest standardowo włączona oraz dostępna bez jakichkolwiek modyfikacji systemu.
Natomiast Linux wykorzystuje zarówno POSIX ACL jak i chroot ale również Xen, KVM, LSM, POSIX Capabilities. Niestety nie wszystkie zabezpieczenia są standardowo dostępne w każdej dystrybucji. Tym bardziej, nawet jeśli jakieś zabezpieczenie jest dostępne to nie oznacza że jest ono włączone.
Dokumentacja
Ważną rzeczą, z różnych względów, jest dokumentacja. Takie zwykłe strony man są nieocenioną pomocą i jednym z najważniejszych narzędzi w rękach administratora. Dzięki odpowiednio napisanym podręcznikom systemowym jesteśmy w stanie w pełni skonfigurować i zabezpieczyć nasz system. Z pewnością można stwierdzić, że nikt nie ma lepszych stron man od systemów z rodziny BSD. Każdy z developerów jest zobligowany do udokumentowania wszelkich zmian i aktualizacji stron podręcznika. Dzięki temu wszyscy użytkownicy są w stanie na bieżąco testować nowe funkcjonalności oraz zgłaszać błędy.
Niestety społeczności Gnu/Linux nie udało się stworzyć w miarę porównywalnej alternatywy. Związane jest to z dość dużą ilością nieudokumentowanych lub słabo udokumentowanych fragmentów kodu. Co oczywiście nie wpływa dobrze na rozwój systemu jak i na jego bezpieczeństwo.
Usługi
Podstawą działania systemu operacyjnego jest świadczenie usług różnego typu. W zależności od dystrybucji Gnu/Linux standardowo instaluje się z dość dużą ilością uprzednio skonfigurowanych usług i programów zarówno sieciowych jak i lokalnych. Daje to niewątpliwie szybszy i łatwiejszy dostęp do w pełni działającego systemu przy jak najmniejszym wkładzie pracy administratora. Wśród wszystkich usług zapewne znajdziemy bardzo istotne dla nas funkcjonalności ale również takie z których nigdy nie będziemy korzystać. Niestety są one niejednokrotnie standardowo włączone. Takie podejście nie jest rozwiązaniem optymalnym ze względów bezpieczeństwa.
Zdecydowanie inne rozwiązanie zapewniają systemy z rodziny BSD. Standardowo po instalacji otrzymujemy czysty system bez żadnych usług. Wszystko zbędne jest powyłączane. Zapewnia nam to pełną kontrolę nad tym co ma być na naszej maszynie uruchomione. Koszt takiego rozwiązania jest oczywiście ewidentny - praca administratora. Jednak przy stosunkowo niewielkim nakładzie wysiłku otrzymujemy system bezpieczny i w 100% dostosowany do naszych indywidualnych potrzeb.
Aktualizacje
Bardzo ważną kwestią dla każdego administratora i ogólnie użytkownika systemu jest sprawa aktualizacji. Większość z nas chce być up-to-date z wszelkimi nowościami w naszych systemach. Niejednokrotnie są to poprawki, nowe funkcjonalności, zabezpieczenia. Pojawia się pytanie, jak to zrobić? Zarówno BSD jak i Gnu/Linux mają odrobinę odmienne podejście. Niejednokrotnie systemy Linux’owe zawierają zintegrowane narzędzia aktualizacyjne. Przyśpieszają one cały proces poprzez minimalizacje wkładu pracy i czasu administratora. Proces ten jest przeważnie podzielony na dwa etapy, aktualizację jądra i reszty. Etap uaktualnienia jądra wymaga ponownego uruchomienia maszyny. Etap aktualizacji reszty już niekoniecznie. W dużej ilości przypadków podczas przeprowadzania tak zautomatyzowanego procesu nie mamy dużego wpływu na cały przebieg. Niejednokrotnie okazuje się że zaktualizowane podsystemy nie sprawują się tak dobrze jak powinny. Wynika to często z braku jednolitej kontroli nad procesem tworzenia aktualizacji.
Twórcy BSD niestety bardzo rzadko dysponują jakimikolwiek zautomatyzowanymi narzędziami do aktualizacji. Jednak sam proces jest prosty i jednolity dla wszystkich systemów. Minusem jest chwilowe wyłączenie maszyny z użytku. Gdy chcemy zaktualizować nasz BSD to musimy uruchomić nasz system poprzez niezbędny proces rozruchowy w trybie instalacyjno-aktualizacyjnym. Przeważnie jest to nowe, odrobinę zmodyfikowane jądro systemu. Oraz ściągnąć z sieci odpowiednie archiwa z nowym jądrem jak i binariami. Na pozór proces wydaje się być skomplikowany i żmudny ale pozory mylą. Sama aktualizacja trwa przeważnie 5 do 10 minut i gwarantuje nam poprawne i bezpieczne działanie systemu przy niedużej stracie dostępności. Istnieje tęż możliwość ręcznego skompilowania i zainstalowania odpowiednich podsystemów. Jednak w takim przypadku za wszelkie braki w stabilności odpowiadać będzie administrator.
Bezpieczeństwo
Pomijając fakt różnego rodzaju zabezpieczeń wbudowanych w jądro systemu co zapewnia nam bezpieczeństwo? Odpowiedź na to pytanie brzmi „szczegóły”. Takie szczegóły jak sam proces wydawania nowych wersji systemu. Podejście developerów. Sposób zarządzania projektem. Niestety w świecie Gnu/Linux w panuje ogólny chaos. Osobno rozwijane jądro i reszta systemu jest niezbyt dobrym procesem. Komunikacja pomiędzy ogromną ilością developerów jest z góry skazana na porażkę.
W takim porównaniu systemy z rodziny BSD to ostoja ładu i porządku. Ujednolicony proces rozwoju jądra i userlandu zapewnia stabilność i bezpieczeństwo. Niewielka ilość developerów zwiększa możliwości komunikacyjne. Proces wydawania nowych wersji jest ujednolicony i usystematyzowany. Nowa wersja nie powstanie dopóki wszystko nie będzie sprawne. Twórcy dużą wagę przykładają do jakości oraz czystości kodu. Standardem jest ciągły audyt kodu podnoszący jego jakość i bezpieczeństwo.
Aplikacje
Chyba nie istnieje system operacyjny, który tuż po instalacji byłby w stanie spełnić wszelkie wymagania stawiane mu przez jego użytkowników. Dlatego niezwykle istotną sprawą jest możliwość instalacji dodatkowego oprogramowania. W bardzo łatwy i przyjemny sposób rozwiązali ten problem twórcy Gnu/Linux. Scedowali całą odpowiedzialność na developerów poszczególnych dystrybucji. W znacznej ilości przypadków udostępniono łatwy i przyjemny w użyciu interfejs instalacyjno-aktualizacyjny. Często okazuje się że tym samym narzędziem zaktualizujemy nasz system operacyjny jak i zainstalujemy nowe oprogramowanie. Oczywiście wszystko opiera się na binarnych paczkach, uprzednio przygotowanych przez twórców dystrybucji. Jeśli chcielibyśmy zainstalować coś ze źródeł to niejednokrotnie okazuje się że zostaliśmy z tym sami. Wkraczamy wtedy w szarą strefę pełną „piekła zależności”. Trudno zachować przy tym czujność i nie narazić naszego systemu na różnego typu usterki, w tym bezpieczeństwa.
Z systemami z rodziny BSD sytuacja wygląda podobnie. W bardzo łatwy i przyjemny sposób możemy zainstalować nowe aplikacje. Jednak standardowo nie dysponujemy narzędziami graficznymi. Wszystko robimy z poziomu wiersza poleceń. Jest to dość sprawne narzędzie i niepozornie łatwe w użyciu oraz przede wszystkim potężne. Poza możliwością instalacji plików binarnych mam możliwość skorzystania z dobrodziejstw ports/pkgsrc.Jest to pewnego rodzaju framework do zarządzania oprogramowaniem oraz jego własnoręcznej kompilacji. Dzięki temu nasze wysiłki zostają zminimalizowane a ścieżka do „piekła” się od nas oddala. Pomimo tych dobrodziejstw szereg ludzi pracuje nad tym aby paczki i porty były jak najświeższe i jak najbezpieczniejsze. Jeśli jakaś aplikacja zawiera w sobie lukę bezpieczeństwa to w najgorszym wypadku jesteśmy o tym informowani.
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum