1 Zarządzanie i integracja aplikacji Java EEPrzemysław Nowak
2 Literatura Bezpieczeństwo w Unixie i Internecie, Simson Garfinkel, Gene Spafford, O’Reilly & Associates, Inc. Wydawnictwo RM, 1997 Nie tylko wirusy - hacking, cracking, bezpieczeństwo Internetu, Andrzej Dudek, Wydawnictwo Helion Polityka bezpieczeństwa i ochrony informacji. Tadeusz Kifner , Wydawnictwo Helion pl.comp.security comp.os.linux.security comp.os.ms-windows.nt.admin.security comp.os.netware.security comp.security.unix i wiele innych ...
3 konfiguracja, administracja systemuUnix (Linux) konfiguracja, administracja systemu
4 System Unix MULTICS - 1960, AT&T, GE, MIT, projekt DARPAUnix (PDP 7) PDP 11 język C Unix BSD Unix AT&T SVR3 Unix SVR4, Unix OSF/1
5 System Unix - rodzina Unix Siódmego Wydania BSD System V3 OSF/1FreeBSD SCO Unix BSD/OS Solaris SunOS AIX Linux
6 Linux - inicjowanie systemureset, BIOS ładowanie programu rozruchowego ładowanie jądra (LILO, LoadLin) inicjalizacja obszarów roboczych jądra, sprzętu, systemu plików, terminali, montowanie dysków (dmesg) init (inittab) rc.d (styl BSD i System V) procesor Pentium po resecie rozpoczyna pracę w „trybie rzeczywistym” od adresu FFFF0 (BIOS POST), następnie jest czytany program startowy z MBR głównego dysku lub dyskietki (podobnie CD-ROM el-torito), następnie ładuje się jądro, ustawiane są deskryptory segmentów dla trybu wirtualnego, włączany jest tryb wirtualny... When an Intel based computer system is turned on, the BIOS goes through a simple procedure that triggers the booting of an operating system. The BIOS reads the first physical sector of the disk into memory locations 0000:7C00 through 0000:7DFF and performs a JMP to it. On hard disks, the first physical sector is the Master Boot Record. For floppy drives, the first physical sector is the Boot Sector. The master boot record is needed for hard disks because hard disks can be partitioned into multiple logical drives. The BIOS does not care whether it is loading a master boot record or a boot sector. When booting from hard disks, the master boot record moves itself to 0000:0600, and then overwrites it's original location (0000:7C00) with the boot sector. When booting from a floppy drive, which has no partitioning information and therefore no master boot record, only the boot sector is effectively loaded. The master boot record program is simpler to follow in comparison to the boot sector program (examples of both programs for DOS based systems may be obtained in commented assembler source from the author's web page). A DOS boot sector program actually overwrites sections of itself in order to squeeze BIOS data into the 512 byte block of usable memory. Why it does this instead of simply using another region of memory to store the BIOS data is beyond me. The boot sector is a somewhat ugly assembler program to look at. When the boot sector is executed, none of the DOS interrupt handlers are in place yet. Everything must be done through the BIOS. The actual code in the boot sector varies depending on the operating system, yet it always attempts to boot the operating system. Note that the format of the disk is irrelevant, as the boot sector program uses only physical addresses and low level BIOS functions to access the drives.
7 /etc/inittab /etc/inittabPlik definiuje czynności które proces init powinien wykonywać gdy system przechodzi na poszczególne poziomy pracy. identyfikator : poziomy_startu : akcja : proces si::sysinit:/etc/rc.d/rc.sysinit pf::powerfail:/sbin/genpowerfail start c1:1235:respawn:/sbin/agetty tty1 linux /etc/rc.d/rc.sysinit Skrypt uruchamiany przy starcie systemu. Powinien zawierać podstawową inicjalizację systemu, taką jak przyłączanie lokalnych i systemowych partycji, włączanie ograniczeń dla użytkowników, ustawienie zegara systemowego czy załadowanie modułów systemu. 'Identyfikator' jest sekwencją max. do czterech znaków identyfikującą rekord danych w pliku. 'Poziomy_startu' podają listę poziomów, przy przejściu na które ma być uruchamiany dany proces. 'Akcja' opisuje akcję, która ma zostać podjęta, a 'proces' specyfikuje proces do uruchomienia.
8 Skrypty startowe (SystemV)/etc/rc.d/init.d/ Katalog zawierający skrypty uruchamiające i zatrzymujące poszczególne serwisy i demony podczas przejść pomiędzy różnymi poziomami startu. /etc/rc.d/rcX.d/ Katalogi zawierające dowiązania do tych skryptów z katalogu /etc/rc.d/init.d/, które mają zostać uruchomione bądź zatrzymane przy przejściu na konkretny poziom startu systemu. X oznacza numer poziomu startu. /etc/rc.d/rc Skrypt wykonywany przy zmianie poziomu startu systemu. Uruchamia wszystkie skrypty z odpowiedniego katalogu /etc/rc.d/rcX.d, podając im parametr w zależności od pierwszej litery w nazwie dowiązania: S oznacza, że skrypt ma uruchomić dany serwis lub demona, zaś K znaczy, że serwis ten należy zamknąć. /etc/rc.d/rc.local Skrypt wykonywany jako ostatni przy starcie systemu. Może uruchamiać różne dodatkowe procesy. /etc/profile Plik zawiera ustawienia zmiennych środowiskowych przy starcie systemu.
9 Skrypty Bourne’a nigdy SUID, jeżeli tak jednak być musi należy napisać C wrapper wywołujący (exec) skrypt jedna z pierwszych instrukcji: IFS= następna w kolejności: PATH= (bo inaczej te zmienne są dziedziczone) csh nie używać! problemy z wieloma rzeczami... (http://www.ooblick.com/text/CshProgrammingConsideredHarmful.ht ml)
10 Linux - podstawowe elementyjądro, funkcje systemowe, moduły jądra procesy i wątki, sygnały, identyfikatory procesów, inne atrybuty zarządzanie pamięcią system plików, prawa dostępu, rodzaje plików urządzenia fizyczne sieć, konfiguracja, usługi użytkownicy, grupy, kontrola dostępu, uprawnienia, użytkownik root, jądro - zapewnia przełączanie między programami, przydziela pamięć, obsługuje urządzenia fizyczne, zapewnia usługi w postaci funkcji systemowych jądro monolityczne i mikrojądro, moduły proces 0 - samo jądro (szeregowanie zadań), proces 1 - init, każdy proces (oprócz 0) posiada proces macierzysty, procesy mogą być uszeregowane w grupy, proces posiada 3 identyfikatory, proces posiada także deskryptory otwartych plików, priorytet (nice), ograniczenie wielkości pliku, środowisko: zmienne - katalog bieżący i ścieżki, umask atrybuty pliku: nazwa, właściciel, grupa, prawa dostępu, licznik dowiązań, SUID, GUID, i-węzły, katalogi urządzenia znakowe i blokowe, dyski, terminale protokół IP, konfiguracja interfejsu sieciowego (ifconfig), adresy (/etc/hosts, DNS), usługi (/etc/services, /etc/inetd), zdalne terminale (telnet), dostęp do plików (ftp, nfs), poczta elektroniczna, usługi adresowe, data i czas, zdalne wywoływanie procdur lista użytkowników (/etc/passwd), identyfikatory i hasła (/etc/passwd, /etc/shadow), zmiana tożsamości (su), katalog domowy, powłoka (shell), przynależność do grup (/etc/groups), uprawnienia użytkownika root (UID 0)
11 System plików UNIXa Blok startowy Blok specjalny Bloki struktur i-nodeBloki danych 1 2... dysk (partycja) jest podzielony na bloki system plików posługuje się pojęciem i-node i-node (i-węzeł) odpowiada plikowi, katalogowi lub innym obiektom (pliki specjalne, gniazdka, kolejki FIFO) Blok specjalny zawiera informacje dotyczące całego systemu plików (rozmiar bloku, liczba bloków, typ systemu plików, liczba i-węzłów, prawa dostępu i czas ostatniej zmiany...) Lista i-węzłów zaczyna się od bloku o numerze 2. I-węzły są numerowane od 1, ale węzła o numerze 1 nie używa żaden plik - może on być używany przez listę uszkodzonych bloków dyskowych. Główny katalog dysku zaczyna się od i-węzła o numerze 2.
12 Budowa i-node Prawa dostępu Blok danych Właściciel Blok danych RozmiarCzasy ... Blok danych Blok danych ... Bezpośrednie wskazania bloków danych Blok danych Blok pośredni Blok danych Dwustopniowe wskazanie pośrednie Blok danych Trójstopniowe wskazanie pośrednie Blok danych
13 Użytkownicy i ich działaniaidentyfikatory hasła grupy superużytkownik (root) system plików i uprawnienia użytkowników programy SUID i GUID polecenie chown /etc/passwd - baza danych o użytkownikach i ich hasłach (w nowszych systemach /etc/shadow) Nazwa - dowolny ciąg znaków (od 1 do 8, czasem więcej, zaleca się litery i cyfry, nazwy zawierające znaki specjalne mogą być źródłem problemów) Hasło - dowolny ciąg znaków (od 1 do 8, czasem więcej, nie zaleca się jedynie znaków kontrolnych, które mogą być interpretowane przez terminal), w pliku /etc/passwd (lub /etc/shadow) w postaci zaszyfrowanej (hasła użytkownika używa się jako klucza algorytmu DES i szyfruje się 25 razy dane zerowe, w procesie szyfrowania uwzględnia się „sól” - jedną z 4096 wartości) wynik szyfrowania (64 bity) zamienia się na 11 znaków, dodaje 2 znaki „soli” i zapisuje w pliku /etc/passwd. Niektóre systemy sieciowe (np.. NIS, NIS+ firmy Sun operują na sieciowej wersji bazy danych /etc/passwd) Zmiana hasła - program passwd (zaleca się sprawdzić możliwość logowania po zmianie hasła), można wymuszać „silne” hasła, okresową zmianę hasła „Złe hasła” = drzwi otwarte Zapisywanie haseł - hasło nie może wyglądać jak hasło! Hasła jednorazowe, tokeny Używanie haseł w kilku miejscach Identyfikatory użytkowników i grup (/etc/groups) Konto superużytkownika - każde konto z UID równym 0 Znajdowanie programów z SUID i SGID: find / \(-perm o -perm \) -type f -print Znajdowanie plików urządzeń: find / \( -type c -o -type b \) -exec ls -l {} \;
14 Użytkownicy - plik /etc/passwdPlik zawierający dane o użytkownikach systemu i ich hasłach. Informacja jest podana następująco: identyfikator : zaszyfrowane_hasło : numer_użytkownika : numer_grupy : katalog_domowy : interpretator_poleceń Hasła są podane w postaci zaszyfrowanej. tomek:&1$2fg5zZ#$1$mTx/.Y5:505:501:/home/tomek/:/bin/bash Ze względu na bezpieczeństwo zaszyfrowane hasła mogą być umieszczane w pliku /etc/shadow, z prawami do czytania tylko dla administratora systemu, wówczas w pliku /etc/passwd w ich miejsce umieszcza się '*'.
15 Linux - logowanie użytkownikówinit inittab fork, exec getty getty getty ..... exec podanie nazwy użytkownika login passwd chdir, setgid, setuid, exec shell podanie hasła (jeżeli potrzebne) sh
16 /etc/bashrc Plik zawiera ustawienia niektórych zmiennych środowiskowych oraz synonimów wspólnych dla wszystkich użytkowników.
17 Ochrona kont użytkownikówkonta bez haseł tomek::101:100:Tomasz Bezhasla:/home/tomek:/bin/bash konta grupowe martwe konta usermod ... konta domyślne news:x:9:13:news:/usr/lib/news: konta uruchamiające jedno polecenie date::99:100:date:/tmp:/sbin/date konta z ograniczonymi interpreterami (bash -r) tomek::101:100:Tomasz Ograniczony:/home/tomek:/bin/bash -r konta z ograniczonym systemem plików tomek::101:100:Tomasz Ograniczony:/home/tomek:* ograniczenia pory logowania bash -r (rbash) nie można zmieniać katalogu przez cd nie można zmieniać wartości zmiennych środowiskowych SHELL, PATH, ENV, BASH_ENV nie można używać / w nazwach programów używać przekierowywania strumieni >, <, >>, &>, >& używać exec aby zmienić używany interpreter poleceńte oraz inne ograniczenia te ograniczenia są nieaktywne w skryptach uruchomionych za pośrednictwem bash
18 Grupy użytkowników /etc/groupPlik zawiera informacje o grupach użytkowników w systemie. Każda linia jest formatu: identyfikator_grupy : zaszyfrowane_hasło : numer_grupy : lista_użytkowników users::501:tomek,jurek,ania
19 Złe hasła imiona i nazwiska osób (rodziny, szefów, znajomych, dzieci), zwierząt imiona postaci bajkowych (np. frodo, gandalf itp.) nazwa systemu operacyjnego i komputera numery telefonów, numery rejestracyjne samochodów daty urodzenia inne informacje dające się łatwo zdobyć (np. adresy) nazw użytkowników w żadnej postaci (np. pisanych wielkimi literami lub podwójnie) słów ze słowników (także z innych języków) nazw własnych (miejsc, państw, krain geograficznych) wyrazów składających się z powtórzonej jednej litery (np. aaaaaaaa), prostych wzorów (np. qwerty) każdego z powyższych napisanych wspak każdego z powyższych z dołączoną jedna cyfrą
20 Dobre hasła wielkie i małe litery jednocześniecyfry i/lub znaki interpunkcyjne pomieszane z literami zawierają pewne znaki kontrolne lub spacje są łatwe do zapamiętania są przynajmniej siedmioznakowe dają się szybko wpisać
21 Specjalne metody identyfikacjiHasła jednorazowe (np. OPIE - One time Password In Everything) Tokeny (np. SecurID firmy Secure Dynamics, NetSecure firmy Digital Pathways) systemy wykorzystujące cechy biofizyczne użytkowników
22 Ochrona konta root bezpieczne terminale grupa wheel /etc/securetty/etc/suauth root:user1,usr2:OWNPASS root:ALL EXCEPT GROUP WHEEL:DENY usr1:user10:NOPAS /etc/securetty - plik zawierający nazwy terminali, z których administrator może się logować do systemu.
23 Uprawnienia użytkownika rootzmiana wartości nice dowolnego procesu wysyłanie dowolnych sygnałów do dowolnych procesów zmiana ograniczeń systemowych (max. czas CPU, max.rozmiary plików itp..) włączanie i wyłączanie rozliczania zmiana identyfikatora na dowolnego użytkownika (polecenie su) wylogowywanie użytkowników oraz przeładowywanie systemu zalogowanie się pomimo istnienia pliku /etc/nologin ustawianie czasu dostęp do wszystkich urządzeń odczyt i zmiana dowolnego obszaru pamięci tworzenie plików urządzeń w dowolnych miejscach systemu plików (mknod)
24 Uprawnienia użytkownika root (cd)uruchamianie usług sieciowych na „zaufanych” portach rekonfiguracja sieci włączanie trybu „promiscous” interfejsu sieciowego odczyt, zmiana, usuwanie plików i programów uruchamianie dowolnego programu montowanie i odmontowywanie systemu plików dodawanie, usuwanie, zmiana kont użytkowników regulowanie ograniczeń miejsca na dysku i ustawianie systemu rozliczania używanie polecenia chroot zapisywanie plików pomimo 100% zapełnienia dysku
25 Uprawnienia użytkownika root (czego root nie może)dokonywać zmian w systemie plików zamontowanym „read only” - ale może pisać do „surowego” urządzenia lub zamontować dysk „read/write” odmontować system plików zawierający otwarte pliki lub w którym jakiś proces ma swój bieżący katalog odszyfrować zawartość pliku /etc/passwd - ale może zmodyfikować program login, tak aby hasła użytkowników były logowane, może też poleceniem passwd zmienić hasło konta z powyższych wynikają pewne przesłanki: wybrane pliki należy zapisywać na nośnikach wymiennych ważne pliki należy szyfrować jeżeli to możliwe, dyski należy montować w trybie „read only” należy tworzyć kopie zapasowe działającego systemu
26 Konfigurowanie systemu Linux
27 Konfiguracja typowe urządzenia i linki do nich (mouse, modem, cdrom, zip) punkty montowania dysków (szczególnie wymiennych) drukarka interfejs sieciowy konfiguracja autoryzacja ftp, telnet, ssh i inne usługi poczta (mime) nfs, samba, ncp (klient, server) ppp httpd X server linuxconf i inne
28 Typowe urządzenia i linki do nich (mouse, modem, cdrom, zip)/dev/mouse -> /dev/psaux (dla gpm) /dev/modem -> /dev/ttyS0 (dla minicom) /dev/cdrom -> /dev/hdc /dev/sda4 -> /dev/zip wiele programów odwołuje się do urządzeń fizycznych w „standardowy” sposób, dla ułatwienia sobie życia należy utworzyć linki na ogół można również znienić prawa dostępu do tych urządzeń, tak aby użytkownicy mogli ich używać np: ln -s /dev/ttyS0 /dev/modem
29 Punkty montowania dysków/etc/fstab, /etc/mtab Np.: /dev/fd0 /mnt/floppy auto user,noauto 0 1 /dev/cdrom /mnt/cdrom iso9660 ro,user,noauto 0 1 /dev/zip /mnt/zip vfat user,noauto,exec 0 1 /dev/hda1 /mnt/win vfat user,noauto 0 1 server:/export /mnt/server nfs defaults mount /mnt/cdrom mount -t iso9660 -o ro,user,noauto /dev/cdrom /mnt/cdrom /etc/fstab - zawiera statyczne informacje o różnych systemach plików przyłączonych do systemu. Jest on czytany przez programy ale nie zmieniany. Każda linia ma postać: s_block_dev mount_point fstype mntops freq passno s_block_dev - specjalne urządzenie blokowe lub zdalny system plików, który ma zostać przyłączony. mount_point - punkt przyłączenia danego systemu plików w drzewie katalogów. fstype - typ systemu plików, np. ext2 albo msdos. Typ systemu plików „auto” - wygodne dla dyskietek z systemami „msdos” i „vfat” oraz dla automounter'ów - próbowane są wszystkie rozpoznawalne typy na podstawie „superblock”, można usystematyzować poszukiwania plikiem /etc/filesystems mntops - opcje używane przy przyłączaniu danego systemu plików. Różne typy systemów plików używają specyficznych dla siebie opcji (należy czytać manual - polecenie mount) freq - parametr używany przez komendę dump. passno - parametr używany przez program fsck do ustalenia kolejności sprawdzania systemów plików. /etc/mtab - aktualna lista zamontowanych systemach plików (podobnie jak /proc/mounts). Są to wiadomości zmieniane dynamicznie przez komendy mount i unmount. Format danych jest taki sam jak w pliku /etc/fstab.
30 Drukarki z portem równoległym (/dev/lp0), szeregowym (/dev/ttyS0), USB (/dev/usb/lp0), drukarki sieciowe tzw. drukarki GDI (Windows) na ogół nie są obsługiwane! Postscript lub ghostscript oprócz lpd czasem używane są również takie systemy jak LPRng jest możliwe skonfigurowanie drukarki tak, aby drukowała na drukarkach sieciowych innego systemu wykorzystującego lpd, samba oraz ncp drukarką może być fax-modem z oprogramowaniem (np.. efax, mgetty) aby ustawić „standardową” drukarkę należy zdefiniować zmienną środowiska (np.. dla bash) PRINTER="printer_name"; export PRINTER
31 LPD - Line Printer Deamonlpd - spooling system (lpd, lpr, lpq, lpc, lprm) baza danych - /etc/printcap # LOCAL djet500 lp|dj|deskjet:sd=/var/spool/lpd/dj:mx#0:lp=/dev/lp0:sh:
32 CUPS - Common UNIX Printing Systemobsługuje IPP (Internet Printing Protocol) administracja, konfiguracja, status itp. przez WWW lub przez lpadmin obsługa szyfrowania (TLS i SSL) obsługa rozliczania (zadania/strony) sterowanie dostępem dla użytkowników obsługa PPD (PostScript Printer Description) API oraz biblioteki konfiguracja klienta - /etc/cups/client.conf
33 Interfejs sieciowy ifconfig lo 127.0.0.1 route add -host 127.0.0.1 loifconfig eth netmask up route add -net netmask eth0 route add default gw eth0 /etc/services, /etc/protocols /etc/inetd.conf ftp stream tcp nowait root /usr/sbin/wu.ftpd -l -i -a - v telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd istotne informacje zawierają również pliki: /etc/services, /etc/protocols, /etc/networks
34 Interfejs sieciowy cd.. /etc/host.equiv, ~/.rhosts Demon tcpd:logowanie i sterowanie dostępem (/etc/host.allow, /etc/host.deny) #
35 Interfejs sieciowy - filtr pakietówWarstwa aplikacji Programy klientów i serwerów Zapora sieciowa Źrodłowe i docelowe porty TCP/UDP Znaczniki stanu połączeń TCP Źródłowe i docelowe adresy IP Komunikaty ICMP Warstwa transportowa TCP, UDP Warstwa sieci IP, ICMP Warstwa łącza danych adresy MAC Sprzęt
36 ipchains (kernel 2.2.x) Suma kontrolna Poprawność Łańcuch wejściowyDemaskarada DENY DENY DENY / REJECT Łańcuch przekazujący Decyzja o rutingu Łańcuch wyjściowy DENY / REJECT DENY / REJECT Proces lokalny
37 iptables (kernel 2.4.x) Suma kontrolna Poprawność Decyzja o rutinguDROP DROP Decyzja o rutingu Łańcuch przekazujący Decyzja o rutingu DROP / REJECT Łańcuch wyjściowy Łańcuch wejściowy DROP / REJECT DROP / REJECT Proces lokalny
38 Interfejs sieciowy cd.. Serwer ftp: - /etc/ftpuserswu.ftpd, proftpd... anonymous ftp -> wydzielony system plików i chroot serwer - sendmail, qmail klient - mail, pine fetchmail nfs: /etc/fstab, /etc/exports /home / (rw, no_root_squash)
39 Interfejs sieciowy cd.. DNS: bind /etc/named.confbind uruchamiany na poziomie uprzywilejowania nadzorcy, zwykłego użytkownika, w pułapce chroot traffic shaper tc
40 Interfejs sieciowy cd.. samba: /etc/smb.conf dial-in server: mgettyppp: /usr/sbin/pppd, /etc/ppp/*, /etc/inittab http: /usr/lib/apache/*
41 Program routed uruchamiany przy starcie systemu (ze skryptów rc.d)sprawdza, które interfejsy sieciowe są skonfigurowane i czynne (muszą być co najmniej 2) wysyła i odbiera w pętli komunikaty oraz modyfikuje tablice rutowania w jądrze /etc/gateways - dodatkowy plik konfiguracyjny net/host - trasa wiedzie do sieci/komputera nazwa1 - nazwa sieci lub komputera (/etc/networks, /etc/hosts, DNS lub vv.xx.yy.zz) nazwa2 - nazwa rutera pośredniczącego (opis jw) wartość - liczba przeskoków passive - ruter nie wymienia informacji poprzez RIP, trasa do niego jest instalowana w jądrze po starcie routed i nigdy się nie zmienia, nie jest też rozgłaszana active - ruter wymienia informacji poprzez RIP, trasa do niego jest traktowana identycznie jak trasy zidentyfikowane poprzez interfejsy sieciowe external - ruter zewnętrzny (pasywny), informuje routed że inny proces będzie się zajmował tą ścieżką i nie należy jej ani uwzględniać, ani rozgłaszać ani używać (użyteczne gdy dwa rutery mają dostęp do tego samego rutera zewnętrznego)
42 Program gated obsługuje protokoły wewnętrzne RIP, OSPF, Hello, ISISobsługuje protokoły zewnętrzne EGP, BGP mogą być uruchomione jednocześnie różne protokoły ścieżki wyznaczone przez protokół wewnętrzny mogą być publikowane przez protokół zewnętrzny polecenia konfiguracyjne w jednym pliku za pomocą spójnej składni
43 Program gated - konfiguracja (1)zawartość pliku /etc/gated.conf emulacja routed rip yes ; - emulacja routed „pasywnego” rip yes { nobroadcast ; } ;
44 Program gated - konfiguracja (2)Protokół RIP i OSPF interfaces { interface le0 passive ; } ; autonomoussystem 283 ; snmp yes ; rip yes { broadcast ; defaultmetric 5 ; interface le version 2 multicast ; ospf yes { traceoptions lsabuild protocol; monauthkey "XXXXXXXX" ; backbone { authtype simple ; interface al. { priority 2 ; } ; interface le { authkey "YYYYYYYY" ; }; static { default gateway preference 140 retain ; rip broadcast - rozgłaszanie nawet wtedy jeżeli jest tylko jeden interfejs sieciowy rip defaultmetric - miara odległości dla ścieżek otrzymanych od innych protokołów ospf traceoptions lsabuild - śledzenie budowy komunikatów LSA (Link State Advertisement) ospf monauthkey - hasło dla monitorowania programem ospf_monitor ospf backbone - definicja obszaru ospf backbone priority - priorytet przy wyborze jako ruter dedykowany ospf backbone authkeu - hasło autoryzacji pakietów ospf static - ścieżka statyczna static preference - preferencja ścieżki static retain - ścieżka ma być wykorzystywana nawet gdy nie działa gated
45 Program gated - konfiguracja (3)export proto ospfase type 1 { proto bgp as { ALL metric 1; }; proto direct { }; export proto bgp as 2021 { proto ospfase { ospf yes { area { authtype none; networks { mask ; }; interface cost 1 { retransmitinterval 5; transitdelay 1; priority 1; hellointerval 10; routerdeadinterval 40; }; interface retransmitinterval 5; transitdelay 1; priority 1; hellointerval 10; }; backbone { interface retransmitinterval 5; transitdelay 1; priority 1; hellointerval 60; routerdeadinterval 180; }; Szkielet OSPF (Area ) Ruter ID: AS: 1019 bgp yes { preference 50; group type External peeras 2021 { peer ; }; IGP peeras 1019 peer ; BGP IGP Ruter A interfaces { options all passive; }; autonomoussystem 1019; routerid ; rip no; hello no; egp no; OSPF Area: bgp group type external peeras - bgp jest używany jako klasyczny protokół bramki brzegowej (wszyscy sąsiedzi z grupy należą do zewnętrznego AS) bgp group type external peeras .... peer - sąsiad o numerze jest członkiem grupy BGP External: do AS 2021
46 X Server programy do konfiguracji:XF86Setup, XConfigurator, xf86config /etc/inittab id:4:initdefault: x1:4:wait:/etc/rc.d/rc.4 ~/.xinitrc, ~/.xsession ~/.Xdefaults XF86Setup: konfiguracja sprzętu (myszka, karty graficzna, monitor) xdm, kdm, gdm - program zastępujący login, uruchamiany (np.) .ze skryptu rc.4 xinit - „surowy” start Xwindows (umożliwia wybór manager X spośród wielu dostępnych - KDE, GNOME, FVWM, itp.) startx - skrypt uruchamiający Xwindows ~/.xinitrc - skrypt inicjalizacyjny (zawiera listę poleceń wykonywanych przy starcie) ~/.Xdefaults - ustawienia systemu X (lista czcionek, rozmiary i położenie okien, kolory itp..)
47 Demony systemowe cron bind syslogd, klogd inetd i inne
48 Konfiguracja cron’a - crontab/etc/crontab minuty godzina dzień_miesiąca miesiąc dzień_tygodnia program_do_wykonania znak '*' oznacza wykonanie o każdej dozwolonej wartości dla danego pola, można podawać listy wartości i zakresy plik crontab zawiera instrukcje dla demona cron służącego do uruchamiania różnych programów o ściśle określonych porach. Plik powinien ustawiać potrzebne zmienne systemowe: ścieżka interpretatora poleceń (SHELL), który ma być użyty do wykonania podanych dalej programów, ścieżki dostępu do tych programów (PATH), ewentualnie także nazwa użytkownika, do którego ma być wysyłana poczta będąca wynikiem wykonania podanych poleceń (MAILTO). Następne linie opisują kiedy i jakie programy powinny być uruchamiane. Uwaga: do edycji pliku należy stosować polecenie crontab -e zamiast normalnej edycji.
49 Sciany ogniowe (firewall) (1)atak sieciowy
50 Sciany ogniowe (firewall) (2)www nieuzasadnione korzystanie z zasobów sieciowych
51 Sciany ogniowe (firewall) (3)blokowanie dostępu do całej sieci z określonych miejsc w Internecie monitorowanie komunikacji, nawet rejestrowanie całej wymiany danych (nieocenione w przypadkach analizy zdarzeń) szyfrowanie/deszyfrowanie ruchu pomiędzy oddziałami organizacji ściana ogniowa pozwala na filtrowanie pakietów
52 Filtracja pakietów (1) filtracja na podstawie typu protokołu (np. blokowanie komunikatów ICMP) filtracja poziomu warstwy sieciowej (IP) przekazanie pakiety na podstawie adresów IP nadawcy i/lub odbiorcy filtracja poziomu warstwy transportowej (na podstawie numerów portów - rodzajów usług) filtracja na poziomie warstwy aplikacji (serwery proxy) NAT (masquarading) - ukrywanie struktury sieci
53 Filtracja pakietów (2) filtracja statyczna filtracja dynamicznareguły „sztywno” ustalone, duża szybkość działania, mała elastyczność filtracja dynamiczna zasady zmieniane w czasie funkcjonowania systemu (odblokowywanie połączeń „na żądanie”), analiza ruchu i blokowanie wykrytych ataków
54 NAT B A C NAT nie istnieje fizyczne połączenie komputerów A i B oraz A i C, przesyłane pakiety są modyfikowane w komputerze realizującym NAT - zmiana adresów IP z punktu widzenia komputera A komunikuje się on wyłącznie z komputerem realizującym NAT, nie ma on żadnych informacji o strukturze sieci lokalnej w sieci lokalnej można używać adresów prywatnych 10.x.x.x, x.x, ...
55 NAT
56 NAT - konfiguracja
57 Zastosowanie NAT Korzyści:redukcja zapotrzebowania na adresy publiczne łatwość organizacji sieci używając adresów prywatnych przezroczystość (dla niektórych aplikacji) bezpieczeństwo Wady: złożone dostosowanie niektórych protokołów (np. FTP) brak skalowania wprowadzenie dodatkowych węzłów sieci (multihomed networks) brak fizycznego połączenia end-to-end dla zapewnienia bezpieczeństwa potrzebny IPsec
58 Firewall - architektura DMZSerwer ftp, http, news, DNS DMZ Strefa zdemilitaryzowana Strefa zdemilitaryzowana chroni klientów sieci lokalnej przed atakami wymierzonymi w serwery świadczące usługi publiczne. Ochrona serwerów i sieci lokalnej jest niezależna.
59 Zapory sieciowe (firewall) - pożądane cechyWybór odpowiednich filtrów (pakietów, połączeń, usług itp.) Odporność na ataki Wydajność Monitorowanie sieci Dodatki (VPN, legalizacja i autoryzacja) Uwaga: zapory nie chronią przed atakami z wewnątrz sieci!
60 Firewall sieciowy Warstwa aplikacji Zapora sieciowaProgramy serwera i klienta Zapora sieciowa Warstwa transportowa TCP, UDP źródłowe i docelowe porty TCP/UDP znaczniki stanu połączeń TCP Warstwa sieci IP, ICMP. IGMP źródłowe i docelowe adresy IP protokoły ICMP, IGMP.... Warstwa łącza danych MAC źródłowe i docelowe adresy sprzętowe Sprzęt
61 Netfilter CRC Poprawność DROP DROP Pre-Routing Forward Post-RoutingDROP / REJECT Input Output DROP / REJECT DROP / REJECT Lokalny proces
62 Netfilter - Przyklad (1)
63 Netfilter - Przyklad (2)DMZ: Mail server SMTP to external Accept SMTP from internal and external Accept POP-3 from internal Name server Send DNS to external Accept DNS from internal, external and packet filter box Web server Accept HTTP from internal and external Rsync access from internal Packet Filter box: PING any network TRACEROUTE any network Access DNS Internal: Allow WWW, ftp, traceroute, ssh to external Allow SMTP to Mail server Allow POP-3 to Mail server Allow DNS to Name server Allow rsync to Web server Allow WWW to Web server Allow ping to packet filter box
64 Netfilter - Przyklad (3)for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done iptables -A INPUT -i ! lo -j DROP iptables -A OUTPUT -i ! lo -j DROP iptables -A FORWARD -j DROP ifconfig eth netmask ifconfig eth netmask pppd route add default ppp0 iptables -N internal-dmz iptables -N external-dmz iptables -N internal-external iptables -N dmz-internal iptables -N dmz-external iptables -N external-internal iptables -N icmp-accept iptables -N NEVER iptables -N LOGDROP
65 Netfilter - Przyklad (4)iptables -A NEVER -j LOG --log-level alert --log-prefix "filter ERROR: ” iptables -A NEVER -j DROP iptables -A LOGDROP -m limit -j LOG --log-prefix "filter: ” iptables -A LOGDROP -j DROP iptables -A FORWARD -i eth1 -o eth0 -j internal-dmz iptables -A FORWARD -i eth1 -o ppp0 -j internal-external iptables -A FORWARD -i eth0 -o ppp0 -j dmz-external iptables -A FORWARD -i eth0 -o eth1 -j dmz-internal iptables -A FORWARD -i ppp0 -o eth0 -j external-dmz iptables -A FORWARD -i ppp0 -o eth1 -j external-internal iptables -A FORWARD -j NEVER iptables -A icmp-accept -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A icmp-accept -p icmp --icmp-type source-quench -j ACCEPT iptables -A icmp-accept -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A icmp-accept -p icmp --icmp-type parameter-problem -j ACCEPT
66 Netfilter - Przyklad (5)iptables -A internal-dmz -p tcp -d $MAILSERVER --dport smtp -j ACCEPT iptables -A internal-dmz -p tcp -d $MAILSERVER --dport pop-3 -j ACCEPT iptables -A internal-dmz -p udp -d $NAMESERVER --dport domain -j ACCEPT iptables -A internal-dmz -p tcp -d $NAMESERVER --dport domain -j ACCEPT iptables -A internal-dmz -p tcp -d $WEBSERVER --dport www -j ACCEPT iptables -A internal-dmz -p tcp -d $WEBSERVER --dport rsync -j ACCEPT iptables -A internal-dmz -p icmp -j icmp-accept iptables -A internal-dmz -j LOGDROP ptables -A external-dmz -p tcp -d $MAILSERVER --dport smtp -j ACCEPT iptables -A external-dmz -p udp -d $NAMESERVER --dport domain -j ACCEPT iptables -A external-dmz -p tcp -d $NAMESERVER --dport domain -j ACCEPT iptables -A external-dmz -p tcp -d $WEBSERVER --dport www -j ACCEPT iptables -A external-dmz -p icmp -j icmp-accept iptables -A external-dmz -j DROP
67 Netfilter - Przyklad (6)iptables -A internal-external -p tcp --dport www -j ACCEPT iptables -A internal-external -p tcp --dport ssh -j ACCEPT iptables -A internal-external -p udp --dport 33434: j ACCEPT iptables -A internal-external -p tcp --dport ftp -j ACCEPT iptables -A internal-external -p tcp --dport 1024: j ACCEPT iptables -A internal-external -p icmp --icmp-type ping -j ACCEPT iptables -A internal-external -j LOG iptables -A internal-external -j REJECT iptables -A dmz-internal -p tcp ! --syn -s $MAILSERVER smtp -j ACCEPT iptables -A dmz-internal -p udp -s $NAMESERVER domain -j ACCEPT iptables -A dmz-internal -p tcp ! --syn -s $NAMESERVER domain -j ACCEPT iptables -A dmz-internal -p tcp ! --syn -s $WEBSERVER www -j ACCEPT iptables -A dmz-internal -p tcp ! --syn -s $WEBSERVER rsync -j ACCEPT iptables -A dmz-internal -p icmp -j icmp-accept iptables -A dmz-internal -j NEVER
68 Netfilter - Przyklad (7)iptables -A dmz-external -p tcp -s $MAILSERVER smtp -j ACCEPT iptables -A dmz-external -p udp -s $NAMESERVER domain -j ACCEPT iptables -A dmz-external -p tcp -s $NAMESERVER domain -j ACCEPT iptables -A dmz-external -p tcp ! --syn -s $WEBSERVER www -j ACCEPT iptables -A dmz-external -p icmp -j icmp-accept iptables -A dmz-external -j NEVER iptables -A external-internal -p tcp ! --syn --sport www -j ACCEPT iptables -A external-internal -p tcp ! --syn --sport ssh -j ACCEPT iptables -A external-internal -p tcp ! --syn --sport ftp -j ACCEPT iptables -A external-internal -p tcp ! --syn --sport 1024: j ACCEPT iptables -A external-internal -p icmp --icmp-type pong -j ACCEPT iptables -A external-internal -j DROP iptables -N external-if iptables -N dmz-if iptables -N internal-if
69 Netfilter - Przyklad (8)iptables -A INPUT -i ppp0 -j external-if iptables -A INPUT -i eth0 -j dmz-if iptables -A INPUT -i eth1 -j internal-if iptables -A external-if -p icmp --icmp-type pong -j ACCEPT iptables -A external-if -j icmp-accept iptables -A external-if -j DROP iptables -A dmz-if -p tcp ! --syn -s $NAMESERVER 53 -j ACCEPT iptables -A dmz-if -p udp -s $NAMESERVER 53 -j ACCEPT iptables -A dmz-if -p icmp --icmp-type pong -j ACCEPT iptables -A dmz-if -j icmp-accept iptables -A dmz-if -j NEVER iptables -A internal-if -p icmp --icmp-type ping -j ACCEPT iptables -A internal-if -p icmp --icmp-type pong -j ACCEPT iptables -A internal-if -j icmp-accept iptables -A internal-if -j LOGDROP iptables -D 1 input; iptables -D 1 forward; iptables -D 1 output
70 Apache + JAVA + TOMCAT
71 Instalacja serwera Apache 2Aktualizacja oprogramowania apt-get update apt-get –u upgrade Instalacja serwera www apt-get install apache2 apt-get install libapache2-mod-jk
72 Apache 2 Pliki konfiguracyjne serwera www znajdują się w katalogu /etc/apache2. Strony dostępne na serwerze można znaleźć w podkatalogu /etc/apache2/sites-available. W przypadku definiowania pojedynczego Virtual hosta można tego dokonać bezpośrednio w pliku /etc/apache2/apache2.conf
73 Instalacja Javy Pakiet do pobrania: W celu dokonania instalacji należy: mv jdk-6u24-linux-i586.bin /usr/local chmod +x jdk-6u24-linux-i586.bin ./jdk-6u24-linux-i586.bin rm jdk-6u24-linux-i586.bin
74 Konfiguracja W pliku /etc/profile dodaćexport JAVA_HOME=/usr/local/java Zmodyfikować zmienna PATH do postaci: if [ "`id -u`" -eq 0 ]; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/ bin:/usr/local/java/bin" else PATH="/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/java/ bin" fi
75 Instalacja serwera Apache TomcatAplikacja dostępna pod adresem Po pobraniu należy wykonać: mv apache-tomcat tar.gz /usr/local/; cd /usr/local/ tar zxvf apache-tomcat tar.gz ls -s apache-tomcat tomcat Z poziomu konsoli: cd /usr/local/tomcat/bin/ chmod 755 shutdown.sh startup.sh
76 workers.properties # This file provides minimal jk configuration properties needed to # connect to Tomcat. # # We define a worker named ‘default’ #workers.tomcat_home=/usr/locale/tomcat/ workers.java_home=/usr/local/java/ ps=/ worker.list=default worker.default.port=8009 worker.default.host=localhost worker.default.type=ajp13 worker.default.lbfactor=1
77 Apache -> Tomcat W pliku apache2.conf# mod_jk config # workers.properties JkWorkersFile /etc/apache2/workers.properties# Where to put jk logs JkLogFile /var/log/apache2/jk.log # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat “[%a %b %d %H:%M:%S %Y] “ #JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat –ForwardDirectories # JkRequestLogFormat set the request format JkRequestLogFormat “%w %V %T”
78 Virtual Host /etc/apache2/sites-available:
79 Apache restart /etc/init.d/apache2 stop /usr/local/tomcat /bin/startup.sh /etc/init.d/apache2 start
80 Apache ANT
81 ANT Producent: Apache Software FoundationSystem operacyjny: GNU/Linux, Windows, Mac OS, BeOS Pierwsze wydanie: 19 lipca 2000 Aktualna wersja stabilna: 1.8.2
82 Czym jest ANT ? Narzędzie, służące do zautomatyzowania procesu budowy oprogramowania. Podobne do programu Make Napisany w Javie do wykorzystania z programami napisanymi w tym języku. Co najważniejsze, jest to open-source na licencji Apache Software Fundation. Apache Ant to narzędzie służące do zautomatyzowania procesu budowy oprogramowania. Podobne do programu Make ale napisane w języku Java do wykorzystania przede wszystkim z programami napisanymi w tym języku. Od razu zauważalną różnicą pomiędzy Ant i Make jest to, że Ant używa plików w formacie XML do opisu procesu budowy i jego zależności, gdzie Make ma własny format Makefile. Domyślnie plik XML nazywa się build.xml. Ant jest jednym z projektów Apache Software Foundation.
83 Ant a Make ? W pliku Makefile czynności określone jako komendy powłoki – zależne od platformy Ant rozwiązuje ten problem Użycie XML‘a i pliku build.xml Jednym z głównych celów Ant było rozwiązanie problemu przenośności Make. W pliku Makefile czynności potrzebne do stworzenia target są określone jako komendy powłoki, które są zależne od platformy. Ant rozwiązuje ten problem dostarczając dużą ilość wbudowanych funkcji, co gwarantuje identyczne zachowanie na wszystkich platformach. Np. w ww. pliku build.xml target clean kasuje rekursywnie folder classes. W pliku Makefile byłoby to zapisane w następujący sposób:
84 Schemat build.xml
85 Przykładowy build.xml
86 ANT wymagania - JDK 1.2 lub nowsza download - http://ant.apache.orgnajnowsza wersja - Ant (27-December )
87 Do czego można użyć ANT’a?Ant możne pobierać kod źródłowy systemu kontroli wersji CVS, Subversion, Synergy, Perforce, ClearCase i wiele innych Ant można skompilować kod źródłowy Ant pozwala na przeprowadzanie testów jednostkowych JUnit3, JUnit4, TestNG lub dowolną aplikację testową Ant może pakować skompilowany kod i zasoby jars, wars, ears, tars, zips Ant może obsłużyć zależności pomiędzy target’ami Ant zawiera ponad 80 podstawowych zadań, a 60 opcjonalnych zadań Istnieje ponad 100 narzędzi firm trzecich i zadania pisemne na Ant Ant rozszerzeń można łatwo napisane dla innych unikalnych problem
88 Ant – przykładowa instalacjarozpakować apache-ant bin.tar.gz do /usr/local/ant export ANT_HOME=/usr/local/ant exportJAVA_HOME=/usr/local/java export PATH=$PATH:$ANT_HOME/bin
89 Ant terminologia (1) project:
90 Ant terminologia (2) target:Każdy projekt definiuje zero lub więcej target’ów target jest zbiorem zadań, które mają być zrealizowane Podczas uruchamiania Ant’a, można wybrać target(s), które będą wykonane Gdy żaden target nie jest wywołany, zostanie wykonany domyślnym target mogą być wykonywane warunkowo mogą być zdefiniowane zależności między target’ami
91 przykład
92 Ant terminologia (3) taskstask jest to fragment kodu, który może być wykonany task może mieć wiele atrybutów Ant zawiera ponad 80 podstawowych zadań i 60 opcjonalnych Istnieje ponad 100 zadań firm trzecich napisanych dla Ant rozszerzenia Ant (zadania) mogą być z łatwością napisane innych unikalnych problem
93 Ant terminologia (4) Propertiesproperties ma nazwę i wartość (case-sensitive) properties mogą być stosowane w wartości atrybutów zadania Odbywa się to poprzez umieszczenie nazwy pomiędzy "$ {" i "}" w wartości atrybutu Np., jeśli jest właściwość "builddir„ o wartości „build", może być wykorzystana w atrybucie: ${builddir}/classes . Jest to rozwijane w czasie wykonywania do postaci: build/classes Ant umożliwia dostęp do wszystkich właściwości systemu, jak gdyby zostały zdefiniowane przy użyciu
94 Własności wbudowane Ant umożliwia dostęp do wszystkich właściwości systemu, jak gdyby zostały zdefiniowane przy użyciu
95 Ant dostępne środowiskaWSAD / RAD / Eclipse Ant zbudowany jest na tych IDE Wszystkie posiadają wyspecjalizowane "Ant View" z linii poleceń Automatyzacja środowiska (CruiseControl) Wymaga JDK W dalszej części tej rozmowy będzie przy założeniu, że w linii poleceń jest używany, ale wszystko będzie nadal działać w IDE
96 Wiersz poleceń Ant ant [ options ] [ target-names ] uruchamia target określony nazwa i te od których zależy można podać wiele nazw oddzielonych spacjami -D opcja określa właściwość, która może być wykorzystana przez cele i zadania. np. -Dproperty-name=property-value ant -help wymienia inne opcje wiersza polecenia
97 Podstawowe zadania
98 Zadania kompilacji
99 Zadania archwizacji
100 Zadania testowe
101 Zadania własności
102 Inne zadania
103 Usuwanie, tworzenie i kopiowanieNajważniejsze elementy pliku build.xml
104 Komendy systemowe Ant umożliwia wykonywanie komend systemowych.
105 Apache MAVEN
106 Maven Producent: Apache Software FoundationPierwsze wydanie: 25th June 2007 Aktualna wersja stabilna: 3.0.3
107 Literatura • Maven: The Definitive Guide book/reference/public-book.html • Developing with Eclipse and Maven n/download-book?file=books/m2eclipse-book.pdf • Opisy wtyczek
108 Czym jest Apache Maven Narzędzie automatyzującym budowę programowania na platformę Java. Funkcjonalności realizowane poprzez wtyczki automatycznie pobierane przy ich pierwszym wykorzystaniu. Plik określający sposób budowy aplikacji nosi nazwę POM-u (ang. Project Object Model).f
109 Cele Mavena Budowanie oprogramowania ma zakończyć się osiągnięciem wybranego przez budującego celu. Dostępnych celów jest wiele. Pula celów nie jest bezpośrednio określona przez twórcę POM-a, lecz przez wtyczki rozszerzające funkcjonalność Mavena. Poszczególne cele mogą wymagać wcześniejszej realizacji innych celów, np. cel package (zbudowanie paczki dystrybucyjnej) wymaga uprzedniej realizacji compile (kompilacja kodów źródłowych) oraz test (uruchomienie testów automatycznych). tak jak ma to miejsce w przypadku Anta lub Make'a,
110 Cykle życia (1) Mianem głównego cyklu życia projektu określa się uszeregowanych kolejno osiem najważniejszych z punktu widzenia budowy aplikacji celów. Powodzenie każdego kolejnego celu uzależnione jest od pomyślnej realizacji celów znajdujących się wcześniej w cyklu: validate - sprawdzenie, czy projekt jest poprawny i czy wszystkie niezbędne informacje zostały określone compile - kod źródłowy jest kompilowany test - przeprowadzane są testy jednostkowe
111 Cykle życia (2) package - budowana jest paczka dystrybucyjna integration-test - zbudowany projekt umieszczany jest w środowisku testowym, gdzie przeprowadzane są testy integracyjne verify - sprawdzenie, czy paczka jest poprawna install - paczka umieszczana jest w repozytorium lokalnym - może być używana przez inne projekty jako zależność deploy - paczka umieszczana jest w repozytorium zdalnym (opublikowana)
112 Co to POM ? POM, czyli Project Object Model, to dokument XML-owy kompleksowo opisujący projekt. POM nie tylko precyzuje szczegóły budowy produktu, ale też może przechowywać informacje o zespole programistów, zastosowanych systemach wspomagających rozwój oprogramowania. W Mavenie dokument POM nosi nazwę pom.xml.
113 Przykład POM (1)
116 Przykład POM (4)
117 Powiązania pomiędzy plikami POMAgregacja - Mechanizm mający na celu rozbicie dużego projektu na podprojekty (moduły), by ułatwić zarządzanie źródłami. POM głównego projektu agreguje POM-y modułów, te zaś mogą agregować POM-y swoich podmodułów itd. Dziedziczenie - Każdy POM ma rodzica, którym jest inny dokument POM. Eliminuje to potrzebę jawnego określania wszystkich elementów w POM-ie każdego modułu Zależność Dziedziczenie- - jeżeli dana opcja nie została sprecyzowana w konkretnym POM-ie, to jest ona pobierana z rodzica. Jeżeli rodzic również jej nie określa, to z rodzica rodzica itd, ponieważ dziedziczenie POM-ów jest przechodnie. Jeżeli rodzic nie jest podany wprost, to jest nim tzw. Super POM - dokument określający domyślną konfigurację. Nie należy mylić dziedziczenia z agregacją - dziedziczenie to mechanizm mający na celu ograniczenie powielania treści POM-ów, podczas gdy agregacja ma na celu modularyzację projektu. Dziedziczenie jest niezależne od podziału projektu na moduły, choć oba mechanizmy bardzo często występują razem.
118 Tworzenie POM Programista może napisać POM-a samodzielnie od podstaw, prościej jednak użyć Mavena, który potrafi wygenerować prostego POM-a samodzielnie: mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app
119 Wtyczki Większość funkcjonalności Mavena dostępna jest za pośrednictwem wtyczek. Każda z wtyczek posiada wyspecyfikowane cele które może realizować. Dany cel może być wywołany używając poniższej składni: mvn [nazwa-wtyczki]:[nazwa-celu] Przykładowo kompilacji kodu można dokonać wywołując mvn compile:compile.
120 Generowanie raportów Jedną z funkcjonalności Mavena jest zautomatyzowana generacja strony internetowej projektu. Strona, oprócz ogólnych informacji ustalanych na podstawie POM-a, zawiera również zbiór raportów dokumentujących projekt. W skład raportów wchodzą najczęściej Javadoc, kody źródłowe itd.
121 Maven a Ant Apache Ant jest innym narzędziem na platformę Java automatyzującym proces budowy oprogramowania. Pracując z Antem, programista tworzy skrypt (Buildfile) określający krok po kroku sposób budowy programu. W Mavenie natomiast określa raczej co ma zostać zbudowane i w jaki sposób, niż kiedy i w jakiej kolejności. Kolejność wykonywania poszczególnych faz jest ustalana przez Mavena. Maven wydaje się być mniej elastyczny niż Ant, nie jest to jednak prawdą, gdyż ostatecznie można nakazać Mavenowi wywołanie Anta. Na korzyść Mavena przemawia fakt, że stworzenie i utrzymanie pliku POM wymaga zwykle znacznie mniej pracy, niż Antowego Buildfile'a.
122 Instalacja Mavena
123 Konfiguracja środowiskaPobierz Maven2 ze strony Zainstaluj Maven2 w maven_home Dodaj ścieżkę maven_home/bin do PATH (uwaga Linux/Windows) Ustal lokalizację JDK w zmiennej środowiskowej JAVA_HOME
124 Maven z Netbeans Zainstaluj plugin Maven w NetBeans (Tools → Plugins)Sprawdź czy w Tools → Options → Miscellaneous znajduje się zakładka Maven Na zakładce Maven podać lokalizację maven_home (o ile NetBeans sam nie wykrył Maven-a po PATH)
125 Maven z Eclipse • Pobierz plik archiwum z Eclipse. Dla przykładowej instalacji jako baza posłużyła wersja Eclipse 3.5 JavaEE (Galileo) • Zainstaluj Mylyn dla Eclipse 3.5: • Zainstaluj AspectJ dla Eclipse 3.5 • Zainstaluj Subclipse 1.6 • Zainstaluj GEF dla Eclipse 3.5 • Zainstaluj m2eclipse
126 Maven z Eclipse • W konfiguracji Eclipse jako masznę JAVA podać tę z pakietu JDK (eclipse.ini), np.: -vm e:\Programs\Java\jdk1.6.0_14\bin\javaw.exe • Dodać ścieżkę w Window → Preferences → Maven → Installations do katalogu w którym zainstalowano maven2 • Uwaga! Warto wyłączyć automatyczne budowanie projektu w Eclipse
127 Tworzenie projektu
128 Informacje wstępne • Projekty można tworzyć z poziomu: – Środowiska programistycznego – Linii poleceń i samego maven-a • Projekty tworzy się na podstawie tzw. archetypów np.: – Dla aplikacji bazującej na spring – Dla modułu EJB – Dla aplikacji WEB itd. • Środowisko programistyczne tak naprawdę wykorzystuje te archetypy i mavena do utworzenia określonego typu projektu
129 Projekt nadrzędny (POM)Utworzyć nowy projekt Maven File → New → Project (Alt+Shift+N) Wybrać Maven Project Wybrać archetyp (można przeszukiwać listę) groupId: org.codehouse.mojo.archetypes artifactId: pom-root
130 Docelowa struktura projektów
131 SuperPOM Jest to podstawowa konfiguracja dostarczana przez konkretną dystrybucję maven Kolejne wydanie maven może używać nowszych wtyczek (o wyższych numerach wersji) niż to z którego aktualnie korzystasz. Jeżeli coś działało w wersji, której do tej pory używałeś, to nie znaczy że będzie działało w wersji nowszej. Wniosek: zawsze podawaj numery wersji wtyczek w pom.xml
132 Projekt nadrzędny (POM)Do podania są następujące wartości: lokalizacja projektu na dysku grupId artifactId (nazwa projektu w IDE) wersja Plik pom.xml powinien mieć następującą postać:
133 Projekt typu JEE 5 Enterprise (EAR)Projekt typu EAR składa (ang. assembly) dostępne moduły (artefakty) w archiwum EAR File → New Project (Ctrl+Shift+N) Wybrać Maven Project i Next Rozwinąć listę: Archetypes from Remote Maven Repositories (można wpisywać nazwę archetypu – Quick Search) Wybrać z listy: JEE 5 EAR Archetype i Next Podać: nazwę projektu, lokalizację, grupę, wersję i zatwierdzić Finish
134 Projektu typu UTILITY (JAR)File → New Project (Ctrl+Shift+N) Wybrać Maven Project i Next Wybrać Maven Quickstart Archetype i Next Podać: nazwę projektu, lokalizację, grupę, wersję i zatwierdzić Finish Zmienić wersję Java na wymaganą, np.:1.5 (Project →Properties → Sources)
135 Projekt JEE 5 EJB (JAR) File → New Project (Ctrl+Shift+N)Wybrać Maven Project i Next Rozwinąć listę Archetypes from Remote Maven Repositories Wybrać z listy JEE 5 ejb jar archetype (można wpisywać nazwę archetypu – Quick Search) i Next Podać nazwę projektu, lokalizację, grupę, wersję i zatwierdzić Finish
136 Projekt JEE 5 Web (WAR) File → New Project (Ctrl+Shift+N)Wybrać Maven Project i Next Rozwinąć listę Archetypes from Remote Maven Repositories Wybrać z listy JEE 5 web application archetype (można wpisywać nazwę archetypu – Quick Search) i Next Podać nazwę projektu, lokalizację, grupę i wersję, zatwierdzić Finish Z Project → Properties → Frameworks dodać framework web którego będziemy używać w projekcie
137 Konfiguracja projektu EARDodaj jako zależności moduł ejb i moduł web
138 Konfiguracja maven-ear-pluginDodaj do pliku pom wtyczkę maven-ear-plugin W konfiguracji wtyczki należy dopisać:
139 Budowa aplikacji EJB3/3.1 W przypadku gdy chcemy aby moduły EJB i WEB nie były umieszczane razem w formie jednej aplikacji EAR, to pojawia się problem związany z zależnościami. Aplikacja WEB musi zawierać część kodu aplikacji EJB, a dokładniej specyfikację interfejsów komponentów EJB z których będzie korzystać. Projekt Maven dla EJB musi więc, oprócz zbudowania aplikacji EJB, wygenerować także archiwum jar zawierające te interfejsy.
140 Konfiguracja maven-ejb-pluginUstawić wartość generateClient na true Wskazać w
141 Konfiguracja projektu WEBW projekcie aplikacji WEB należy dodać zależność względem wcześniej wygenerowanego klienta aplikacji EJB – wartość
142 PARAMETRY
143 Parametry standardoweOdwołanie do parametru ma postać ${nazwa_parametru} Standardowo dostępne wartości: project.* - wartości z Maven POM settings.* - ustawienia z settings.xml env.* - zmienne środowiskowe java.lang.System
144 Parametry standardowe: project• Najczęściej wykorzystywane wartości project.* – artifactId – groupId – version – build.* • directory • sourceDirectory
145 Parametry standardowe: settingsGeneralnie bardzo rzadko wykorzystuje się w ustawieniach projektu wartości z settings.xml Najczęściej wykorzystywane wartości z settings.* localRepository offline Za to bardzo wygodnie jest tam wpisać dane uwierzytelniające w sekcji
146 Parametry standardowe: envNajczęściej wykorzystywane wartości env.* path home java_home Jeżeli to tylko możliwe, powinno się używać wartości dostępnych poprzez java.lang.System
147 Parametry standardowe: java.lang.SystemWartości bardzo często wykorzystywane Najbardziej popularne to: java.version java.home user.home user.dir line.separator file.separator os.*
148 Parametry użytkownika• Można definiować własne parametry • Wykorzystywane podczas konfiguracji projektu i przy filtrowaniu • Przykład definicji:
149 Filtrowanie Proces podstawiania wartości parametrów w plikachW pliku musi znajdować się odwołanie do parametru w postaci ${nazwa_parametru} Pozwala na zmianę treści plików konfiguracyjnych czy też samych plików źródłowych aplikacji np: Konfiguracja połączenia do bazy danych Adres WebService w adnotacji Proces filtrowania musi zostać jawnie uaktywniony. SUPERPOM ma domyślne ustawienia jak poniżej:
150 Filtrowanie: przykład filtrowania źródeł
151 Generowanie strony projektu
152 Generowanie strony projektowej (Site)• Sekcja
153 Generowanie strony projektowej (Site)W przypadku projektu wielomodułowego, strona będzie generowana z osobna dla każdego projektu. Raporty można zintegrować ustawiając wartość aggregate na true. Agregacja następuje dopiero po wykonaniu celu site:deploy • Dla celu site:deploy należy skonfigurować distributionManagement, tzn miejsce w którym zostanie umieszczona strona projektu. Może być to także okalizacja na serwerze plików czy też www (transport np.: scp).
154 Konfiguracja serwerów: przykład• Plik pom.xml
155 Informacje o projekcie: przykład
156 Listę członków zespołu projektowego bądź też organizacji należy umieścić w sekcji
157 Informacje o projekcie: summary• Dane podstawowe o projekcie
158 Informacje o projekcie: scmWyświetlane są podstawowe informacje o systemie scm użytym w projekcie, oraz jak z niego korzystać. Wymaga podania stosownych url w sekcji scm:
159 Informacje o projekcie: scmSkonfigurowanie sekcji scm pozwala z poziomu Maven wykonywać operacje w systemie scm np. commit, update itd. Wiele innych wtyczek bazuje na scm
160 Raporty na stronie projektowejW sekcji
161 Problemy przy generowaniu strony• Z uwagi na złożoność generowania strony projektowej, może pojawić się wyjątek OutOfMemoryError. Należy wtedy zmienić ustawienia maszyny wirtualnej dla maven set MAVEN_OPTS=-Xmx1024m -Xms512m - XX:PermSize=256m -XX:MaxPermSize=512m mvn site
162 Praca z repozytorium
163 Konfiguracja klienta svn po ssh• Założenia – Dostęp do repozytorium poprzez svn+ssh – Uwierzytelnianie z wykorzystaniem klucza prywatnego • Potrzebne są następujące programy – klient subversion (np. Collabnet) – putty (do konfiguracji ssh) – plink (do utworzenia połączenia ssh) – puttygen (gdy chcemy generować klucze)
164 Konfiguracja klienta svn po ssh• Wygodnie jest do PATH dodać ścieżkę do katalogu z zainstalowanymi programami putty, puttygen i plink (w tym przypadku nawet bardzo wskazane) oraz svn • W profilu użytkownika w Application Data\Subversion (%APPDATA%\Subversion) znajduje się plik konfiguracyjny config. Ustawienia można także wprowadzić z poziomu rejestru – patrz plik README • Domyślnie svn poszukuje ssh do nawiązania połączenia svn+ssh. Zmieniamy to na plink.exe w sekcji [tunnels] [tunnels] ssh = plink.exe
165 Konfiguracja połączenia svn po ssh• Uruchomić putty • Skonfigurować sesję – Session: • hostname: • connection type: SSH • session name: nazwa_sesji – Connection/SSH • Wybrać wersję protokołu – najlepiej v2 – Connection/SSH/Auth • Wskazać lokalizację pliku z kluczem prywatnym • Zapisać sesję z poziomu Session
166 Test i konfiguracja maven• Wykonać dowolne polecenie svn na repozytorium np.: svn ci svn+ssh://nazwa_sesji/lokalizacja_repo • Konfiguracja maven:
167 BUDOWA PLANOWANEGO WYDANIA APLIKACJI
168 Konfiguracja wtyczki maven-release-pluginPrzez „wydanie” rozumiemy utworzenie planowanej finalnej wersji projektu Jeżeli skonfigurowano projekt zgodnie z wcześniejszymi slajdami to jest on praktycznie gotów do użycia tej wtyczki • Wtyczka nie wymaga wtedy dodatkowej konfiguracji, aczkolwiek można to zrobić.
169 Cele wtyczki release:clean – usunięcie informacji (dodatkowych plików) po wykonaniu release:prepare release:prepare – przygotowanie wydania w SCM. release:rollback – wycofanie zmian z ostatniego wydania release:perform – wykonanie wydania z systemu SCM release:stage – wykonanie wydania do innego repozytorium albo katalogu release:branch – utworzenie rozgałęzienia aktualnego projektu z aktualizacją numerów wersji
170 Przygotowanie wydania, cel: prepare• Sprawdzenie zgodności źródeł z repozytorium (
171 Inne przydatne cele projektowePo wykonaniu celu prepare dobrze jest wykonać clean, celem usunięcia tymczasowych kopii plików pom.xml i informacji o przygotowanym ostatnim wydaniu W przypadku problemów z dokończeniem przygotowania wydania, gdy wykonane zostały zmiany w repozytorium można wycofać te zmiany przy pomocy celu rollback Można jednak po dokonaniu poprawek w konfiguracji kontynuować przygotowanie wydania przy pomocy celu prepare (takie jest domyślne ustawienie dla wtyczki, które oczywiście można zmienić)
172 Wydanie projektu, cel: performPobranie ostatniego wydania projektu Wykonanie celów: – deploy – umieszczenie artefaktów projektowych w repozytorium maven – site-deploy – umieszczenie strony projektowej na dedykowanym serwerze
173 Hudson
174 „Ręczna” integracja
175 Automatyczna integracja
176 Ciągła integracja CI, Ciągła integracja (ang. Continous Integration) – zestaw zaleceń i praktyk, które mają skrócić czas dostarczenia oprogramowania do użytkowników dzięki usprawnieniu integracji kodu.
177 CI - zalety Repozytorium kodu Automatyzacja build-ówAutomatyzacja testów Commit codziennie, build co noc Izolacja środowiska testowego od produkcyjnego Szybkie build-y, wyniki dostępne dla każdego Automatyzacja instalacji
178 Systemy CI Hudson - https://hudson.dev.java.net Apache Continuum - CruiseControl - LuntBuild - TeamCity -
179 CI
180 CI
181 Hudson - instalacja i uruchomieniejava -jar hudson.war deploy w kontenerze Tomcat Dostęp: Instalacja Hudson‘a jest wyjątkowo prosta. Wystarczy posiadać kontener servlet‘ów – może to być na przykład Apache Tomcat. W przypadku Tomcat‘a wystarczy jedynie przekopiować ściągnięty ze strony producenta plik hudson.war do katalogu webapps. Następnie uruchamiamy Tomcat‘a i to już wszystko! Przy standardowej konfiguracji Hudson powinien być dostępny pod adresem Konfiguracja Hudson‘a odbywa się poprzez Manage Hudson/System Configuration dostępne z głównej stronie. Minimalne ustawienia, jakie należy wprowadzić, to między innymi: lokalizacja instalacji JDK lokalizacja instalacji Ant/Maven konfiguracja serwera SMTP z którego będzie korzystał Hudson Instalacji plugin‘ów należy dokonać poprzez opcję Manage Hudson/Manage Plugins. Po zainstalowaniu wtyczek należy zrestartować serwer aplikacji. W tym momencie powinniśmy posiadać już Hudson‘a w postaci pozwalającej nam na osiągnięcie wyżej wskazanych celów. Teraz czeka nas jeszcze trochę pracy poza ACI związanej z czynnościami, które należy wykonać nawet, jeżeliby projekt nie korzystał z dobrodziejstw CI.
182 HUDSON - zalety Prosta instalacja, Prosta obsługa,Możliwość obsługi dowolnych projektów (Ant, Maven, Make), Powiadomienia przez RSS/ /komunikator, Build-y w środowisku rozproszonym, Wtyczki wyświetlające raporty, metryki itp., Wykresy w postaci trendów.
183 Wtyczki SCM - integracja z systemami zarządzania kodem (inne niż SVN, CVS), Build triggers - wyzwalacze, Build tools - integracja z narzędziami do buildów, Build wrappers - dodatkowe operacje przed / po buildzie, Build notifiers - dodatkowe powiadomienia, Slave controllers - dodatkowe opcje zarządzania rozproszeniem obliczeń, Build reports - raporty, statystyki, wykresy, External site integrations - integracja z systemami zewn. Np. JIRA, Artifact uploaders - zarządzanie artefaktami, Page decorators - ozdobniki.
184 Tworzenie zadania Hudson‘a (1)Mając już gotowy projekt wraz z działającym skryptem budującym należy utworzyć zadanie Hudsona: z głównego panelu sterowania Hudson wybieramy opcję New Job określamy nazwę dla tworzonego zadania wybieramy free-style jako rodzaj projektu i przechodzimy do następnego ekranu, gdzie wpiszemy pozostałe szczegóły wybieramy system kontroli wersji z którego będzie korzystał Hudson (w naszym przypadku będzie to Subversion) jako warunek wywołania procesu integracji (Build Triggers) wybieramy cykliczne odpytywanie repozytorium (Poll SCM) w harmonogramie wpisujemy łańcuch znaków zgodny z formatem crond (np. */2 * * * * – odpytywanie co 2 minuty)
185 Tworzenie zadania Hudson‘a (2)następnie definiujemy, co właściwie będzie oznaczać dla Hudson‘a zbudowanie aplikacji – w naszym przypadku chcemy, aby było to wywołanie przy pomocy Ant‘a domyślnego celu zdefiniowanego w skrypcie budowania (zaznaczamy Invoke Ant) przyszedł czas na określenie czynności, które zostaną wykonane po zakończeniu budowania aplikacji – zgodnie z wcześniejszymi ustaleniami będzie interesowało nas: zachowanie artefaktów (validator.jar) z procesu budowania (Archive the artifacts) opublikowanie wyników testów jednostkowych (Publish JUnit test result report) opublikowanie wyników pokrycia kodu testami (Record Emma coverage report) opublikowanie wyników sprawdzenia jakości kodu przy użyciu checkstyle‘a (Report violations) wysłanie informacji o integracji, która się nie powiodła ( Notification)
186 Dodatkowe zdania uzyskanie zbudowanej wersji aplikacji z konkretnego build‘a analiza zmienności w czasie różnych parametrów opisujących aplikację w celu określenia trendów (np. procentowe pokrycie testami kodu źródłowego) zatwierdzenie zmian w repozytorium, które spowodują niebudowanie się aplikacji spowoduje wysłanie maila na wskazany adres
187 Podsumowanie Hudson stanowił bardzo ważne ogniwo w procesie wytwarzania, dla większości standardowych zastosowań powinien być odpowiedni. pozostając bardzo intuicyjny oraz łatwy w konfiguracji dostarcza możliwości na zupełnie wystarczającym poziomie zaawansowania.