Piotr Kasprzyk (kwadrat@polsl.gliwice.pl) Laboratorium Sieci Komputerowych - UNIX Pisanie demonow polega na napisaniu programu, ktory korzysta z biblioteki "stdio" i komunikuje sie z "stdin" i "stdout" za pomoca printf(), scanf(), itd. Jesli taki program zostanie uruchamiony za posrednictwem demona "xinetd", to operacje odczytu i zapisu sa wykonywane na polaczeniu TCP. Taki tryb pracy nalezy zastosowac w zadaniach 5, 6 i 7. W sieci Internet wystepuja uslugi realizowane przez protokoly datagramowe (UDP, ICMP) oraz uslugi realizowane przez protokoly polaczeniowe (TCP). Do tych pierwszych naleza traceroute, RPC, NFS. Uslugami realizowanymi przez drugi typ protokolow sa m.in. telnet, ftp, finger, IRC, poczta, POP3, talk. Zeby pozwolic wielu procesom w obrebie jednego hosta na wspolbiezne uzywanie mechanizmow sieciowych, poszczegolne polaczenia sa identyfikowane przez pare gniazdek, zas same gniazdka sa okreslane przez adres IP komputera (32 bity) oraz numer portu (16 bitow). W sieci Internet zostaly zdefiniowane standardowe numery portow odpowiadajace standardowym uslugom, np. telnet ma przypisany na stale pewien numer portu, zas inne numery portow sa przypisane dla daytime, ftp i finger. Nazwy uslug oraz odpowiadajace im numery portow i typ protokolu (TCP/UDP) sa przechowywane w pliku "/etc/services". Podstawowym serwerem, ktory uruchamia wiekszosc uslug sieciowych w systemie UNIX jest "/usr/sbin/xinetd". Jest on zwykle uruchamiany przy starcie systemu i musi dzialac, zanim inne hosty beda mogly uzyskac do danego komputera dostep przez ftp, telnet i inne. Ten demon uruchamia w miare potrzeb serwery uslug, ktore w danej chwili sa potrzebne. W pliku "/etc/xinetd.conf" znajduje sie informacja, gdzie szukac katalogu z konfiguracja poszczegolnych uslug. Elementy opisujace kolejne serwery: - disable - informuje, czy usluga jest wylaczona - service "name" - nazwa uslugi, taka sama jak w pliku "/etc/services", - socket_type - "stream" (protokol polaczeniowy) albo "dgram" (protokol datagramowy) - wait = no/yes - ma znaczenie tylko dla protokolu datagramowego (dla protokolow polaczeniowych nalezy wstawic "no"), okresla, czy demon ma czekac na przychodzace datagramy ("yes") lub tez dla kazdego przychodzacego pakietu demon ma byc osobno uruchamiany, - user - nazwa uzytkownika, ktory "uruchamia" dany proces demona, - server = "program" - pelna sciezka do programu demona Po zmianach w plikach "/etc/services" i "/etc/xinetd.conf" nalezy powiadomic demona "xinetd" o zmianach: /etc/rc.d/init.d/xinetd restart W celu polaczenia sie z wybrana usluga mozna wykorzystac zlecenie telnet, np. podajac "telnet unix 79" (laczymy sie na port uslugi "fingerd"), a nastepnie wprowadzajac pusta linie mozemy zobaczyc liste uzytkownikow danego komputera. Jest to dzialanie analogiczne do wykonania "finger @unix". Realizacja tego zadania polega na uruchomieniu serwera "fingerd", ktory wczytuje ze standardowego wejscia nazwe uzytkownika lub pusta linie i uruchamia lokalnie komende "finger". Jesli zamiast pustej linii podamy nazwe jakiegos uzytkownika, to zostanie zwrocona analogiczna informacja jak przy zleceniu "finger root@unix". Wiele uslug sieci Internet jest realizowanych podobnie - przez zestawienie polaczenia TCP, po ktorym odbywa sie dwukierunkowa transmisja informacji wedlug okreslonego protokolu. Przykladem moze byc sciagniecie strony WWW "http://www.polsl.gliwice.pl/" przez wyslanie na port 80 serwera tekstu: "GET / HTTP/1.0\n\n". Uwagi: Diagnostyka: "netstat -ant", "iptables -L", "tail /var/log/messages" Wszelkie pliki pomocnicze nalezy umiescic w katalogu "/root/local". W sprawozdaniu opisac, czego brakuje w tematyce laboratorium. Zakazuje sie przeklejania fragmentow instrukcji do sprawozdania. Podczas korzystania z manuala (polecenie "man") nalezy pamietac, ze czasami w systemie UNIX wystepuje wiecej niz jedno znaczenie podanego slowa, np. jesli gdzies jest odwolanie do manuala "resolver(5)", to znaczy, ze nalezy sie odwolac do rozdzialu numer 5 manuala. Po podaniu "man resolver" uzyskamy informacje na temat "resolver(3)", czyli z trzeciego rozdzialu. Zeby uzyskac informacje z rozdzialu 5, nalezy podac: "man 5 resolver". Ten dokument jest dostepny w formie elektronicznej na stronie "http://malenstwo.iinf.polsl.gliwice.pl/~kwadrat/opis.html". Zadania do wykonania: 1. Sprawdzic, czy na wybranym komputerze z systemem operacyjnym UNIX (np. Linux - malenstwo lub HP-UX - zeus) dzialaja proste uslugi internetowe: - Echo - odsyla wprowadzane znaki, - Discard - niszczy przesylane znaki i nic nie odsyla, - Daytime - zwraca aktualna date, godzine i zamyka polaczenie TCP, - Chargen - generator znakow - uzytkownik musi zamknac polaczenie, - Quote Of The Day - przesyla wybrany cytat i zamyka polaczenie TCP. 2. Porownac dzialanie powyzszych uslug na komputerze dzialajacym pod systemem Windows NT, np. na komputerze "mat.polsl.pl". 3. Dowiedziec sie, ktora jest aktualnie godzina w Irlandii i jakie jest przesuniecie czasowe w stosunku do Polski (wskazowka: znalezc irlandzkie serwery czasu Network Time Protocol, wykorzystac telnet, podlaczyc sie do kazdego z portow TCP zwiazanych z czasem). 4. Odblokowac usluge "finger" dla calego swiata (m.in. iptables -F). Nastepnie wprowadzic zmiany, zeby zaden uzytkownik komputera "malenstwo" nie mial dostepu do tej uslugi (mozna zastosowac zmiany w konfiguracji demona xinetd lub skonfigurowac TCPwrappers "man 5 hosts_access"). 5. Napisac demona, zwracajacego na porcie "Quote of the Day" tekst wygenerowany przez inny, dzialajacy serwer tej uslugi. 6. Napisac demona wykonujacego jakas prosta, interakcyjna (program musi czytac dane i na ich podstawie cos zrobic) czynnosc, np. zwracajacy liste procesow danego uzytkownika. Po napisaniu programu nalezy go zainstalowac pod wybranym numerem portu. Program ma byc napisany w sposob bezpieczny. 7. Przegladarki stron WWW (np. lynx lub MS Internet Explorer) zadaja strony WWW przez wyslanie do portu 80/tcp kilku linii tekstu. W tekscie moga sie pojawic pary znakow CR i LF, co sygnalizuje koniec linii. Koniec calego tekstu jest sygnalizowany przez 4 znaki: CR, LF, CR, LF. Napisac demona, ktory zapisze do pliku ten tekst. Nalezy przyjac, ze liczba linii, dlugosc kazdej linii oraz sumaryczna objetosc zapisanych danych jest wieksza niz dowolny bufor w pamieci RAM.