Úvodní informace UNIX Programování a správa systému II Jan Kasprzak (kas@fi.muni.cz) UNIX je user-ftiendly, ale své přátele si vybírá. Předpoklady Programování v C a v POSIX.1 rozhraní (na úrovni PV065). UNIX z uživatelského hlediska. Síť TCP/IP z uživatelského hlediska. Cíle kursu Základy správy systému Znalost architektury TCP/IP Základy programování síťových aplikací Základy konfigurace síťových protokolů/služeb Ukončení předmětu Test - cca 20 otázek. Hodnocení: -1 až 2 body na otázku, je potřeba 20 bodů a více. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Obsah přednášky Materiály ke studiu Základy administrace systému - instalace, údržba, zálohování. Systém souborů a adresářů - rozložení v systému. Start systému - init, inicializační scripty. Uživatelé a skupiny- data, PAM, nsswitch, programování. Subsystémy- syslog, cron, tiskárny, diskové kvóty. Základy architektury sítě TCP/IP - vrstvy sítě, formáty packetů. Programování síťových aplikací - BSD sockets API. Konfigurace sítě - ARP, interface, směrování. Sériová komunikace - modemy, SLIP, PPP, proxy-ARR DNS a překlad adres - BIND, architektura, konfigurace. Konfigurace služeb sítě - inetd, TCP wrapper, FTP Vzdálené přihlášení - protokoly telnet, rlogin, secure shell. Vzdálené volání procedury - RPC a XDR, portmapper, NFS, NIS/YR Uživatelské informace po síti - LDAP, Kerberos. Elektronická pošta - formát zpráv, SMTP, POP-3, IMAR Firewally - packetové filtry, aplikační brány. X Window System - architektura, programování a správa. IPv6 - základní informace. Slidy z přednášek: http: //www. f i .muni .cz/~kas/p07 7/ Pavel Smrha & Vladimír Rudolf: Internetworking pomocí TCP/IP, KOPP 1994, ISBN 80-85828-09-X W. Richard Stevens: UNIX Network Programming, Prentice-Hall 1990 Olaf Kirch: Linux Network Administrators Guide, O'Reilly & Associates, 1995, ISBN 1-56592-087-2 Craig Hunt: TCP/IP Network Administration, 1992, ISBN 0-937175-82-X Paul Albitz & Cricket Liu: DNS and BIND, druhé vydání 1996, ISBN 1-56592-236-0 Bryan Costales & Eric Allman: Sendmail, druhé vydání 1997, ISBN 1-56592-222-0 Simson Garfinkel & Gene Spafford: Practical UNIX & Internet Security, O'Reilly & Associates, druhé vydání 1996, ISBN 1-56592-148-8 Pavel Satrapa: Linux - Internet Server, Neokortex 1998 O'Reilly & Associates, O'Reilly & Associates, O'Reilly & Associates, PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Instalace systému Po instalaci Start jádra z instalačního média. Rozdělení disků na oblasti - f disk (8), divvy (8), disklabel (8). Vytvoření souborových systémů - mkf s (8), newf s (8), mke2fs(8) . Inicializace odkládacího prostoru - mkswap (8), není nutná na všech systémech. Minimální systém - připojení z CD, z NFS nebo instalace do swapo- vací oblasti. Počáteční konfigurace hardware - vytvoření jádra pro nový systém. Instalace jednotlivých částí systému. Post-instalační konfigurace systému - přidělení doménového jména počítače, konfigurace sítě, časové zóny, systémového hesla a podobně. Restart nainstalovaného systému. Nastavit čas poslední modifikace všech souborů na nějakou definovanou hodnotu: # find / \! -type 1 \! -type d -printO \ | xargs -0 touch -t 010100001990 -- (systémy balíků typu RPM nebo DEB dělají za vás). Vytvořit kontrolní součty souborů kopii kontrolních součtů držet i na nějakém zařízení mimo počítač: # find / -type f -printO \ | xargs -0 md5sum -- >/etc/sums (lze použít například tripwire). Zazálohovat nově nainstalovaný systém na vnější zařízení. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Zálohování Proč zálohovat: • Ochrana dat před nechtěným smazáním. • Ochrana dat před výpadkem hardwaru. • Možnost sledování změn v datech. • Možnost obnovení dat po bezpečnostním incidentu. Problémy: • Nízká rychlost zálohovacích médií- nejde o snímek systému. • Malá velikost médií- nelze každý den zálohovat všechno. • Nespolehlivost médií - je nutno mít několik sad záloh. Víceúrovňové zálohování • Řeší problém rychlosti a velikosti zálohovacího média. • Záloha úrovně 0 - kompletní svazek nebo adresář. • Záloha úrovně n + 1 - soubory a adresáře, modifikované od začátku zálohy úrovně n. • Zálohovací systém by měl rozpoznat i smazané soubory. • Čas vytvoření zálohy dané úrovně musí být uložen na zálohovacím médiu kde je tato záloha uložena, nikoli na disku. PV077 UNIX - programování a správa systému II 7 http: //www. £i .muni.cz/~kas/p0 77/ Rozložení adresářů v systému • Tradiční - není specifikováno žádnou de iure normou. • Rozdíly - BSD versus System V, modifikace od jednotlivých výrobců. • Linux - FileSystem Hierarchy standard (FHS). Kořenový adresář • Obvykle malý svazek, který není sdílen mezi více stroji. • Programy by neměly vyžadovat vytváření dalších souborů nebo adresářů přímo pod /. /bin - nezbytné uživatelské programy (přístupné všem uživatelům). Měly by zde být pouze programy, nutné k jednouživatelskému běhu systému a k nastartování sítě), /boot - statické soubry zavaděče systému (tento adresář by měl být na svazku, který je dostupný firmwaru), /dev - speciální soubory. Často také obsahuje program MAKEDEV pro vytváření těchto speciálních souborů. PV077 UNIX - programování a správa systému II 9 http: //www. £i .muni.cz/~kas/p0 77/ Adresář /usr • Sdílitelná data, přístupná v běžném případě pouze pro čtení. • Subsystémy by neměly vytvářet další adresáře pod /usr- jedinou výjimkou je XI1 z tradičních důvodů. Xll - X Window System (často též X11R6). Obsahuje mj. i podadre- sářebin, lib a include s odkazy z adresářů /usr/bin, /usr/lib a/usr/include. bin - uživatelské programy, které nejsou nezbytné v jednouživatel- ském režimu. Také zde jsou interpretery doc - dokumentace (někdy share/doc). games - hry a vzdělávací programy. include - hlavičkové soubory pro jazyk C. lib - knihovny, které nejsou nezbytně nutné pro jednouživatelský běh systému. Programy, které nejsou určeny ke spouštění uživatelem (případně v podadresářích). Read-only data různých aplikací, závislá na platformě (například moduly pro Perl a podobně). local - adresář pro lokálně instalovaný software. Obsahuje podadresáře bin, games, include, lib, sbin, share a src s podobným významem, jako odpovídající položky pod /usr. man - manuálové stránky (někdy share/man). Formát záloh • Vlastnický formát - nevýhoda -je nutno mít kdykoli (a nejlépe i kdekoli) možnost zálohu rozbalit. • tar - neumožňuje zabalit jen některé soubory (GNU tar ano) • cpio - pozor na zabalení s absolutní cestou. • dump - formát příslušný určitému typu souborového systému. Odpovídající restore (8) obvykle umí běžet nad libovolným FS. • Centrální zálohovací systémy - páskové knihovny. Např. Legato Networker. • On-line záloha - replikace databáze, kopírování na jiný počítač, zrcadlení přes nbd. • Off-site backupy - proti živelným pohromám a krádeži. • Zabezpečení - šifrovaný nebo zamčený backup. • Uchovávat i hodně staré backupy. PV077 UNIX - programování a správa systému II 8 http: //www. £i .muni.cz/~kas/p077/ /etc - konfigurační soubory pro konkrétní systém. Nelze sdílet mezi počítači. Na systémech blízkých SysV zde jsou také programy, které používá správce systému (viz /sbin). /home - domovské adresáře uživatelů. Mohou být i jinde, záleží na správci. Obvykle samostatný svazek. /lib - sdílené knihovny, nezbytné pro běh systému. Plug-iny a další data. /opt - přidané softwarové balíky. Tento adresář bývá často na zvláštním svazku. /root - domovský adresář superuživatele. Někdy též /. /sbin - systémové programy (programy, které používá jen systém sám nebo správce systému). Na některých systémech chybí a tyto programy jsou v /etc. /tmp - dočasné soubory. Adresář, přístupný všem uživatelům (vyžaduje sticky bit). Často se doporučuje, aby tento adresář byl promazán při startu systému. PV077 UNIX - programování a správa systému II 10 http: //www. £i .muni.cz/~kas/p077/ sbin - systémové programy, které nejsou nezbytně nutné pro běh systému (síťové služby, tiskový démon a podobně). share - data nezávislá na architektuře (informace o časových zónách, terminf o a podobně). spool - symbolický link na /var/spool z důvodů kompatibility. src - zdrojové texty od systémových komponent. tmp - symbolický link na /var/tmp z důvodů kompatibility. Adresář /var • Data, která se mohou měnit (tiskové fronty, mailboxy lokálně generované fonty a podobně). Tento adresář není sdílitelný mezi počítači a může být na samostatném svazku. adm - administrativní data. Často obsahuje systémové logy. lock - aplikační zámky - například zámky na sériové linky, log - systémové logy mail - poštovní schránky uživatelů (někdy ve spool/mail). opt - modifikovatelná data pro balíky v /opt. run - soubory, vztahující se k běžícím programům spool - tiskové a poštovní fronty, tmp - dočasné soubory. PV077 UNIX - programování a správa systému II 11 http://www.fi.muni.cz/~kas/p077/ PV077 UNIX - programování a správa systému II 12 http://www.fi.muni.cz/~kas/p077/ Start systému - init • Program - /sbin/init • Proces - číslo 1. • System V - řidiči soubor /etc/inittab • BSD - soubory /etc/gettytab a/etc/rc. Jména /sbin/init a /bin/sh jsou jediná jména, zakompilovaná do kernelu. Zbytek systému má rozložení nezávislé na kernelu. Úrovně běhu systému • Runlevels - číslo od 0 do 6. • Určuje, které subsystémy jsou aktivní. • Není v BSD • 0 - Halt - zastavení systému. • 1 - Single - jednouživatelský běh systému. • 2 - Multi - víceuživatelský běh systému. • 3 - Remote FS - obvykle 2 + sdílení disků. • 4 - Free. • 5 - Free - RedHat zde má 3 + X-Window system. • 6 - Reboot - restart systému. init (8), telinit (8) ......... Změna stavu systému # init [0123456aAbBcCsSqQ] [0 - 6] Přechod na příslušnou úroveň chodu systému. [a - c, A - C] Nastartování činností, které se však nikde neevidují. [sS] Totéž co init 1, jen konzolou se stane současný terminál. [qQ] Způsobí znovunačtení souboru /etc/inittab. SysV Startovací skripty • Startovací scripty v /etc/init. d - pro každý subsystém. • Adresáře /etc/rc[0-6] .d, linky [SK] [0-9] [0-9] skript (například K5 6syslog nebo S60sshd)do . ./init.d. • Startovací skripty se spouštějí s parametrem start nebo stop. RedHat-specifícké vlastnosti: • Adresář /etc/sysconf ig. • Parametry restart a status u startovacích skriptů. • Program chkconf ig (8) . Také na IRIXu. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Formát souboru inittab • Identifikace úlohy- pozor, v některých systémech může být nejvýše dvouznaková. • Runlevel - při které úrovni běhu systému se daná úloha má spouštět. • Způsob spouštění • Příkaz Způsoby spouštění úloh once - pouze jednou při přechodu na daný runlevel. respawn - init úlohu restartuje po jejím skončení, sysinit - pouze jednou při startu systému. wai t - pouze jednou při přechodu na daný runlevel. init čeká na dokončení úlohy. Příklad souboru inittab id:5:initdefault: si::sysinit:/etc/rc.d/rc.sysinit 10:0:wait:/etc/rc.d/rc 0 11:1:wait:/etc/rc.d/rc 1 12:2:wait:/etc/rc.d/rc 2 13:3:wait:/etc/rc.d/rc 3 14:4:wait:/etc/rc.d/rc 4 15:5:wait:/etc/rc.d/rc 5 16:6:wait:/etc/rc.d/rc 6 ud::once:/sbin/update ca::ctrlaltdel:/sbin/shutdown -t3 -r now pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" pr:12 34 5:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" 1:123 45:respawn:/sbin/mingetty ttyl 2:2345:respawn:/sbin/mingetty tty2 4:2345:off:/sbin/mingetty tty4 x:5:respawn:/usr/bin/Xll/xdm -nodaemon PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Svazky Soubor /etc/f stab - seznam všech automaticky připojovaných svazků. Soubor /etc/mtab - seznam aktuálně připojených svazků. (Linux -také v /proc/mounts). Program mount (8) - připojení svazku. Program umount (8) - odpojení svazku. Bind-mount-připojení existujícího adresáře jako svazku (Linux). Též vícenásobné připojení téhož svazku. Loop device - Linux, Solaris. Vytvoření blokového zařízení ze souboru. Možnost připojení souboru jako svazku (např. ISO 9660 obraz CD). Odkládací prostor Disková oblast. Někdy možnost swapovat do souboru. Vzdálený odkládací prostor - nevýhodné a těžké implementovat. Seznam - obvykle v /etc/f stab Aktivace/deaktivace - swapon (8), swapof f (8). Další informace - swap (8), /proč/swaps v Linuxu. Uživatelé a skupiny UID/GID - identifikace uživatele/skupiny z hlediska jádra systému. Jméno uživatele - používá se při přihlašování a u logování do souborů. Soubor/etc/passwd Základní databáze uživatelů Jméno uživatele - klíč v /etc/passwd. Heslo - v zašifrované podobě. UID - číslo uživatele. Může být víc záznamů se stejným UID. GID - GID, které mají procesy po přihlášení. Obvykle 15-bitové. GCOS - komentář, obvykle celé jméno uživatele. Někdy několik záznamů oddělených čárkou, význam je systémově závislý (využívá jej např. finger). General Electric Comprehensive Operating System. Dennis Ritchie píše: „Sometimes we sent printer output or batch jobs to the GCOS machine. The GCOS field in the password file was a place to stash the information for the $IDENTcard. Not elegant." Domovský adresář - pracovní adresář shellu po přihlášení. Shell -jméno programu, který se spustí po přihlášení. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Šifrování hesel Formát souboru /etc/group Standardně - 25-krokový DES, 2 znaky sůl, zbytek heslo. Knihovní funkce - crypt (3). Jiné metody - MD5, RC4, IDEA, DSS. Ukládání hesel Standardní UNIX-hesla jsou vystavena útoku hrubou silou (John the Ripper) a slovníkovému útoku (crack (8)). Shadow passwords - hesla a další údaje jsou uloženy v souboru /etc/shadow. Omezení hesla na určitý čas, omezení frekvence změny hesla. Nutnost set-uid/gid u programů, pracujících s hesly. BSD- /etc/master .passwd- analogie shadow. Trusted control base - TCB - SCO, Digital UNIX - C2 bezpečnost. Nemožnost znovuvyužití hesla, volitelný zákaz změny hesla, volby vlastního hesla, atd. Nutnost set-uid/gid programů, pracujících s hesly. Jméno skupiny - identifikace pro logování do souboru a pro přepínání GID pomocí newgrp (1). Heslo skupiny - obvykle nepoužito. Případné heslo může také být v /etc/gshadow. Použití hesla u systémů s GID-listem: Skupiny bez hesla jsou přidány do GID-listu hned po přihlášení, ostatní jen explicitně pomocí newgrp (1). Číslo skupiny- 15-bitová identifikace pro systém. Seznam uživatelů -jména oddělená čárkami. Primární skupina je implicitně, uživatel zde nemusí být uveden. Modifikace tabulky uživatelů Speciální programy - vipw (8) - je-li databáze uživatelů uložena i jinde (shadow, master .passwd). Změna uživatelských informací - chf n (8). Dávkové přidávání- useradd, groupadd, userdel, groupdel - vytváří domovský adresář, alokuje volné UID, kopíruje soubory z /etc/skel. Problém: skupina pro každého uživatele? pwconv (8) - převod hesel do shadow. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Soubor/etc/shells Obsahuje jména souborů - na každém řádku jedno. Změna shellu pomocí chsh (1). Některé služby jen pro uživatele s platným shellem. /sbin/nologin - shell pro pseudouživatele. Name Service Switch Alternativní zdroje dat pro systémové tabulky (passwd, group, hosts, ... ). Implementace - plug-iny do libc. Konfigurace - /etc/nsswitch.conf passwd: group: hosts: networks: compat compat dns [!UNAVAIL=return] files nis [NOTFOUND=return] files NS Switch - konfigurace • Formát souboru - databáze, mezera, popis služeb. • Podrobnější specifikace - [ [! ] {STATUS)={AKCE) ...] • Možné akce RETURN - vrácení právě nalezené hodnoty nebo chyby. CONTINUE - pokračovaní použitím další služby. • Možné návratové stavy SUCCESS - záznam nalezen, nedošlo k chybě. Implicitní akce je RE - TURN. NOTFOUND - vyhledávání proběhlo bez chyby, ale záznam se nenašel. Implicitní akce je CONTINUE. UNA VAIL - služba není trvale dostupná (např. nezkonfigurovaná). Implicitně continue. TRYAGAIN - dočasná chyba (timeout, vyčerpání prostředků, atd.). Implicitně CONTINUE. Plug-iny- Linux/glibc: /lib/libns s ^{služba) .so.X. Pozor na statické linkování- Solaris nelze, Linux/glibc ano. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Pluggable Authentication Modules PAM - Sun Microsystems, nyní GPL nebo BSD. Hlavní vývoj nyní Red Hat. Téměř všechny UNIXy - distribuce Linuxu, Solaris, HP-UX. IRIX a některé BSD nikoliv. Různé stupně vývoje. Modulární přístup k autentizaci - čipové karty, hesla, biometriky síťové databáze (Kerberos, LDAP, NIS), atd. Architektura -knihovna libpam, plug-iny v /lib/security, konfigurace v /etc/pam.conf a/etc/pam.d/*. PAM - skupiny autentizace account - jestli vůbec člověk má účet, nevyexpirované heslo, může k dané službě přistupovat? auth - vlastní autentizace - ověření identity žadatele (heslo, jednorázové heslo, biometriky, čipové karty + PIN, atd.). password - změny autentizačních mechanismů (změna hesla apod.). session -akce před zpřístupněním služby a po ukončení (audit, při- pojení domovského adresáře, nastavení uživatelských limitů, atd). PAM - formát konfigurace auth required pam_securetty.so auth required pam_env.so auth required pam_nologin.so auth sufficient pam_unix.so nullok auth required pam_deny.so account required pam_unix.so password required pam_cracklib.so retry=3 password sufficient pam_unix.so nullok md5 shadow password required pam_deny.so session required pam_limits.so session required pam_unix.so session optional pam_console.so • Řídící hodnoty: required - pokud selže, selže i celý autentizační proces. requisite - totéž, ale skončí se hned. sufficient - stačí k autentizaci bez ohledu na výsledek následu- jících modulů. optional - spustí se, ale výsledek se použije pouze pokud jde o jediný modul daného typu. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Uživatelé a skupiny - programování getpwnamO), getpwuid(3)........Databáze uživatelů #include #include struct passwd *getpwnam(const char *name); struct passwd *getpwuid(uid_t uid); struct passwd{ char *pw_name; char *pw passwd; uid_t pw_uid; gid_t pw_gid; char *pw_gecos; char *pw_dir; char *pw_shell; }; Vrací ukazatel na strukturu, popisující záznam daného uživatele. Pozor - funkce nejsou reentrantní, používá se vždy jedna a tatáž struktura. Seznam všech uživatelů - getpwent (3), setpwent (3), endpwent(3) . getgrnam(3), getgrgid(3).........Databáze skupin #include #include struct group *getgrnam(const char *name); struct group *getgrgid(gid_t gid); struct group{ char *gr_name; char *gr passwd; gid_t gr_gid; char **gr_mem; }; Vrací ukazatel na strukturu, popisující skupinu. Není reentrantní. Seznam všech skupin- getgrent (3), setgrent (3), endgrent(3) . PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Terminálové procesy get ty - inicializace linky, výpis zprávy, čekání na vstup, login - načtení hesla, zápis do wtmp a utmp. shell - uživatelský program. Soubor utmp /var/run/utmp Seznam právě přihlášených uživatelů. ttinclude struct utmp, knihovní funkce pro procházení a modifikaci utmp. Programy - who (1), w (1). Problém - právo zápisu; set-uid/gid programy. Bezpečnostní riziko. Jiné řešení: knihovna a pomocný program - utempter (8). Soubor wtmp /var/log/wtmp Záznam o přihlášeních a odhlášeních uživatelů. Stejný formát jako u utmp, uživatel NULL značí odhlášení na daném terminálu. Speciální záznamy - start a ukončení systému, změna úrovně běhu systému. Změna systémového data. Neexistující wtmp - zákaz vedení záznamů. Při rotování wtmp nutno vždy vytvořit nový soubor. Soubor btmp - záznamy o chybných přihlášeních. Programy- last (8), lastb (8) . PV077 UNIX - programování a správa systému II http: //www. fi .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.fi.muni.cz/~kas/p077/ Správa zařízení v Linuxu Sysfs - od jádra 2.6. Čistší implementace některých vlastností /proč Jednodušší implementace - jeden soubor = jeden parametr. Podadresáře pro zařízení, sběrnice, třídy zařízení a další. /dev a jádro 2.6 Klasický UNIX - statický adresář /dev. Problémy: příliš mnoho nevyužitých souborů; pojmenování podle topologie (např. /dev/dsk/clt7d0sl) nebo podle pořadí (/dev/sdb3). DevFS -Linux 2.4 (ale skoro nikdo nepoužívá), Solaris. Problémy: politika (pojmenování a přístupová práva) v kernel-space. Linux 2.6 - udev - user-space devices. Jádro poskytuje informace, (přes sysfs), udev řeší politiku, /dev - obvykle jako tmpf s. Možnosti pojmenování-podle topologie, pořadí, sériového čísla, výrobce, driveru, atd. »Příklad: \ KERNEL="ttyUSBl", SYMLINK="pilot" SYSFS {dev} ="13 :65", KERNEL--"event*' SYMLINK="input/keyboard_first" BUS="usb", SYSFS{manufacturer}="Chicony", \ SYSFS{idProduct}="0110", KERNEL--" event*" , \ SYMLINK="input/keyboard_second" Další informace: http://www.reactivated.net/writing_udev_rules.html Hotplug Mechanismus jádra pro nově připojená zařízení. Spuštění externího programu - /sbin/hotplug. Reakce - např. udev vytvoří soubor v /dev a podobně. Coldplug - spuštění hotplug událostí pro již existující zařízení v systému (například při bootu). PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ HAL Systémové procesy Hardware Abstraction Layer Jednotný přístup k zařízením různých typů - atributy zařízení (např. typ: storage, camera). Například pro storage zařízení- f s tab-sync (8). Přidání zařízení do fstab (5). Sledování změn - pokud zařízení neumí informovat o změně. Výpis stávajícího stavu - lshal (8). D-Bus Desktop bus - zasílání zpráv mezi různými subsystémy. Obvykle dvě sběrnice - pro systémové zprávy a pro každého uživatele s grafickým prostředím. Možnost reakce na externí události - např. okno s importem fotek z fotoaparátu. GUI reakce na události jádra. Příklad - dbus_monitor (8) . Update Stará se o zápis bufferů na disk. Volá každých 30 sekund službu jádra syne (2). [Při vypínání počítače je dobré počkat 30 sekund.] • Nevýhoda - špičková zátěž. • Lepší přístup - postupná synchronizace. • Linux - kflushd, kupdate. • Ostatní UNIXy - podobné řešení. Syslogd • Zpracovává hlášení o událostech • Socket /dev/log (AF_UNIX, SOCK_DGRAM). • Typ zprávy (facility): kern, user, mail, daemon, auth, syslog, lpr, news, uucp, cron, authpriv, localO - local7. • Priorita zprávy (priority): emerg, alert, crit, err, warning, notice, info, debug. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ openlogO) ...........Otevření systémového logu #include void openlog(char *id, int option, int facility); Řetězec id je připojen před každou zprávou. Parametr option je logický součet několika z následujících možností: LOG_CONS - pokud se nepodaří odeslat zprávu, píše přímo na systémovou konzolu. LOG_NDELAY - otevřít spojení ihned (jinak až při první zprávě). LOG_PERROR - psát také na stderr. LOG_PID - do zprávy zahrnout PID procesu. closelogO)................Uzavření logu #include void closelogO; Ukončí zasílání zpráv (uvolní deskriptor). syslogO)...............Zápis zprávy do logu #include void syslog(int priority, char *fmt, ...); Řetězec fmt má podobný význam jako v print f (3), další argumenty jsou zpracovány v závislosti na něm. logger (1)................Zápis do syslogu $ logger [-is] [-p pri] [message ...] $ logger -p lpr.notice -i Printer lpO on fire! • Konfigurace-/etc/syslog .conf. • Syntaxe: typ/priorita zprávy tabulátor soubor. Poslední položka se rozlišuje podle prvního znaku: / - běžný soubor - totéž, nevolá se f syne (2) . | - logování rourou do programu. * - všem nalogovaným uživatelům. @ - logování po síti na jiný stroj. ostatní - seznam uživatelů. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Příklad /etc/syslog.conf kern.* /dev/console *.info;mail.none;authpriv.none \ /var/log/messages authpriv.* /var/log/secure mail.* /var/log/maillog *.emerg * uucp,news.crit /var/log/spooler #*.debug -/var/log/debug localO.info /var/log/ppp local2.=info |/usr/bin/log-parser *.notice Ologhost.domena.cz Odstraňování chyb Zjištění existence problému Určení místa, kde se problém vyskytuje Nalezení chyby Odstranění chyby (je-li to možné :-). Určení místa Modularita UNIXu - zjednodušuje určení místa výskytu problému. Určení chybujícího programu - například podle času přístupu ke spustitelnému souboru, k dynamickým knihovnám (nebo plug-inům), ke konfiguračním souborům. Chybová hlášení Zjistit, co chybové hlášení znamená Není-li to jasné - přečíst dokumentaci, případně zdrojové texty programu. Pokud není chybové hlášení - zjistit, do kterého logovacího souboru se zapisuje. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Vyžádat si podrobnější informace - zapnout podrobné výpisy v konfiguračním souboru nebo na příkazové řádce. Zachytit podrobnější informace - zapnout sledování zpráv priority debug v syslog.conf. Sledování procesu • Služby jádra, které proces postupně vykonává. • s trace (1) - Linux a další systémy. • par(l) -IRIX. • truss (1) -Solaris/SunOS. • Zjištění chyby služby jádra, která vedla k ukončení procesu. Dobrá rada na závěr Po nějaké době řešení problému je dobré si znovu přečíst chybové hlášení a dokumentaci. Cron • Vykonávání prací v zadaném čase. • Úlohy běží pod UID/GID toho, kdo tuto úlohu požadoval. • Standardní výstup a chybový výstup je zaslán uživateli e-mailem. crontab(l) .......... Pravidelně vykonávané úlohy -1 vypíše tabulku. -e editace tabulky ($EDIT0R, $VISUAL). - r smaže tabulku. - u (login) - nastavení pro jiného uživatele. {bez parametru) - bere tabulku ze std. vstupu. Formát tabulky: */5 8-16 * * 1-5 /usr/bin/kdo-zrovna-pracuj e • Položky- minuta, hodina, den v měsíci, měsíc, den v týdnu, příkaz. Logický součin podmínek. Pouze pokud den v měsíci a den v týdnu není *, bere se jejich logický součet. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Jednorázové úlohy at (1) - vykonání práce v zadaném čase. Pamatuje si proměnné prostředí. atq (1) - výpis fronty příkazů at (1). atrm (1) - smazání úlohy z fronty. batch (1) - odložené vykonávání. Lépe použít samostatné dávkové systémy. Spouštění - většinou dělá crond (8), někdy samostatný atd (8). Tiskárny Přístup k tiskárně je řešen metodou spoolingu, tedy tiskových front. Požadavky na tisk se ukládají do fronty, odkud je obslužné programy vybírají a po případné úpravě posílají na fyzické zařízení. Accept/Rej ect /etc/at.allow /etc/at.deny /etc/cron.allow /etc/cron.deny Cron - řízení přístupu Enable/Disable PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ BSD Tiskárny Jednodušší konfigurace. Soubor/etc/printcap. Podpora TCP/IP — číslo portu 515. Démon lpd(8), /etc/hosts.lpd. Vstupní filtr, datový filtr, výstupní filtr. Příkaz lpc (8). lpr(l),lpq(l),lprm(l). Konfigurace BSD tiskáren raw device:\ dj|lp|HP DeskJet 54 0 :lp=/dev/lpl:\ :sd=/var/spool/lpd/dj:\ :sh:\ :sf:\ :mx#10000:\ :lf=/var/log/lpd-errs:\ :pl#60: ps|HP DeskJet 540 - PostScripts :lp=/dev/lpl:\ :sd=/var/spool/lpd/ps:\ :sh:\ :sf:\ :mx#10000:\ :lf=/var/log/lpd-errs:\ : if=/usr/local/sbin/psfilter: netlj I HP LaserJet 4 over the Net:\ :lp=/var/spool/lpd/netlj/.devnull:\ :sd=/var/spool/lpd/netlj:\ :rm=bigserver.foobar.com:\ :rp=lj4:\ :sh:\ :sf:\ :mx\#0:\ :lf=/var/log/lpd-errs: PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Příklad vstupního filtru #!/bin/bash - PRNAME="'basename $0'" USER=nobody MACHINE='uname -n' renice 9 $$ >/dev/null 2>&1 while [ "$1" != "" ] ; do case "$1" in -n) shift ; USER=$1 -h) shift ; MACHINE=$1 esac shift gs -q -dSAFER -dNOPAUSE \ -sDEVICE=cdj55 0 -sPAPERSIZE=a4 \ -dBitsPerPixel=24 -dShingling=2 \ -r300x300 -sOutputFile=- -logger -p notice "lp-daemon: User $USER, \ Machine $MACHINE, printer $PRNAME" >&2 exit 0 System V Tiskárny Složitější. Démonlpsched(8). Programy lpadmin (8), lpshut (8), . accept(8), rej ect(8), enable(8), disable(8). lpmove(8) . lp(l), cancel(1), lpstat(1) . done PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Diskové kvóty (quotas) • Sledování místa, obsazeného uživatelem. • V rámci jednoho svazku. • Kvóta na počet i-uzlů a bloků. • Měkká/tvrdá kvóta, časový limit. • Soubor /quota, /quota.user, /quota.group nebo přímo v me-tadatech FS. quota (1) ............Zjištění informací o kvótách $ quota [-v] [-u (user)} Vypíše informace o překročených kvótách. S přepínačem - v vypisuje informace o všech kvótách. Volba -u -jen superuživatel. repquota(8)..............Informace o kvótách Vypíše informace o kvótách všech uživatelů, označí překročené kvóty. quotactl(2)................Nastavení kvót Služba jádra, sloužící k práci s mechanismem kvót. quotaon(8) .................Zapnutí kvót # quotaon [-a] [(filesystem)} # quotaoff [-a] [(filesystem)} Zapne/vypne kvóty pro daný systém souborů. quotacheck(8)............... Kontrola kvót # quotacheck [-a] [(filesystem)} Projde souborový systém a zkontroluje, jestli záznamy o kvótách souhlasí s aktuálním stavem. edquota(8) .................Editace kvót # edquota [-p (user)} (user) . . . Editace kvót pro jednotlivé souborové systémy. S přepínačem - p provádí dávkovou editaci podle vzoru. Proměnná EDITOR. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Sítě TCP/IP internet - několik sítí propojených dohromady. Internet - celosvětová síť s protokolem TCP/IP Transmission Control Protocol/Internet Protocol RFC - Request For Comments - dokumenty, popisující jednotlivé protokoly, ftp. f i .muni .cz : /pub/rfc. Některé z nich jsou standardy IETF - Internet Engineering Task Force. Internet drafts - návrhy protokolu, ftp.fi.muni.cz:/pub/internet-drafts. Omezená časová platnost. Historie Internetu 1969 ARPANET - první síť s přepojováním packetů - 4 uzly. 1977 Začíná vývoj protokolů TCP/IP (Stanford, BBN, University College London). 1980 Provoz TCP/IP v ARPANETu. UCB implementuje TCP/IP pro BSD. 1983 TCP/IP se stává standardem v ARPANETu. Sun Microsystems -TCP/IP v komerční sféře. 1985 NSFnet -jádro současného Internetu. Charakteristiky TCP/IP Internet - síť s přepojováním packetů (opozitum k přepojování okruhů; kombinace obou je ATM). Směrovač (router) - počítač, zajišťující propojení více sítí. Stejné protokoly pro všechny sítě a druhy sítí. Směrování na základě cílové sítě, nikoli cílové adresy. Vrstvy internetovských protokolů Nižší vrstvy přibližně podle OSI: • Fyzická - například UTP kabel, optické vlákno, metalický okruh. . Linková - síťové rozhraní (Ethernet, ATM LANE, PPP, HDLC, FDDI). • Síťová - IP (datagramy), ARP (získání HW adresy), RARP (získání vlastní IP adresy). • Transportní - ICMP (řídící zprávy), IGMP (skupinová adresace), TCP (proudy dat), UDP (datagramy). . Aplikační - protokoly jako SMTP, FTP, telnet, NTP, SNMP, ... PV077 UNIX - programování a správa systému II http: //www. fi .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.fi.muni.cz/~kas/p077/ Adresování v TCP/IP Adresy uvnitř sítě Internet Protocol - verze 4, RFC 791. IP adresa - 4 bajty. Zapisuje se jako 4 dekadická čísla, oddělená tečkami. Třídní adresace Adresa typu A -Adresa typu B -Adresa typu C -Adresa typu D - (mcast .net). Adresa typu E-240. 0.0. 0-255.255.255.255 -rezerva. ■O.x.x. x-12 7 . x. x. x. ■128.0.X.X-191.255.X.X. ■192.0.0.X-223.2 55.25 5.X. -22 4.0.0.0-2 39.255.255.255 Beztřídní adresace Nyní - nedostatek adres, vyčerpání adresního prostoru. CIDR Prefix adresy (adresa, maska). RFC 1518. Interface - síťové rozhraní - má svoji IP adresu (147.251.48.18). Netmask - maska sítě - určuje, které adresy jsou na téže síti (255.255.255.0). Network address - adresa sítě (interface and netmask -147.251.48.0). Broadcast address - adresa pro všesměrové vysílání uvnitř sítě (interface or not netmask). My address - doplní se do adresy odesílatele, nezná-li odesílatel svoji adresu (0.0.0.0). Limited broadcast - všesměrové vysílání pro tuto síť - neprochází přes routery (255 .255 .255 .255). Loopback address - pro adresování sebe sama (127.0.0.1) Privátní sítě - 10 . 0 . 0 . 0/8, 172 .16 . 0 . 0/12, 192.168.0.0/16 (RFC 1918). Nesmí se objevit v Internetu. PV077 UNIX - programování a správa systému II http: //www. fi .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.fi.muni.cz/~kas/p077/ IP nad Ethernetem Formát rámce Ethernet v2 Cílová adresa - 6 bajtů. Zdrojová adresa - 6 bajtů. Typ (protokol vyšší vrstvy) -Data - 46-1500 bajtů. CRC - 4 bajty. 2 bajty. Způsoby propojení sítí Repeater - v podstatě propojení na fyzické úrovni. Bridge/Switch - propojení na linkové úrovni. Router - propojení na síťové úrovni. Pro každou třídu protokolů může být zvláštní router. Nezávislost na ethernetu. ARP/RARP Převod HW adres na IP adresy a naopak HW type - 2 bajty (1 = Ethernet). Protocol type - 2 bajty (0x0800 = IP). HW length - 1 bajt (Ethernet = 6). Protocol length - 1 bajt (IP = 4). Operation - 2 bajty (1 = ARP request, 2 = request, 4 = RARP response). Sender layer 2 addr Sender layer 3 addr Target layer 2 addr Target layer 3 addr ARP response, 3 = RARP ARP cache - počítače si pamatují ARP informace po určitou dobu. Proxy ARP - namapování více IP adres na jednu HW adresu za účelem jednoduchého směrování (viz PPP). Pozor! starší systémy neumožňovaly mít více IP adres přiřazených jedné HW adrese. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Proxy ARP B T3 tí tí S/> S/o S/o Ss, O ^o ^o ^o O 'O 'O 'O 'O 'O 'O 'O v v v "B Internet Protocol verze 4 Datagram (packet) - balík dat omezené velikosti. Směrování - každý packet je směrován nezávisle na ostatních. Nespolehlivost - datagram může dojít vícekrát nebo se ztratit, da- tagramy mohou změnit pořadí. Fragmentace packetů - při průchodu do rozhraní s menší maximální velikostí datagramu (MTU). Formát IP packetu Verze protokolu - 4 bity. Header length - 4 bity, značí počet 32-bitových jednotek. Type of service - 3 bity priorita, 1 bit latence, 1 bit propustnost, 1 bit bezeztrátovost. Zarovnáno na 8 bitů. Total length - 16 bitů. Identification - 16 bitů - k fragmentaci. Flags - 3 bity - Don't fragment, More fragments, 1 bit rezervovaný. Fragment offset - 13 bitů, značí násobek osmi bajtů. Time to live - TTL, 8 bitů. Životnost datagramu v sekundách. Každý router musí TTL snížit aspoň o jedničku. Protocol - 8 bitů. Označení vyšší vrstvy, které datagram patří. Header checksum - 16 bitů. Source IP address - 32 bitů. Destination IP address - 32 bitů. Options - délka je násobek 32 bitů. Data - délka je násobek 32 bitů, max. 65536 bajtů. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Fragmentace packetů ICMP • Prochází-li datagram do sítě s menší MTU. • Minimální MTU je 576 bajtů. • Všechny fragmenty mají stejné identification. • Fragmenty mají more fragments flag nastaven na 1. • Poslední fragment a nefragmentované packety mají tento flag nastavený na 0. • Fragmenty (kromě prvního) mají nenulový fragment offset. • Znovusestavení datagramu - smí provádět pouze cílový počítač. Někdy je též prováděno hraničním routerem nebo firewallem privátní sítě. • Path MTU discovery - zjištění MTU cesty - posílá se nefragmentova-telný packet, sledují se odpovědi. Volitelné položky v IP datagramu • Record route - trasování cesty datagramu. • Loose source route - minimální cesta datagramu. • Strict source route - úplná cesta datagramu. • Timestamp - trasování s časovým razítkem. • Security - stupeň utajení datagramu. PV077 UNIX - programování a správa systému II 55 http: //www. £i .muni.cz/~kas/p0 77/ Neodsažitelnost adresáta • ICMP destination unreachable - type 3. • Code obsahuje bližší informace. • Datagram dále obsahuje hlavičku a prvních 64 bitů IP datagramu. Typy zpráv v závislosti na code: • Network unreachable • Host unreachable • Protocol unreachable • Port unreachable • Fragmentation needed • Source route failed • Destination network unknown • Destination host unknown Zahlcení routeru • ICMP source quench • Type = 4, code = 0, dále hlavička a 64 bitů ze začátku IP datagramu. • Vysílající strana musí reagovat snížením toku dat. PV077 UNIX - programování a správa systému II 57 http: //www. £i .muni.cz/~kas/p0 77/ Ostatní problémy • ICMP parameter problem - type = 12. • Pointer - 8 bitů, zarovnáno na 32 bitů. • Datagram dále obsahuje IP hlavičku a prvních 64 bitů dat IP datagramu. • Je-li code = 1, obsahuje pointer index na místo datagramu, které způsobilo problém. Je-li code = 0, nemá položka pointer význam. Další ICMP zprávy • Timestamp request (type = 13). • Timestamp reply (type = 14). • Information request (type = 15) - žádost o adresu sítě. • Information reply (type = 16). • Address mask request (type =17). • Address mask reply (type =18). PV077 UNIX - programování a správa systému II 59 http: //www. £i .muni.cz/~kas/p0 77/ • Internet Control Message Protocol. • Chybové a řídící zprávy IP protokolu. • ICMP zpráva - uvnitř IP datagramu. • Podává se původnímu odesílateli příslušného datagramu. Formát ICMP zpráv • Type - 8 bitů - typ ICMP zprávy. • Code - 8 bitů - přídavný kód. • Checksum - 16 bitů - kontrolní součet ICMP zprávy. ICMP Echo Request/Echo • Pro testování dostupnosti počítače. • Každý počítač v síti je povinen na ICMP echo request (type = 8) odpovědět ICMP echo (type = 0) se stejnou datovou částí. • Další položky: 16 bitů identifikace, 16 bitů číslo sekvence. PV077 UNIX - programování a správa systému II 56 http: //www. £i .muni.cz/~kas/p077/ Přesměrování datagramu • ICMP redirect - type = 5. • Žádost o přesměrování dalších packetů na jiný router. • Datagram obsahuje adresu nového routeru, IP hlavičku a prvních 64 bitů dat IP datagramu. • Code určuje typ přesměrování: Přesměrování všech datagramu pro síť nebo pro jeden počítač, případně přesměrování služby pro síť nebo pro jeden počítač. o Úkol: Jak pozná router, že má poslat ICMP redirect? Překročení času • ICMP time limit exceeded - type =11. • Životnost datagramu (TTL) vypršela, nebo byl překročen čas na sestavení datagramu z fragmentů. • Datagram obsahuje IP hlavičku a prvních 64 bitů dat IP datagramu. PV077 UNIX - programování a správa systému II 58 http: //www. £i .muni.cz/~kas/p077/ UDP • User Datagram Protokol • Nespojovaná transportní služba • Porty - rozlišení mezi více adresáty (a zdroji) v rámci jednoho počítače. Port je 16-bitové celé číslo. • Well-known ports - porty, na kterých lze očekávat obecně známé služby. Formát UDP rámce • Source port - 16 bitů. • Destination port - 16 bitů. • Length - 16 bitů. • Checksum - 16 bitů. Nepovinný. Součet UDP hlavičky a IP pseudohla-vičky IP pseudohlavička: • Zdrojová IP adresa, cílová IP adresa. • Nula - 8 bitů. • Protokol - 8 bitů. • Délka packetů - 16 bitů. PV077 UNIX - programování a správa systému II 60 http: //www. £i .muni.cz/~kas/p077/ TCP Vytvoření spojení Transmission Control Protocol Spojovaná služba Spolehlivá služba Duplexní proud dat Buffering Porty - podobně jako v UDP. Protokol TCP zaručuje následující: • Správné pořadí datagramů. • Duplicitní datagramy jsou vyřazeny. • Potvrzování přenosu dat. • Opakování přenosu, nedojde-li potvrzení. TCP spojení Klient-server. Server - poslouchá (listen) - čeká na spojení na určitém portu a je ochoten přijmout (accept) spojení. Klient - spojuje se (connect) na určitou službu (port) cílového stroje. Spojení může navazovat i z konkrétního zdojového portu. Navázání spojení - three-way handshake: Klient Server SYN (seq = x) —> ^_ SYN-ACK ACK(ack=2/ + l) —> (seq = 2/,ack = .x + l) Číslo sekvence - každý packet obsahuje 32-bitové číslo, udávající pořadí dat v něm v rámci TCP spojení. Při otevírání spojení si oba konce stanoví počáteční číslo sekvence. Bezpečnost! Zdrojová IP adresa Zdrojový TCP port Cílová IP adresa Cílový TCP port PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Klouzající okno - vysílající strana je oprávněna vysílat další packet(y) bez nutnosti potvrzení předchozího packetu. Velikost okna je dohodnuta při otevírání spojení. Potvrzování - ACK packet, piggybacking při duplexním spojení. Změna velikosti okna - každý ACK packet obsahuje počet slov, který je druhá strana ochotna přijmout. Out-of-band data - urgentní data, zasílaná mimo pořadí. Formát TCP rámce Source port - 16 bitů. Destination port - 16 bitů. Sequence number - 32 bitů. Acknowledgement number - 32 bitů. Header length - 4 bity - počet 32-bitových slov, velikost hlavičky včetně volitelných položek. Window- 16 bitů. Počet slov, které je odesílatel schopen přijmout. Formát TCP rámce II. Checksum - 16 bitů - kontrolní součet včetně pseudozáhlaví (viz UDP). Urgent pointer - poslední bajt urgentních dat. URG - 1 bit. Doručit tento segment co nejrychleji. Položka Urgent pointer je platná. SYN - 1 bit. Synchronizace sekvenčních čísel; žádost o zřízení spojení. ACK - 1 bit. Položka Acknowledgement number je platná. RST - 1 bit. Požadavek na reset spojení („Connection reset by peer") -posílá se jako odpověď na packet bez SYN flagu, který nepřísluší žádnému existujícímu spojení. PSH - 1 bit (push). Požadavek na rychlé doručení tohoto segmentu vyšší vrstvě sítě. FIN - 1 bit. Ukončení spojení - odesílatel vyslal všechna data. Options - zarovnáno na 32 bitů - volitelné položky (např. maximální velikost segmentu, který je odesílatel schopen přijmout, atd.). PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Programování síťových aplikací Několik druhů API BSD Sockets - de facto standard, nejpoužívanější. Streams - pochází z UNIXu System V (např. Lachman TCP/IP - SCO UNIX). BSD Sockets API API pro meziprocesovou komunikaci - někdy nazývané BSD IPC (oproti SysV IPC = semafory, fronty zpráv a sdílená paměť). Nezávislé na síťovém protokolu - je možné provozovat nad různými rodinami protokolů (PF_UNIX, PF_INET, PF_AX25, PF_IPX, PF_APPLETALK, PF_BRIDGE, PF_NETROM, PF_AAL5, PF_X25, PF_INET6 - citováno Z Linuxu). Socket - schránka - koncový komunikační uzel. Jeden konec síťového spojení. Deskriptor. Rozšíření abstrakce souboru - sémantika podobná běžným souborům; použití read (2), wri te (2)) nebo speciální služby pro sockety (sendmsg (2 ), recvmsg (2), atd.). Síťový formát dat Komunikace mezi různými stroji - nutnost stanovit pořadí bajtů v 16-bitovém a 32-bitovém čísle. Síťový formát dat - big endian. Nativní formát dat - little-endian u ia32, ia64, x64, AXP, ARM; big-endian u SPARC, HP-PA a dalších. Volitelné u MIPS, PPC, SPARCv9. Práce se síťovým formátem dat #include unsigned long htonl(unsigned long hosti); unsigned long ntohl(unsigned long netl); unsigned short htons(unsigned short hosts), unsigned short ntohs(unsigned short nets); PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ socket (2)................Vytvoření socketu #include #include int socket(int domain, int type, int proto); Vytvoří socket a vrátí jeho deskriptor. domain - rodina adres - způsob komunikace přes socket. Odpovídá rodině protokolů. AF_UNIX, AF_INET, atd. type - sémantika komunikace. Viz dále. proto - protokol. Obvykle existuje pro každou kombinaci (domain, type) nejvýše jeden. Pak zde může být 0. Viz /etc/protocols. Typy socketů Položka type určuje chování socketu a jeho schopnosti. SOCK_STREAM - plně duplexní spolehlivý uspořádaný proud dat, pří- padně podporuje i posílání dat mimo pořadí (out-of-band data). SOCK_DGRAM - datagramová služba. SOCK_RAW - přímý přístup na síťové zařízení. Povoleno jen superuži-vateli. SOCK_SEQPACKET - uspořádané spolehlivé duplexní spojení pro přenost packetů do jisté maximální délky. Může být požadováno načtení packetu jedním read(2) nebo podobnou službou. socketpair(2)...............Dvojice socketů #include #include int socketpair(int domain, int type, int proto, int sd[2]); Vrátí nepojmenovanou dvojici vzájemně spojených socketů. Tyto soc-kety (sd [0] a sd [1]) nelze rozlišit. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ getprotoent (3) ...........Získání čísla protokolu #include struct protoent *getprotoent(); struct protoent *getprotobyname(char *name); struct protoent *getprotobynumber(int proto); void setprotoent(int stayopen); void endprotoent(); struct protoent { char *p_name; char **p_aliases; int p proto; } Funkce slouží ke čtení tabulky protokolů v souboru /etc/protocols. Parametr stayopen říká, má-li být soubor protocols otevřen i během volání getprotobyname (2) a getprotobynumber (2). Tyto funkce jsou nereentrantní - nelze je použít v multithreadovém prostředí ani uvnitř ovladače signálu. Příklad souboru /etc/protocols ip 0 IP # internet protocol icmp 1 ICMP # internet control message p. igmp 2 IGMP # internet group multicast p. ggp 3 GGP # gateway-gateway p. tep 6 TCP # transmission control p. pup 12 PUP # PARC universal packet p. udp 17 UDP # user datagram p. raw 25 5 RAW # RAW IP interface o Úkol: Napište programy getprotobyname a getprotobynumber, které na standardní vstup vypíší číslo protokolu na základě jména a naopak. bind(2)................Pojmenování socketu #include #include int bind(int fd, struct sockaddr *addr, int addrlen); Přiřadí existujícímu socketu adresu v příslušné rodině adres. Doména AF_UNIX-adresou je cesta k souboru (/dev/log), v AF_INET je adresou dvojice (číslo portu, IP adresa). PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Adresace socketů Obecná adresa: struct sockaddr { u_short sa_family; char sa_data[14]; }; Adresa v doméně AF_UNIX: struct sockaddr_un { u_short sun_family; char sun__path [UNIX_PATH_MAX] ; }; Adresa v doméně AF_INET: struct sockaddr_in { u_short sin_family; u_short sin port; u_long sin_addr; char sin_zero[8]; }; Pojmenování portů Číslo portu - 16 bitů. Privilegované porty - 0-1023. Známé služby- well known services. getservbynameO) ...........Získání čísla služby #include struct servent *getservbyname(char *name, char *proto); struct servent *getservbyport(int port, char *proto); void setservent(int stayopen); struct servent *getservent(); void endservent(); Tyto rutiny slouží ke čtení tabulky /etc/services. Jsou analogické funkcím pro čtení souboru /etc/protocols. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Struktura servent vypadá následovně: struct servent { char *s_name; char **s_aliases; int s port; char *s proto; }; Příklad souboru /etc/services discard 9/tcp sink null discard 9/udp sink null Chargen 19/tcp ttytst source Chargen 19/udp ttytst source ftp-data 20/tcp ftp 21/tcp f sp 21/udp f spd telnet 23/tcp smtp 25/tcp mail time 37/tcp timserver Jména a adresy • Převod IP adres na jména a naopak- /etc/hosts, NIS/YP, DNS. • Jednomu jménu může být přiřazeno více adres. • Jeden počítač (rozhraní, adresa) může mít více jmen. • Resolver - mechanismus převodu jmen na IP adresy a naopak. gethostbyname(3) ........ Převod jména na IP adresu #include extern int h_errno; struct hostent *gethostbyname(char *name); struct hostent *gethostbyaddr(char *addr, int len, int type); void sethostent(int stayopen); struct hostent *gethostent(); void endhostent(); void herror(char *s); Převod jména na adresu a nazpět. Příslušné funkce jsou nereentrantní. Resolver lze volat i jinak - funkce r es_query (3) a další. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list; Příklad souboru /etc/hosts 127.0.0.1 147.251.50.60 localhost localhost.localdomain pyrrha pyrrha.fi.muni.cz o Úkol: Napište program, který pomocí gethostbyname (3) vypíše IP adresy a všechny aliasy k zadanému jménu. getsockname(2) ...........Zjištění jména socketu #include #include int getsockname(int s, struct sockaddr *name, int *namelen); Vrátí jméno - v AF_INET dvojice (IP adresa, port) - zadaného socketu. o Úkol: Napište program, který zjistí, je-li na jeho standardním vstupu socket. Pokud ano, vypíše jeho adresu. Napište program, který vytvoří pojmenovaný socket (AF_UNIX) a výše uvedenému programu jej předá jako standardní vstup. listen(2)................Cekání na spojení #include int listen(int sock, int backlog); Pojmenovaný socket může čekat na příchozí spojení pomocí listen (2). Parametr backlog definuje maximální počet příchozích spojení, které jsou ve frontě. Další jsou pak odmítnuty s chybou ECONNREFUSED. Pouze pro sockety typu socK_SEQPACKET a S0CK_STREAM. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ accept (2).............Přijetí spojení na socketu #include #include int accept(int sock, struct sockaddr *addr, int *addrlen); Přijme spojení, čekající ve frontě. Vrátí nový deskriptor, odpovídající spojení. Pouze pro SOCK_STREAM a SOCK_SEQPACKET. Chceme-li neblokující accept (2), je možné použít na poslouchači socket select (2) pro čtení. Parametr addr po návratu obsahuje adresu druhého konce socketu. o Úkol: Napište program netread, který dostane jako parametr jméno nebo číslo protokolu a jméno nebo číslo portu, otevře příslušný port a přijme na něm spojení. Na standardní výstup vypíše adresu a port, ze které obdržel spojení, dále vše co přečte ze socketu a pak skončí. Vyzkoušejte funkčnost příkazem telnet {stroj) (port). connect (2) ...............Navázání spojení #include #include int connect(int sockfd, struct sockaddr *server, int addrlen); Pro SOCK_DGRAM určuje, ze které adresy je ochoten socket přijímat data a na kterou adresu posílá data. Žádné další akce nejsou v nižších vrstvách protokolu provedeny. Pro sock_stream a sock_seqpacket se systém pokusí spojit na vzdálený socket, určený pomocí parametru server. o Úkol: Napište program netwrite, který si otevře socket a spojí se protokolem TCP na danou adresu a port. Po ustavení spojení zapíše vše co přečte ze standardního vstupu do socketu a pak uzavře spojení. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ getpeername (2) ........Adresa druhého konce socketu #include int getpeername(int s, struct sockaddr *name, socklen_t *namelen); Vrátí adresu socketu, se kterým je socket s spojený. Není-li socket spojený, vrátí -1 a errno = ENOTCONN. Práce s IP adresami #include #include #include int inet_aton(const char *cp, struct in_addr *inp); struct in_addr { unsigned long s_addr; }; char *inet_ntoa(struct in_addr in); I/O operace nad sockety recv(2), recvf rom(2), recvmsg(2) . . . Načtení dat ze socketu #include #include int recv(int s, void *msg, int len, unsigned fig); int recvfrom(int s, void *msg, int len, unsigned flags, struct sockaddr *from, int *fromlen); int recvmsg(int s, struct msghdr *msg, unsigned flags); struct msghdr { caddr_t msg_name; u_mt struct u_int caddr_t u_int int msg_flags; msg_namelen; iovec *msg_iov; msg_iovlen; msg_control; msg_controllen; PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Přečte data ze socketu. recv(2) se používá obvykle nad spojenými (connected) sockety. Parametr flags může být logický součet těchto hodnot: MSG_OOB Zpracování Out-of-band dat. MSG_PEEK Přečtení dat bez vymazání ze vstupní fronty. MSG_WAITALL Načtení přesně len bajtů dat. send(2), sendto (2), sendmsg(2) . . . Zaslání zprávy do socketu #include #include int send(int s, void *msg, int len, unsigned fig); int sendto(int s, void *msg, int len, unsigned flags, struct sockaddr *to, int tolen); int sendmsg(int s, struct msghdr *msg, unsigned flags); Posílá data na jiný socket, send (2) funguje pouze na spojené (connected) sockety. Ostatní mohou fungovat kdykoli. Pokud je zpráva příliš dlouhá na atomický přenos, vrátí funkce chybu a errno nastaví na EMSGSIZE. Parametr flags může obsahovat log. součet následujících: MSG_OOB - posílání out-of-band dat. MSG_DONTROUTE - pouze pro přímo připojené sítě. MSG_DONTWAIT - neblokující operace. MSG_NOSIGNAL - nesignalizuje SIGPIPE v případě chyby. o Úkol: Napište program udpread, který bude přijímat zprávy na zadaném UDP portu. Pro každou zprávu vypíše, odkud ji obdržel (IP adresu a port) a obsah zprávy. o Úkol: Napište program udpwrite, který otevře UDP socket a bude posílat řádky standardního vstupu na daný UDP port a danou IP adresu. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Parametry socketu int optname, int optname, getsockopt (2), setsockopt (2) Získání/nastavení parametrů socketu #include #include int getsockopt(int s, int level void *optval, int *optlen); int setsockopt(int s, int level void *optval, int optlen); Nastavení/čtení parametrů socketu. level je buď číslo protokolu (viz getprotoent (3)), nebo SOL_SOCKET pro úroveň socketu. Pro každý protokol existuje několik parametrů socketu, které lze nastavit. Pro úroveň socketu jsou to tyto: SO_DEBUG - nastaví zapisování ladící informace (superuser). SO_REUSEADDR - povolí nové použití lokální adresy při bind (2). SO_KEEPALIVE - povolí posílání keep-alive packetů. SO_DONTROUTE - obchází směrování pro odcházející zprávy. SO_LINGER - nastavuje chování při uzavírání socketu. SO_BROADCAST - získání práv na posílání broadcast packetů (může pouze superuživatel). SO_OOBINLINE - OOB data jsou čtena v normální datové frontě. SO_SNDBUF, SO_RCVBUF - nastavení velikosti čtecího a zápisového bufferu. SO_SNDLOWAT - low-water mark pro posílání dat. SO_RCVLOWAT - low-water mark pro čtení dat. SO_SNDTIMEO - timeout pro výstupní operace. Maximální doba, po kterou je proces blokovaný ve službě jádra send (2). SO_RCVTIMEO - timeout pro vstupní operace. SO_TYPE - vrací typ socketu (například SOCK_STREAM). SO_ERROR - zkoumá, došlo-li na socketu k chybě. Viz též socket (7) . shutdown(2)................Zrušení spojení #include int shutdown(int sock, int how); Zruší spojení na socketu. Parametr how může být jedno z následujících: 0 následující operace čtení jsou zakázány. 1 následující operace zápisu jsou zakázány. 2 všechny následující I/O operace jsou zakázány. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ TCP/IP aplikace Klient-server přístup. Jednoprocesový server - Vše v jednom procesu; I/O operace mul-tiplexovány pomocí select (2) nebo poll (2) nebo přes asynchronní I/O. Víceprocesový server - hlavní proces obvykle pouze přijme spojení přes accept (2), předá potomkovi k vyřízení. Na každého klienta je jeden proces na serveru. Stavový server - výsledek předchozích operací ovlivňuje následující operace (FTP - změna adresáře). Bezstavový server - nezáleží na zopakování požadavku (NFS). TCP Server [ socket () j v ( bind()~) _____v_____ ( listen() ) _____________v_____________ [ accept() j _________v_________ [ send ()/receive () j _____v_____ [ closet) j TCP Client { socket () j ____V____ f bind (j i —--r —- [connect() J _________v_________ [ send()/receive() J _____v_____ [ closet) J UDP Client/Server I socket () j _____v_____ f bind (j i [connect() i --—[-—' [ sendto()/recvfrom() j ______________V______________ [ closet) J PV077 UNIX - programování a správa systému II http: //www. fi .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.fi.muni.cz/~kas/p077/ Konfigurace sítě Přidělení jména stroje. Přidělení IP adresy na interface. Směrovací tabulky. Statické versus dynamické směrování. hostname (1).................Jméno stroje # hostname (jméno) $ hostname Nastaví/vypíše jméno stroje. Jméno může být FQDN (BSD) nebo jen jméno bez domény (SysV). uname(1) $ uname Jméno systému Zjistí jméno operačního systému. Volby jsou následující: -m - machine (hardware) type. -n - node name (host name). - r - operating system release. - s - operating system name, -v - operating system version, -a - all of the above. ifconfig(8)...........Nastavení síťového rozhraní $ ifconfig [(interface)} # ifconfig (interface) [{afname)} (options...) Slouží k přidělení adresy síťovému rozhraní a k nastavení dalších parametrů, (afname) značí rodinu protokolů, pro kterou se provádí nastavení (inet, ax25, ipx a podobně), (options) je jedno nebo více z následujících (pro Linux): up - aktivace rozhraní. Implicitně pokud se specifikuje nová adresa, down - deaktivace rozhraní, address (adresa) nebo jen (adresa) - nastavuje adresu rozhraní. [ - ] arp - zapíná/vypíná použití ARP nad daným rozhraním. [ -]allmulti - rozhraní přijímá všechny multicast packety na dané síti. [-jpromisc - přijímá všechny packety na dané síti. metric (JV) - metrika rozhraní. Používá se pro směrovací protokoly. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ mtu (JV) - Maximum Transfer Unit. dstaddr (adresa) nebo pointopoint (adresa) - cílová adresa pro point-to-point rozhraní, netmask (netmask) - síťová maska rozhraní, [-jbroadcast [(adresa)} - nastavuje adresu pro všesměrové vysílání. hw (hw-adresa) - nastavení hardwarové adresy, pokud to daný interface podporuje. multicast - nastavuje multicast flag pro dané rozhraní (implicitně je nastaven na zařízeních, které toto podporují). Směrovací tabulka Adresování na základě sítě - adresa sítě, maska (adresní prefix). Položky: adresní prefix, adresa routeru nebo jméno rozhraní, metrika. route(8) Práce s IP směrovací tabulkou route . Příklad: # ifconfig lo 127.0.0.1 \ netmask 255 .0.0.0 # ifconfig ethO 147.251.50.60 \ netmask 255.255.255.0 \ broadcast 147.251.50.255 # ifconfig pppO down Vypíše směrovací tabulku jádra (případně bez převodu na doménová jména). # route add | del [-net | -host] (target) \ [metric (metric)} [dev (interface)} Nastaví cestu k danému počítači nebo síti. Síť default je totéž co 0.0.0.0/0. Směruje se podle nejdelšího prefixu a pak podle metriky. Program ifconfig (8) přidává automaticky cestu k lokálně připojené síti. o Příklad: # route add -net 12 7.0.0.0 # route add -net 147.251.48.0 # route add default gw 147.251.48.14 PV077 UNIX - programování a správa systému II http: //www. fi .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.fi.muni.cz/~kas/p077/ Směrovací protokoly Policy routing v Linuxu Dynamická modifikace směrovacích tabulek Tolerantnost k výpadku sítě Zamezení vzniku směrovacích kruhů Rozdělení zátěže Autonomní systémy - sítě jednotlivých poskytovatelů Vnitřní a vnější směrování - v rámci nebo přes hranice AS. RIP - routing information protocol, routed (8) . RIPv2 - odstraňuje některé nevýhody RIPu. OSPF - open shortest paths first. BGP - border gateway protocol, mezi hraničními routery autonomních systémů. GateD - www. gated. org - není free, značně BSD-specifický Zebra - www. zebra. org - GPL, portabilní, včetně IPv6. BIRD - bird.network. cz Policy routing - směrování podle jiného klice, než je adresní prefix (například podle zdrojové adresy, TOS, atd.) Implementace - liší se v různých systémech. Linux - ovládání programem i p (8) - nahrazuje i f conf ig (8), route (8) a několik dalších. Routing cache - nemusí se pro každý datagram procházet směrovací tabulka. Indexováno podle rozhraní, TOS, zdrojové a cílové IP adresy (tedy žádné položky 4. vrstvy). Směrovací tabulky - více než jedna směrovací tabulka v jádře; předdefinované tabulky local a main. Pravidla - priorita, levá strana, pravá strana Levá strana pravidla - zdrojový prefix, cílový prefix, TOS, fwmark, zařízení. Pravá strana - číslo tabulky, nebo jedno z prohibit, blackhole, unreachable, dále zdrojový a cílový realm (doména). Cílová doména (realm) může být nastavena i směrovací tabulkou. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ netstat(8) .........Informace o síťovém subsystému $ netstat [-vncturi] Bez parametrů vypíše seznam otevřených socketů. Může mít mimo jiné následující přepínače: -v podrobnější výpis. - n číselný výpis bez převodu na doménová jména. - c periodický výpis podobně jako u top (1). -1 TCP sockety - u UDP sockety. - r vypíše směrovací tabulku jádra. - i vypíše seznam všech síťových rozhraní. > Příklad: $ netstat -rn Destination 147.251.48.18 147.251.48.0 127.0.0.0 0.0.0.0 Gateway 0.0.0.0 0.0.0.0 0.0.0.0 147.251.4 Mask Fig Iface 32 UH ethO 24 U ethO 8 U lo 1.14 0 UG ethO tcpdump(8) ..............Výpis provozu na síti # tcpdump [-exnp] [-c {count)} [ - i {interface)} {expression) Poslouchá na síťovém rozhraní a vypisuje provoz na něm. Parametr {expression) říká, které packety se mají vypisovat. - n nepřevádí adresy na doménová jména. - x podrobnější výpis. - e vypisuje také hlavičky linkové úrovně (například MAC adresy), -p nepřepne rozhraní do promiskuitního režimu. -c {count) vypíše prvních {count) packetů. - i {interface) jiné než implicitní rozhraní. . Příklad: # tcpdump -i ethO src host pyrrha \ and dst port http PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ ping(8)................ICMP Echo Request # ping [-nfqR] [-c {count)} [-s {size)} {host) Posílá ICMP echo request packety a vypisuje odezvy. Slouží k testování sítě na úrovní IR - n nepřevádí IP adresy na doménová jména. - f flood ping. - q bez výstupu o jednotlivých packetech. -R record route. o Příklad: $ ping -c 2 pyrrha.fi.muni.cz PING pyrrha.fi.muni.cz (147.251.50.60): 5 6 data bytes 64 bytes from 147.251.50.60: icmp_seq=0 ttl=57 time=318.2 ms 64 bytes from 147.251.50.60: icmp_seq=l ttl=57 time=535.2 ms -- pyrrha.fi.muni.cz ping statistics --2 pkts transmitted, 2 pkts received, 0% pkt loss round-trip min/avg/max = 261.4/371.6/535.2 ms IP nad Ethernetem • ARP - mapování MAC adres na IP adresy, if conf ig up - interface může posílat ARP reply do sítě. arp(8) .............Manipulace s ARP tabulkou $ arp - a # arp -d {ipaddr) # arp - s {ipaddr) {hwaddr) [netmask {netmask)} \ [pub | temp] rarp (8).............Manipulace s RARP tabulkou # rarp -d {hostname...) # rarp -s {hostname) {hwaddr) PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Sériová komunikace Sériový přenos - přenos dat po jednom vodiči, bity jdou za sebou (v sérii). Asynchronní přenos - mezi počítačem a modemem: RS-232C, RS-422; mezi modemy: V34, V32bis. Vysílající může začít vysílat v kterémkoli okamžiku. Synchronní přenos - mezi počítačem a modemem: V35, X.21, V24; mezi modemy: není standardizováno. Vysílající musí začít vysílat ve stanoveném okamžiku. Předávání taktovacích informací. Linková disciplína - způsob přenosu po lince (například interpretace speciálních znaků-Backspace, Ctrl -Capodobne). TTY vrstva v jádře UNIXu. Modem - modulátor/demodulátor - zařízení, které konvertuje datové signály za účelem přenosu po jednom nebo dvou párech vodičů, určených pro přenos zvuku. stty(l).............Nastavení terminálové linky $ stty [-a] [-g] [{setting)] Bez parametrů vypíše některé informace o lince a linkové disciplíně. Slouží k nastavování parametrů. - a Vypíše všechny informace o lince a linkové disciplíně. - g Vypíše informace ve formátu, který může být použit jako para- metr pro další stty (1) . (číslo) - nastavuje rychlost linky. cs(číslice) - počet datových bitů. Povolené hodnoty jsou 5, 6, 7 a 8. [-jistrip - ořezávání nejvyššího bitu na vstupu. [-jcrtscts - hardware flow control. [-]raw - neupravovaná linková disciplína. [-jcooked - upravovaná (standardní) linková disciplína. intr (znak) - přerušení (SIGINT) - implicitně DEL (Ctrl - ?) nebo Ctrl-C. quit (znak) - přerušení (SIGQUIT) - implicitně Ctrl - \. erase (znak) - vymazání znaku - implicitně DEL nebo Ctrl - H, ji- nak též Backspace. kill (znak) - smazání řádku - implicitně @ nebo Ctrl -U. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ SLIP Serial Line IP Protokol pro přenos IP datagramů nad sériovou linkou. CSLIP - Van Jacobsonova komprese IP hlaviček. Minimální možnosti konfigurace. Doporučuje se nepoužívat. Point-to-point protocol Přenos datagramů po sériových linkách. Protokol je symetrický - není role master a slave (neexistuje PPP server a klient). Práce i nad linkami bez 8-bitového přenosu. Posílání IP a IPX packety Komprese packetů, šifrování a další transformace. Van Jacobsonova komprese IP hlaviček. Většina vlastností protokolu (escape znaky, atd.) je vyjednána při začátku spojení. Link Control Protocol (LCP) - vyjednávání o parametrech spojení. IP Control Protocol (IPCP) - vyjednávání o IP spojení. Autentizace - RAP, CHAR Synchronní přenos Base-band modemy. Linkové disciplíny: HDLC framing, nad tím synchronní PPP nebo Cisco HDLC.Frame relay. Komunikace nad pevnými linkami. Cisco HDLC Synchronní protokol Framing - HDLC (linefill, kódování 5 z 6, křídlové značky). Keepalive packety Dotaz na adresu - varianta ARR Další přenosové protokoly Synchronní PPP - PPP zapouzdřené a kódované v HDLC rámcích. PPP over Ethernet - PPP zapouzdřené v ethernetových rámcích, modem se chová podobně jako ethernetový bridge. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Jména a adresy IP adresy - těžko zapamatovatelné. Jména počítačů. Dříve: soubor hosts.txt distribuovaný přes InterNIC (mechanismus stále používaný - /etc/hosts). Centrální registrace jmen počítačů. Nutnost rozdělení pravomoci přidělování jmen. Hierarchický systém jmen a adres. Systém domén, tečková notace doménové adresy (pyrrha.fi.muni.cz), FQDN. FQDN - řetězec jmen oddělených tečkami. Jméno může obsahovat písmena (a- z ze sedmibitové ASCII abecedy bez rozlišení velikosti), číslice a pomlčky (-). Nic jiného (RFC 1034). Doména - samostatný jmenný prostor. Subdoména - možnost vytvoření dalšího jmenného prostoru uvnitř své domény. Delegace autority spravovat subdoménu - může pouze správce nadřazené domény. Kořenová doména - značí se tečkou (.). Domain Name System DNS - RFC 1033-1035, dále RFC 1912 - Common DNS Operational and Configuration Errors. BIND - referenční implementace DNS (démon named (8)) Bližší informace - Name Server Operations Guide for BIND (přímo v distribuci BINDu). Dále „DNS and BIND". Hierarchický systém nameserverů - počítačů, odpovědných za jednotlivé domény. Kořenové nameservery - nameservery pro doménu „." - v Internetu mají doménové jméno ROOT- SERVERS .NET., jejich seznam je zveřejňován spolu s jejich IP adresami na f tp. internic. net. Registrovaný nameserver - na něj jsou delegována práva spravovat subdoménu. Neregistrovaný nameserver - není odkaz z nadřazené domény, přesto zná informace o své dobméně. Každá doména druhé úrovně by měla mít aspoň dva registrované nameservery na navzájem různých sítích. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Primární nameserver pro určitou doménu (zónu) - informace má uloženy obvykle v souboru. Sekundární nameserver pro určitou doménu - data o této zóně si stahuje periodicky z primárního nebo nadřazeného sekundárního name-serveru této zóny. Cache-only nameserver - není primární ani sekundární pro žádnou doménu, slouží pouze k přeposílání dotazů. Interní kořenový nameserver - kořenový nameserver v síti s protokolem TCP/IP, která není připojena do Internetu. Nameserver ví, koho se ptát, když on sám neví (například zná kořenové nameservery). Reverzní mapování (převod IP adres na jména - pseudodoména IN-ADDR.ARPA). Přidělení bloku IP adres k používání s sebou nese povinnost udržovat příslušný primární nameserver pro danou doménu IN-ADDR.ARPA. Rekurzivní chování - DNS server přeposílá dotazy sám. Iterativní chování - DNS server vrací „nevím, ale zeptejte se támhle". Konfigurace BINDu named(8) # Domain Name Server named [-d (debuglevel)} [-p (port){/(localport)}} \ [-c {configfile}} [-u {user}} [-g (group)} [-t {rootdir}} Spouští domain nameserver. Standardní konfigurační soubor je /etc/named.conf. Spouštět jako nesuperazivatelský proces (-u a v chrootovaném prostředí (-1). Program reaguje na následující signály: SIGHUP - způsobí znovunačtení konfigurace SIGINT - uloží aktuální databázi a cache do souboru /var/tmp/named_dump.db. SIGUSR1 - Zvýší {debuglevel) o jedničku. SIGUSR2 - Vypne ladění ({debuglevel} 0). g) PV077 UNIX - programování a správa systému II http: //www. fi .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.fi.muni.cz/~kas/p077/ Soubor named.conf options { directory "/var/named"; forwarders { 147.251.48.3; 147.251.4.33; }; forward only; }; zone }; zone '." { type hint; file "named.root"; 'localhost" { type master; file "master/localhost" ; allow-update { none; }; allow-transfer { any; }; e "fi.muni.cz" { type master; file "master/fi.muni.cz" ; also-notify { 147.251.48.140; }, allow-transfer { any; }; sekundárni DNS pro muni.cz e "muni.cz" { type slave; file "slave/muni.cz"; masters { 147.251.4.33; }; allow-transfer { any; }; }; // z on }; PV077 UNIX - programování a správa systému II http: //www. fi .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.fi.muni.cz/~kas/p077/ }; zone "0 . 0.127.in-addr.arpa" { type master; file "master/127.0. OV-al low-update { none; }; allow-transfer { any; }; "48. 251.147.in-addr.arpa" { type master; file "master/147.251.48"; also-notify { 147.251.48.140; }; Dopředný překlad Příklad souboru f i .muni . cz: $TTL ID @ IN SOA anxur.fi.muni.cz. \ postmaster.fi.muni.cz. ( 2001041701 ; Serial 3H ; Refresh 15M ; Retry 2W ; Expire ID ) ; Minimum TTL IN NS anxur IN NS aisa IN NS ns.ten.cz. IN MX 5 0 relay.muni.cz. IN MX 100 relay IN TXT "Faculty of Informatics" IN TXT "Masaryk University Brno" PV077 UNIX - programování a správa systému II http: //www. f i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.fi.muni.cz/~kas/p077/ ns IN CNAME anxur ftp IN CNAME Odysseus news IN CNAME nimloth.ics.muni.cz. time IN CNAME arkas relay IN A 147.251.48.3 anxur IN A 147.251.48.3 ; IN HINFO "SUN SS10" "Solaris 2" ; IN TXT "Umisteni: M.Brandejs" calypso IN A 147.251.50.61 ; IN HINFO "PC" "Linux" ; IN TXT "Umisteni: Jan Kasprzak" IN MX 5 0 relay.muni.cz. IN MX 100 relay Root cache • Seznam kořenových nameserverů. • Není nutné u forward-only nameserverů. Příklad souboru named.root: ; formerlyNS.INTERNIC.NET 3600000 IN NS A. A.ROOT-SERVERS.NET. 3600000 IN ; formerly NS1.ISI.EDU 3600000 IN NS B. B.ROOT-SERVERS.NET. 3600000 IN ; formerly CPSI.NET 3600000 IN NS C. CROOT-SERVERS.NET. 3600000 IN ; formerly TERP.UMD.EDU 3600000 IN NS D. D.ROOT-SERVERS.NET. 3600000 IN ; formerly NS.NASA.GOV 3600000 IN NS E. E.ROOT-SERVERS.NET. 3600000 IN ROOT-SERVERS.NET. A 198.41.0.4 ROOT-SERVERS.NET. A 128.9.0.107 ROOT-SERVERS.NET. A 192.33.4.12 ROOT-SERVERS.NET. A 128.8.10.90 ROOT-SERVERS.NET. A 192.203.230.10 PV077 UNIX - programování a správa systému II http: //www. fi .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.fi.muni.cz/~kas/p077/ Reverzní mapování Příklad souboru 147.251.48: $TTL ID 48.251.147.in-addr.arpa. IN SOA anxur.fi.muni.cz.\ postmaster.fi.muni.cz. ( 2001041700 ; Serial 3H Refresh 15m Retry 2W Expire ID ) Minimum IN NS anxur.fi.muni.cz. IN NS aisa.fi.muni cz . IN PTR aisa.fi.muni cz . IN PTR anxur.fi.muni.cz. IN PTR relay.fi.muni.cz. IN PTR thetis.fi.muni.cz. Resolver • Mechanismus pro překlad doménových adres a IP adres. • Funkce gethostbyname(3) agethostbyaddr(3) . • Další funkce, související s DNS: res_query (3), res_search(3), res_send(3), res_mkquery(3), res_init(3). • Možnost přepínání mezi různými mechanismy resolvování adres. host.conf (5) ........Konfigurace resolveru na Linuxu order hosts,bind multi on • Nastavuje pořadí resolvovacích mechanismů. • Solaris: Podobný soubor nisswitch.conf (5) . • IRIX: Řádek typu „hostresorer local bind" v souboru resolv.conf(5) . PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ resolv. conf (5) .......Nastavení nameserverů a domény domain fi.muni.cz nebo: search fi.muni.cz ics.muni.cz muni.cz nameserver 147.251.48.140 nameserver 147.251.50.1 nameserver 147.251.4.33 • Lze nastavit jméno domény, vzhledem ke které se provádí DNS dotazy. • search list - nastavení dalších domén pro relativní dotazy. • Seznam nejvýše čtyř nameserverů (má vliv na velikost timeoutu). Další služby sítě • TCP servery - podobný mechanismus činnosti. • Smyčka socket(), bind(), listen(), accept() . • Jednodušší řešení: serviet, který očekává již spojený socket na standardním vstupu/výstupu + program, který bude čekat na více portech a akceptovat spojení. Internet super-server • Program inetd (8) • Výhoda - menší kód TCP a UDP serverů, nižší nároky na systémové prostředky (nemusí být pro každou službu aktivní alespoň jeden proces). • Konfigurační soubor/etc/inetd.conf Alternativy inetd xinetd - větší možnosti konfigurace, omezení přístupu, nastavení priorit, atd. tcpserver - samostatný program na spouštění servietu. Pro každou službu musí běžet jeden. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Příklad inetd.conf TCP wrapper # \ er> nowait root internal wait root internal nowait root internal wait root internal nowait root internal wait root internal nowait root internal wait root internal nowait root \ n.ftpd in.ftpd -la nowait root \ n.telnetd in.telnetd Bezpečnost - omezení použití TCP služeb podle IP adres/domén. Firewall/packetový filtr - nákladné nebo špatně dostupné řešení pro některé systémy, nutnost věřit lokální síti. Aktivní bezpečnost - nejen ověřování příchozích spojení, ale i možnost aktivní obrany. Použití-jako knihovna libwrap.a-hosts_access (3), wrapper pro serviety z inetd (8) - program tcpd (8) . /usr/sbin/tcpd in.telnetd Konfigurace - soubory hosts.allow a hosts.deny, manuálová stránka hosts_access (5) a hosts_options (5) . Dvojitý DNS dotaz. PV077 UNIX - programování a správa systému II http: //www. fi .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.fi.muni.cz/~kas/p077/ Syntaxe hosts.allow, hosts.deny • Řádky • Prázdný řádek a řádek, začínající křížkem se ignoruje. • Zbytek má syntaxi: {daemon-list} : {client-list} [: {shell-command}} {daemon-list} : {client-list} [: {options}} ... o Příklad: in.telnetd : .evil.domain : echo "denied telnet \ from user %c" | mail -s"security attack" root in.ftpd : .evil.domain 10.0. je-li -DPROCESS_OPTIONS: in.telnetd : .evil.domain : spawn \ (/some/where/safe_finger -1 @%h \ | /usr/ucb/mail root) & Protokol ident RFC 931, RFC 1413 Zjištění jména uživatele k existujícímu TCP spojení Pro audit, nikoliv pro autentizaci Na dotaz se nesmí reagovat jinak než odpovědí! Ident-démon - samostatně běžící, nebo z inetd. Šifrování - zamezení úniku informací - neposílá se jméno uživatele, ale zašifrovaná data. Rozšifrovat může pouze administrátor původního serveru. TCP wrapper - podpora ident-dotazů: místo IP adresy se uvede {user)@{adresa}: ALL ALL ALLOALL ALL : rfc931 Apr 29 19:10:44 erinyslO fingerd[18038]: \ refused connect from \ mikulas@artax.karlin.mff.cuni.cz PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Telnet • Emulace terminálové linkové disciplíny. • Server-démon telnetd( 8) - má podobnou funkci jako getty( 8) pro sériové linky. • Pseudoterminal- zařízení podobné rouře, nad kterým je možno použít terminálovou linkovou disciplínu. • Autentizace: jméno/heslo - pozor, jde v síti nezašifrované. Existuje telnet s autentizaci Kerberos. • Telnet klient: Pod UN*Xem běžný program, pod jinými systémy má v sobě obvykle emulátor terminálu. telnet (1)...............Vzdálené přihlášení $ telnet [-d] [-e {znak}} [{host) [{port}}} Program je podobný programu cu (1) pro sériové linky. Naváže spojení na daný počítač protokolem telnet, případně přímo na určitý port. Nezadáme-li počítač, dostaneme prompt telnetu a můžeme zadávat příkazy. - d zapíná ladící výpisy protokolu. - e nastaví escape znak pro přepnutí do příkazového režimu (escape znak pošleme na druhý konec pomocí send escape). Implicitní escape znak je a] . r-služby • rlogin (1), rep (1) arsh(l). • Autentizace - rlogin: jméno a heslo nebo rhosts, ostatní služby jen rhosts. rhosts - důvěřuje druhé straně co se týče jména uživatele, proto musí spojení přicházet z privilegovaného portu. hosts .equiv - které počítače jsou považovány za ekvivalentní z hle- diska oprávněných uživatelů. rlogin (1)...............Vzdálené přihlášení $ rlogin [-8] [-E {znak}} [-1 {username}} {host} - 8 - nastaví 8-bitový přenos. - E - nastaví escape znak (implicitně tilda, na druhý konec se pošle zopakováním znaku). PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Secure Shell • telnet - heslo jde po síti v otevřené podobě; možnost odposlechu hesla. • rlogin - ověřování na základě IP adresy; důvěřuje vzdálenému počítači při zjišťování jména uživatele. • Možnost IP spoofíngu (přesměrování IP adresy a podobně). • Možnost DNS spoofíngu. • Obě služby - možnost man in the middle attack. Principy činnosti SSH • Komunikace mezi nad nedůvěryhodnou sítí. • Ověřování totožnosti klienta, ale i serveru. • Server - program sshd (8). • Klient - program ssh(l). Funkce obdobná jako u rlogin (1) a rsh(l). PV077 UNIX - programování a správa systému II 121 http: //www. £i .muni.cz/~kas/p0 77/ • Různé způsoby, každý z nich lze zapnout nebo vypnout. • . rhosts autentizace - stejná jako u r-služeb. Není bezpečné. Implicitně zakázané. V SSH2 není. • . rhos ts + RSA ověření stroje - podobné jako předchozí, jen jméno vzdáleného stroje se navíc ověří tak, že stroj musí prokázat svoji totožnost svým tajným RSA klíčem (obrana proti chosen-plaintext útoku na RSA). • Ověření heslem-podobné jako u telnet (1). Heslo jde po síti vza-šifrované podobě, neboť celé spojení je v této fázi zašifrované. • RSA autentizace - ověření pravosti uživatele pomocí jeho RSA klíče (možnost spolupráce s čipovou kartou). V SSH2 možno i jiné typy asymetrických klíčů (DSA). • Další možnosti - obecný protokol challenge-response (jen v SSH2). PV077 UNIX - programování a správa systému II 123 http: //www. £i .muni.cz/~kas/p0 77/ • Protokol pro přenos souborů • Možnost přenosu i mezi dvěma vzdálenými počítači • Řídící spojení- 21/tcp, iniciováno klientem. • Datové spojení- zdrojový port (obvykle) 20/tcp, iniciováno serverem. • Pasivní FTP - i datové spojení otevírá klient na server. Někdy lepší průchod přes proxy-servery a firewally • Anonymní FTP - obvykle přihlášení na dohodnutý účet ftp nebo anonymous. Povoluje se pouze čtení určitého podstromu (a FTP-dé-mon pro tento strom zavolá chroot (2)). FTP servery • WU-FTPD - Washington University, nejrozšířenější. Podporuje anonymní i neanonymní FTP, třídy uživatelů, atd. • ProFTPD - virtuální FTP servery, konfigurace podobná HTTP serveru Apache, modularita, IPv6. • Troll Tech FTPD - minimalistický, pouze pro anonymní FTP, vestavěný program ls. • Ostatní - PureFTPd, NcFTPd, vsFTPd, atd. PV077 UNIX - programování a správa systému II 125 http: //www. fi .muni.cz/~kas/p0 77/ SSH verze 1 • Host key - každý SSH server vlastní svůj pár RSA klíčů. Slouží k ověřování pravosti stroje a znemožnení man in the middle útoků. • Server key-sshd (8) má další pár RSA klíčů, který vznikne při startu programu a který se čas od času (např. po hodině) mění. • Server pošle klientovi veřejný klíč stroje a serveru. Dále server posila seznam šifer, které podporuje. • Klient ověří, jestli se nezměnil veřejný klíč stroje. • Klient vygeneruje 256-bitové náhodné číslo, zašifruje je pomocí obou klíčů, vybere šifru a vše pošle je serveru. • Další spojení - zašifrováno konvenčním agloritmem (DES, IDEA, 3DES, ARCFOUR) tímto až 256-bitovým klíčem. SSH verze 2 • Nový protokol - nekompatibilní s verzí 1. • Host key - může být RSA nebo DSA. • Server key - zde není. Dohoda nad klíčem pro symetrickou šifru algoritmem Diffie-Hellmann. • Zabezpečení integrity - HMAC-MD5 nebo HMAC-SHA1. PV077 UNIX - programování a správa systému II 122 http: //www. fi .muni.cz/~kas/p077/ Nevýhody • Snížení propustnosti - šifrování je pomalé (XI1, remote backup). • Nemožnost rozumného použití u X-terminálu nebo NC. • Existence sshd (8) v systému - server nelze spouštět přes inetd (8) z důvodu nutnosti generování RSA páru klíčů při každém startu. PV077 UNIX - programování a správa systému II 124 http: //www. £i .muni.cz/~kas/p077/ • Vzdálené volání procedury • Vykonání procedury asynchronně na vzdáleném stroji. . Sun RPC a TIRPC, OSF DCE. • Jednoznačné číslo procedury/služby verze protokolu. • Formát dat nezávislý na platformě. • Sun XDR - external data representation. Použitelné pro RPC nebo například pro ukládání dat do souboru a výměnu dat mezi platformami. rpc. portmap (8) ...............Port mapper • RPC služeb může být mnoho, proto není jednoznačná korespondence mezi RPC službou a TCP nebo UDP portem. • Porty pro RPC služby alokovány dynamicky, mapování čísla služby a verze na port zajišťuje portmapper. • Forwardování požadavků. • Vzdálená registrace služeb. • Secure portmapper - některé bezpečnostní kontroly, knihovna TCP wrapperu. Autorem je Wietse Venema. PV077 UNIX - programování a správa systému II 126 http: //www. £i .muni.cz/~kas/p077/ Overovaní totožnosti klienta Dalsi vlastnosti File Transfer Protocol Remote Procedure Call • Po ověření přístupových práv - klient zašle příkaz, který se má vykonat a další parametry (alokace pseudoterminálu a podobně). • Zvláštní kanál pro std. výstup a chybový výstup - rsh(l) nemá. • Forwardování portů - zajistí šifrované TCP spojení mezi dvěma porty na dvou strojích (dobré pro použití dalších služeb, u kterých jde heslo po síti v otevřené podobě). • Forwardování XI1 spojení-výměna .Xauthority, další „lokální" X server, forwardování akcí na vzdálený server šifrovaným kanálem. • SSH agent - funguje podobně jako čipová karta. Uživatel nemusí znovu zadávat passphrase svého asymetrického klíče. • Agent forwarding - s sh (1), který je vyvolaný ze vzdáleného spojení, může mít přístup ke klíčům lokálního agenta. rpcinfo(8) ...........Informace od portmapperu $ rpcinfo -p program vers proto port 100000 100000 100005 100005 100005 100005 100003 tep u dp u dp tep u dp tep u dp 111 111 766 768 771 773 2049 rpebind rpebind mountd mountd mountd mountd nf s Network File System Sdílení souborů po síti. RPC služba. Bezestavová služba - výhody i problémy. Není autentizace - sdílený prostor UID/GID nebo rpc.ugidd. Klient # mount -t nfs aisa:/export/home /home Přístup je podobný jako k lokálním diskům. Nemožnost zamykání existencí souboru. Zamykání části souboru - démon rpc. lockd (8) a rpc. statd (8) bez veřejně dostupné specifikace. Asynchronní zápis/čtení - démoni biod (8) nebo nfsiod(8) uvnitř jádra. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Server Démoni rpc.mountd (8), rpc.nfsd(8), případně rpc.ugidd (8) pro mapování UID a GID. Někdy je nfsd(8) uvnitř jádra a běží v nekoklika instancích pro urychlení konkurentního přístupu. nf sd (8) má pevně vyhrazený port 2049, přestože jde o RPC službu. Seznam adresářů, které jsou přístupné zvenku: /etc/exports, viz exports (5) . showmount (8) - výpis informací z mount-démona (export-list, seznam připojených adresářů). Network Information System Dříve YP - Yellow Pages; nyní NIS, NIS + . Sdílení systémových tabulek po síti - napojeno na nsswitch. Server - démon yps erv (8) . Primární NIS/YP server, záložní NIS/YP servery Klient - démon ypbind (8) . Sdílení /etc/passwd - démon yppasswdd (8) pro změnu hesla. Binární podoba tabulek - ypmake (8) . Kerberos Centrální autentizační systém Třístranná autentizace - uživatel, služba/server, KDC. Key Distribution Center - služba, která má databázi všech hesel. Lístky (tickets) - vydává KDC, používají se pro prokazování totožnosti klienta vůči službě. Heslo (tajemství/seereť) - pro uživatele i pro služby. Realm - doména; oblast spravovaná jedním KDC. Principal -jméno uživatele nebo služby (fyzická osoba takto může vystupovat pod více identitami). Literatura Designing an Authentication System (rozhovor ve čtyřech scénách) - http://web.mit.edu/kerberos/www/dialogue.html. Kerberos v5 Installation Guide - kompilace systému, základní administrativní rozhodnutí. Kerberos v5 Administrator's Guide - konfigurační soubory, administrace databáze uživatelů. Kerberos v5 User's Guide - základní informace pro uživatele. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Získání/použití lístku Žádost o lístek-jméno (principal) uživatele, adresa, jméno (principal) služby. Odpověď- lístek, (session key, jméno klienta, jméno serveru) zašifrováno heslem uživatele. Uživatel - zadáním hesla získá session key. Obsah lístku - (session key, jméno a adresa klienta, jméno serveru, čas, doba platnosti) zašifrováno heslem služby. Autentizace - klient vytvoří autentizátor a pošle i s lístkem službě. Autentizátor - (jméno a adresa klienta) zašifrováno session key. Ověření - služba rozšifruje lístek, získá session key, rozšifruje autentizátor a ověří, že si jméno a adresa klienta odpovídá. Další vlastnosti Ticket granting service je také služba. Ticket granting ticket - TGT - lístek pro získávání dalších lístků. Získání TGT-program kini t (1). Dále kl is t (1), kdes troy (1) . Replay cache - proti odposlechnutí. Autentizace služby vůči klientovi. Forwardovatelné lístky - nejsou vázané na adresu. Proxy lístky - delegace části pravomocí na službu. Interakce mezi realmy- například cross-realm trust. Záložní KDC - replikace. Implementace MIT Kerberos V - referenční implementace.a Heimdal - evropská implementace. Klientské aplikace - nutnost kerberizace (mj. rozšíření protokolu). Konfigurace klientů - /etc/krb5 .conf. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ LDAP LDAP - vlastnosti Light-weight Directory Access Protocol Původ - odlehčená varianta DAP pro přístup k X.500 adresářům. Adresář - nejako ve fílesystému. Analogie telefonního seznamu. Adresářová služba - databáze pro rychlé vyhledávání a občasné modifikace dat. LDAP strom Celosvětový distribuovaný adresář - i odkazy mezi LDAP servery. Uzly stromu - objekty Distinguished name - DN - poloha ve stromu (cesta ke kořeni) -např.: uid=kas,ou= People,dc=fi,dc=muni,dc=cz Relative DN - v rámci jedné úrovně (uid=kas). Objekty- patří do tříd (i více), mají různé atributy. Schéma - definice tříd (názvy atributů, typy hodnot, povinné, nepovinné atributy). Definice ve formátu ASN.l. Vyhledávání - v daném podstromu, objekt určitých atributů. Odkazy - referrals - něco jako symbolické linky. Read-mostly databáze - nejsou transakce, rychlé vyhledávání. Autentizace v LDAPu Autentizace proti LDAP serveru - externí (SASL), simple (heslo je součástí objektu). Anonymní přístup. Subjekt práv - obecné distinguished name. Není zvlášť databáze uživatelů. Objekt práv - podstrom, jednotlivá DN, self, jednotlivé atributy. Přístupová práva - authenticate, compare, read, search, write. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Formát LDIF Textový formát pro výměnu dat mezi servery $ ldapsearch -H ldap://ldap.fi.muni.cz/ \ -b ou=People,dc=fi,dc=muni,dc=cz uid=kas -x # kas, People, fi.muni.cz dn: uid=kas,ou=People,dc=fi,dc=muni,dc=cz uid: kas cn: kas obj ectClass: obj ectClass: obj ectClass: userPassword:: e2NyeXB0fXg= loginShell: /bin/bash uidNumber: 11561 gidNumber: 10100 homeDirectory: /home/kas gecos: Jan Kasprzak host: aisa host: anxur account posixAccount shadowAccount Použití v UNIXu Napojení na nsswitch - možnost uložení tabulek uživatelů, skupin, služeb, protokolů ... Modul nss_ldap - konfigurace v /etc/ldap.conf. Mapování podstromu LDAP objektů a jejich atributů na záznamy v tabulce uživatelů. Automatický převod - MigrationTools - www. padl. com. Uživatelé - třídy account, posixAccount a shadowAccount. Zabezpečení - možnost použít LDAP nad SSL (nss_ldap umí kontrolovat i certifikát serveru). Ukládání hesel v LDAPu Několik šifrovacích metod Formát hesla- např.: {SMD5} F92mezjPoWxSE. Hashovací metody - {CRYPT}, {SMD5}, {MD5}, {SSHA}, {SHA}. Generování hashované podoby hesla - s lappas swd (8). Heslo v LDIF formátu - často kódované base64. Oddělovač : : v LDIF. Podobně se kódují binární data. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Implementace LDAPu Řádkoví klienti - ldapsearch (1), ldapadd (1), ldapdelete (1), man ldapmodify (1) . Ostatní klienti - GQ (1), nssjdap, Mozilla. Servery- OpenLDAP, iPlanet/SunONE, Oracle Internet Directory, Active Directory, ... Elektronická pošta Neinteraktivní (off-line) komunikace - zprávy jsou odeslány a uloženy na cílovém počítači kde čekají na přečtení. Textová komunikace - později i možnost začlenění dalších druhů dat (zvuk, grafika, binární soubory, atd). MTA - mail transport agent - program/systém pro přenos zpráv po síti (sendmail, qmail, exim). MUA - mail user agent - uživatelský program pro čtení a posílání zpráv (elm, exmh, mutt). MDA - mail delivery agent - program spouštěný MTA při doručení do lokální schránky (mail (1), procmail (1), deliver (1)). Obálka zprávy Obálka ý hlavičky Doručování zprávy - podle obálky. Obálkový odesílatel - pro chybové zprávy. Obálkový příjemce - skutečný příjemce zprávy. Chybová zpráva - prázdný odesílatel. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Formát zpráv Původní formát - RFC 822, nyní RFC 2822. „Standard for ARPA Internet Text Messages". Hlavička - obsahuje řídící informace zprávy a má pevnou strukturu, řádky tvaru (klíč) : (parametry) řádky tvaru (bílý znak) (parametry) - pokračování parametrů ke klíči z předchozího řádku. prázdný řádek - ukončení hlaviček zprávy. Zbytek je tělo zprávy. řádky by neměly být delší než 80 znaků (nejen z důvodů čitelnosti), a není-li to v hlavičce výslovně uvedeno (Content-Transfer-Encoding: 8bit), nesmí obsahovat znaky jiné než bílé a 32-126. Adresát zprávy To: adresa hlavního příjemce. Cc: - carbon copy - další příjemci. Bcc: - blind carbon copy - totéž, ale tato hlavička se při odesílání ze zprávy odstraní. Identifikace Message-Id: -jednoznačná identifikace zprávy. Používá se napří- klad k detekci zacyklení pošty. In - Reply - To: - „v odpovědi na" - identifikátor předchozí zprávy (na kterou tato zpráva odpovídá). References: - identifikátory předchozích zpráv. From: Sender: Reply-To: Původce zprávy mailbox autora/autorů zprávy. Trasování zprávy skutečný odesílatel zprávy, je-li ve From: více mailboxů. Received: - každý MTA po cestě přidá jeden takovýto řádek se služebna jakou adresu se má poslat odpověď. mml informacemi. Return- Path: - u doručené zprávy cesta k odesílateli. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Ostatní položky Date: - datum vzniku zprávy. Sub j ect: - předmět, věc. Keywords: - klíčová slova. X - (cokoli) - nestandardní hlavičky (X - Face:). Jednoduché typy/podtypy: text / piain, html, richtext, ... image / gif, jpeg, g3fax, ... audio / basic, ... video / mpeg, quicktime, ... application / octet-stream, postscript, pdf, x-nestandardní MIME MIME - Multipurpose Internet Mail Extensions. Rozšíření RFC 822, popsané v RFC 1521, RFC 2045-2049 a RFC 2231. Povinné hlavičky Mime-Version: 1.0 Content-Type: (typ)[(podtyp)[; (parametry) . . .}} Content -Trans f er-Encoding : (přenosové kódování) Typy zpráv - registruje IANA. Složené typy/podtypy multipart/mixed - více objektů různých typů. multipart/párallei - paralelně prezentovatelné části (například text a zvuk), multipart/alternative - MUA má zobrazit jednu z částí (například text/plain a text/html). PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Příklad hlaviček Return-path: fikeraOinformatics.muni.cz Received: from anxur.fi.muni.cz (1187 6@anxur.fi.muni.cz [147.251.48.3] ) by aisa.fi.muni.cz (8.8.5/8.8.5) with ESMTP id PAA08513; Thu, 21 May 1998 15:15:02 +0200 (MET DST) Received: (from fikeraOlocalhost) by anxur.fi.muni.cz (8.8.5/8.8.5) id PAA12399 for unix; Thu, 21 May 1998 15:14:57 +0200 (MET DST) Message-id: <199805211314.PAA12399@anxur.fi.muni.cz> X-mailer: ELM [version 2.4ME+ PL39 (25)] Mime-version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7bit From: Marek Fikera Formát mailboxů Mailbox - místo, do kterého se ukládají zprávy, mbox - standardní formát pod UN*Xem. Zprávy jsou uloženy za sebou v souboru, zpráva začíná řetězcem From(mezera) na začátku řádku. Následuje adresa odesílatele a datum přijetí. Na dalším řádku pak následuje vlastní zpráva. Řádky začínající řetězcem „From " jsou odsazeny jiným znakem. MMDF folder - podobné jako mailbox, ale zprávy jsou odděleny čtyřmi znaky Ctrl -A. MH-folder - adresář; jednotlivé zprávy jsou uloženy v souborech s číselnými názvy. Soubory označené ke smazání mají název začínající čárkou. Maildir - formát Qmailu. Tři adresáře: tmp, new, cur. Odstraňuje problémy se zamykáním a současným přístupem z více strojů. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ SMTP Lokální klienti SMTP - Simple Mail Transfer Protocol - protokol pro přenos pošty nad TCP/IP Definice - RFC 821, nověji RFC 2821. Další rozšíření - ESMTP (8-bitový přenos, ETRN, atd). Inicializace - HELO, případně EHLO jméno. Předání obálky - MAI L FROM: , RCPT TO: . Předání zprávy- DATA; zakončeno tečkou na samostatném řádku. Ukončení relace - QUIT. Vynucený přenos - ETRN. Kontrola odesilatele - VRFY. Expanze aliasů - EXPN. Přímý přístup k mailboxu (zamykání). Set-gid pro skupinu mail. Odesílání- na vstup /usr/sbin/sendmail -t. Síťoví klienti Čtení pošty - POP-3 nebo IMAR Odesílání - SMTP přes relay. POP-3 Post Office Protocol Výlučný přístup k mailboxu Atomická operace během celé session IMAP Internet Mail Access Protocol Sdílený přístup k mailboxu Práce s více schránkami v rámci jednoho účtu Možnost čtení pošty z více počítačů PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ X Window System Názvy - X, X Window System, X Version 11, X Window System Version 11, Xll. Historie - DEC 1983-1986. Hlavní architekt Jim Gettys. X Consortium - řídí další vývoj (nyní The Open Group). XFree86 - původně implementace pro PC, nyní i jiné architektury. Architektura X server - proces nebo zařízení, které zobrazuje okna. XF86_SVGA, XSun. X klient- aplikace, která vyžaduje zobrazování, xterm. Spojení- socket (nezávislé na nižší vrstvě). X protokol - odděluje server a klienta. Extenze protokolu - pro speciální případy. Mit-SHM, XKB, Shape. X Server Poslouchá na socketech, obsluhuje klienty. Implementace - proces, X terminál. Display - X server. Screen - obrazovka. Pojmenování- [stroj] :displej [.obrazovka] Příklad- :0, aisa:12 .0, unix:0.0, alpha: :0. Klient - proměnná DISPLAY, přepínač - display. Informace - xdpyinf o Autentizace klienta. X Klient - obvykle se zobrazuje na jednom displeji. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Okna Hierarchie - strom (kořenové okno, podokna). Oříznutí potomků na velikost rodiče. Visual - způsob zobrazení. Z množiny nabízené X serverem. Další atributy-pozadí, barva popředí, okraj, kurzor, gravitace, maska událostí. Obsah okna - nemusí být uchováván (klient může uchování doporučit). Saveunder - pro pop-up menu. Kurzory Okno - svůj typ kurzoru. Bitmapy - tvar a vzhled. Kurzorový font - předdefinované kurzory. Focus - on-click, on-move. Barvy RGB Pojmenování- showrgb. Konverze mezi barevnými prostory. Barevné palety (colormap) - každé okno může mít svoji, přepne se při fokusu. Fonty Typy - bitmapové, vektorové. Uložení - u X serveru, font server. Adresa font serveru - tcp/aisa:7100. Nastavení - příkaz xset. XLFD - řetězec, popisující font. Příkazy- xl s fonts, fslsfonts, xfontsel. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Obrázky Programování • Pixmap, Bitmap • Datové formáty - XPM, XBM. • Uložení - na X serveru. • Drawable - okno, bitmapa nebo pixmapa. • Obsah - uchováván X serverem. Události • Význam - informace o změně stavu. • Atributy - čas, okno, souřadnice, případně další. • Typy - stisk klávesy, pohyb myši, změna geometrie okna, změna mapování okna, změna viditelnosti, žádost o překreslení a další. Window manager • Správce oken • Dekorace oken - potomků kořenového okna. • Komunikace - seznam vlastností (properties) okna. • Spravovaná okna - přímí potomci kořenového okna. PV077 UNIX - programování a správa systému II 151 http: //www. £i .muni.cz/~kas/p0 77/ Firewally • V širším smyslu - soubor opatření k ochraně sítě proti útokům z prostoru mimo tuto síť. • V užším smyslu - počítač zapojený do dvou či více sítí, který provádí filtrování dat a autentizaci uživatelů nebo strojů. Typické nasazení • Vstup do Internetu - ochrana před útokem z Internetu; kontrola přístupu lokálních uživatelů na Internet. • Ochrana sítě serverů - ochrana před lokálními uživateli i před útokem z Internetu. Typy firewallů • Aplikační brána - na aplikační vrstvě. • Packetový filtr - na síťové vrstvě. • Stavová inspekce (stateful inspection) - kombinace obou přístupů. PV077 UNIX - programování a správa systému II 153 http: //www. £i .muni.cz/~kas/p0 77/ Aplikační brána Aplikační vrstva - autentizuje se každé spojení zvlášť. Proxy + Možnost kontroly na úrovni uživatelů + Není potřeba zasahovat do jádra - Nutnost úpravy aplikací - Nutnost zvláštního programu pro každou aplikaci Packetový filtr Síťová vrstva - posuzuje každý packet zvlášť. - Autentizace podle IP adres - těžko lze dělat podle uživatelů. + Transparentní - není potřeba upravovat aplikace. + Rychlý- vše (většina) se odehrává uvnitř jádra. + Bezstavový - chod aplikací neovlivní reboot firewallů. + Nenáročný - lze vyrobit mini-firewall na jedné disketě. PV077 UNIX - programování a správa systému II 155 http: //www. £i .muni.cz/~kas/p0 77/ • X protokol • Xlib - v podstatě C rozhraní k X protokolu. • Toolkity - knihovny objektů. Xt, Xaw, Motif, Gtk+, Qt, XForms, Tk. • Uživatelská rozhraní - aplikace a knihovny, postavené nad nějakým toolkitem (GNOME, KDE, CDE). • Vizuální prostředky - vTk, Glade. Lokalizace • Fonty - existují; někdy nelze nastavit. • Klávesnice - přes XKB. Ne všechny aplikace podporují. • Texty - věc existence překladu. Spuštění X • Z konzoly- startx, xinit. • Startovací skripty — /.xinitrc. • Přihlášení do grafického prostředí- Display manager (xdm, gdm). • XDMCP - komunikace mezi X serverem a display managerem. • Startovací skripty — /.xsession. PV077 UNIX - programování a správa systému II 152 http: //www. £i .muni.cz/~kas/p077/ Další vlastnosti • Network address translation (NAT) - packetový filtr, rozdělení zátěže, atd. Některé protokoly (FTP) vyžadují aplikační bránu. • IP Masquerading - speciální případ NAT - many-to-one. Kombinace packetového filtru a aplikační brány. • Bridging firewall - SunScreen EFS - pracuje na linkové vrstvě. Proč firewall? • Umožní monitorovat provoz na síti. • Dovolí přesněji specifikovat práva jednotlivých uživatelů. • Jeden bod přístupu do chráněné sítě. • Odstíní známé i neznámé chyby v implementaci síťových služeb na vnitřních počítačích před útoky zvenku • Znemožní zmapování vnitřní sítě. PV077 UNIX - programování a správa systému II 154 http: //www. £i .muni.cz/~kas/p077/ Demilitarizovaná zóna • Samostatná síť • (Částečně) přístupná z Internetu • Částečně přístupná z vnitřní sítě • Servery pro vnější služby Nevýhody firewallů • Přístup na síť není vždy trasparentní • Náklady na hardware • Podcenění útoku zevnitř Obcházení firewallů • Firewall propouští data => často je možno zevnitř vytvořit tunelový spoj ven. • Připojení se přímo do vnitřní sítě - například přes dial-up modem. PV077 UNIX - programování a správa systému II 156 http: //www. £i .muni.cz/~kas/p077/ Jednoportové zapojení www, DNS, SMTP 193.4.5.3 1193.4.5.1 D» o o Firewall 193.4.5.2 Stanice - 10.0.0.x Použití - obvykle v kombinaci s packetovým filtrem na routerech. Aplikační brána Dvouportové zapojení Firewall 10.0.0.1 193.4.5.2 DNS, SMTP 193.4.5.3 Router 1193.4.5.1 Stanice - 10.0.0.x Demilitarizovaná zóna - před firewallem. Jsou zde servery pro služby poskytované směrem do Internetu. Firewall - funguje v kombinaci s packetovým filtrem na routeru. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Tříportové zapojení www, DNS, SMTP 193.4.5.3 Firewall 10.0.0.1 193.4.5.1 Internet 193.4.6.1 Stanice - 10.0.0.x Demilitarizovaná zóna - také chráněna firewallem. Firewall je obvykle typu packetový filtr. Linux - netf i Iter Netfilter - framework pro klasifikaci, filtrování a úpravu packetů. WWW- netfilter. samba.org Modulární architektura Pět míst, kde lze zachytit datagram IP Tables Filtrování/úprava packetů Překlad adres - zdrojové, cílové, případně i porty. Sledování spojení - stav packetu (NEW, ESTABLISHED, RELATED, INVALID). Tabulky- filter, na t, mangle. Předdefinované řetězce - podle přípojných bodů. Uživatelské řetězce pravidel Pravidlo - popis packetu, akce. Packet odpovídá pravidlu => provede se akce. Politika řetězce - implicitní akce. Akce - ACCEPT, DROP, REJECT, RETURN, MASQUERADE, DNAT, SŇAT, LOG, předání řízení jinému řetězci a jiné. PV077 UNIX - programování a správa systému II http: //www. £i .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.£i.muni.cz/~kas/p077/ Cesta packetu jádrem Internet Protocol version 6 Větší adresní prostor Mobilita - práce ve více sítích, přechod mezi sítěmi za běhu aplikací. Zabezpečení - šifrované a podepisované packety - protokol IPSEC. Autokonfigurace - zjištění informací o síti přímo ze sítě. Více adres - každé rozhraní může mít/má více adres. Způsoby přenosu - unicast, multicast, anycast. Jedno rozhraní - více IPv6 adres. Adresace v IPv6 128-bitová adresa Obvyklý zápis - čtveřice šestnástkových čísel. Příklad: 3 f f e: f f f f : 00 00 : f 101: 0210 :a4f f : fee3 : 95 62 Vypuštění úvodních nul - 3ffe:ffff:0:fl01:210:a4ff:fee3:9562 Vypuštění sekvence 0 00 0- 3ffe:ffff::f101:210:a4ff:fee3:9562. CIDR - každá adresa má k sobě masku sítě, špecifikuje se lomítkem a poČtembÍtŮ-3f fe:f ff f : : 12/64. PV077 UNIX - programování a správa systému II http: //www. fi .muni.cz/~kas/p0 77/ PV077 UNIX - programování a správa systému II http://www.fi.muni.cz/~kas/p077/ Formát IPv6 packetů Agregovatelné adresy • Hlavička pevné délky, řetězení hlaviček. • Verze protokolu - 4 bity, hodnota vždy 6. • Priorita - 4 bity. • Identifikace toku - 24 bitů. • Délka packetu - 16 bitů. • Next header - 8 bitů (identifikace další hlavičky). • Hop limit - 8 bitů (ekvivalent TTL u IPv4). • Zdrojová adresa - 128 bitů. • Cílová adresa - 128 bitů. Speciální IPv6 adresy • Loopback - : : 1 (ekvivalent 127 . 0 . 0 .1 v IPv4). • Nespecifikovaná adresa - : : (ekvivalent 0 . 0 . 0 . 0 v IPv4). • Lokální adresa linky- f e80 : : /10 • Site-local address - fecO: :/10 - ekvivalent privátních adres dle RFC1918. • Adresy pro 6bone (testovací síť pro) IPv6 - prefix 3f f e: : /16. • Adresy pro příklady- 3ffe:ff ff : :/32. PV077 UNIX - programování a správa systému II 163 http: //www. fi .muni.cz/~kas/p0 77/ Specifické vlastnosti IPv6 • Fragmentace packetů - není. Vysílající musí dělat path MTU discovery. Později zavedeno jako samostatná next header. • Spolupráce s linkovou vrstvou - NDP (neighbour discovery protocol). Náhrada ARR Zjišťování adresního prefixu sítě, směrovacích informací, atd. • Spolupráce s transportní vrstvou - TCP i UDP je stejné (jen se mění výpočet kontrolního součtu), ICMPvó. DNS • Záznamy typu AAAA pro dopředný překlad. • Reverzní překlad - pseudodoména ip6 . arpa. (dříve ip6 . int.), běžné záznamy typu PTR. • Experimentální záznamy typu A6 a DNAME pro zřetězení prefixů, doporučeno nepoužívat. • Minimalizace velikosti globálních směrovacích tabulek • Unicast adresy - z prefixu 2 00 0: : / 3. • Top-level aggregator (TLA) - 16 bitů. • Rezerva - 8 bitů. • Next-level aggregator (NLA) - 24 bitů. • Site-level aggregator (SLA) - 16 bitů. • Lokální síť - vždy 64-bitový prefix a 64-bitová lokální adresa. EUI-64 formát adresy • EUI-64 formát adresy- lokální část se odvozuje z fyzické adresy. • EUI-64 pro ethernet - MAC adresa, uprostřed vloženo f f f e, 7. nejvyšší bit nastaven na 1 pro unicast. • Příklad - MAC adresa 00:D0:B7:6B:4A:B2, prefix sítě fe80: :/10, pak IPv6 addresa je fe80::2d0:b7ff:fe6b:4ab2. • Usnadňuje autokonfiguraci PV077 UNIX - programování a správa systému II 164 http: //www. £i .muni.cz/~kas/p077/ Další odkazy • Psaní aplikací nezávislých na protokolu - používat getaddrinfo(3). • 6bone - IPv6 backbone - http://www.6bone.net/. • Linux and IPv6 howto - http://www.bieringer.deAinux/IPv6/ APv6-HOWTOAPv6-HOWTO.html • USAGI Project - http://www.linux-ipv6.org - UniverSAl playGround for Ipv6. • KÄME Project- http://www.kame.net/. PV077 UNIX - programování a správa systému II 165 http://www.fi.muni.cz/~kas/p077/ PV077 UNIX - programování a správa systému II 166 http://www.fi.muni.cz/~kas/p077/