Administrace Unixu a sítí Tomáš Kouba <
[email protected]>, <
[email protected]> ●
Regulární výrazy I. ●
● ●
●
●
Formální jazyk k popisu textu (jeho částí) –
Rozpoznatelný konečným automatem
–
V praxi se používají silnější než regulární
Jsou součástí jazyků Perl, TCL Jako knihovna dostupné v mnoha dalších (python, java, PHP) Mnoho unixových utilit s nimi umí pracovat (grep, ed, sed, awk) Popis regexpů: man 1 ed
Regulární výrazy II. ●
Speciální znaky: –
. - jakýkoliv znak krom
–
\ ruší význam metaznaku
–
[list], [^list] – jakýkoliv znak z výčtu/doplňku ●
●
[a-zA-Z0-9_], [\]^-], [\]\^\-\\]
–
^, $ - začátek a konec řádky
–
\<, \>, \b - začátek a konec slova
Třídy znaků: [:alpha:], [:upper:], [:blank:], [:alnum:]
Regulární výrazy III. ●
expression* - libovolné opakování znaku daného výrazem –
A*, [0-9][0-9]* ●
●
●
+ pro alespoň jedno opakování
expression\{n\}, exp\{m,n\} … opakování nkrát, m-n-krát \(, \), \n … uzávorkování části vzoru pro znovupoužití –
\(ab\)*
–
A\(.\)\1A
Regulární výrazy IV. ●
sed ’s/:.*//;s/^/Uzivatel: /’ /etc/passwd –
●
ls *.c | sed ’s/\(.*\).c/cp \1.c \1.bak/’ –
●
“Uzivatel: login” pro všechny záznamy v /etc/passwd cp foo.c foo.bak
ls *.c | sed ’s/\(.*\).c/cp -p \1.c \1.bak/’
Regulární výrazy - cvičení ●
●
●
●
Najděte v zadaném souboru řádky končící dekadickým číslem Najděte řádky souboru /etc/passwd, které obsahují informace o uživatelích s domovskými adresáři v adresáři /home Vypište z /etc/passwd plná jména uživatelů (pomocí sed) Ze souboru index.html (získaný např. wget www.seznam.cz) vypište všechny http odkazy
Základy systémové administrace ●
●
Základní úkoly: –
instalace (OS, SW balíky)
–
konfigurace (systémy souborů, uživatelé, služby, ...)
–
zálohování systému
–
sledování systému (syslog, cron,...)
Na různých UNIXech stejné úkoly, často se liší prostředky a cesty (/var/adm vs. /var/log)
Start systému I. ●
Bootloader (na linuxu typicky grub nebo lilo) předá řízení a paramtery kernelu –
inicializace perfierií, připojení kořenového fs
–
spuštění programu init, který řídí zbytek startu/běhu systému
–
/etc/rc* - startovací/ukončovací skripty (SysV startup scripts)
–
/sbin/init spouští skripty dle /etc/inittab
–
Nově alternativy řízené událostmi (upstart)
Start systému II. ●
/etc/init.d obsahuje startovací/ukončovací skripty –
Linky pro runlevel X v /etc/rcX.d ●
●
Začínající na S nebo K, čísla určují pořadí
Runlevel – mód ve kterém systém běží. Typicky 0-6 + S
●
who -r / runlevel - zjistí aktuální runlevel
●
init přepne runlevel
Runlevel - přehled ●
●
Standard: –
0 – přechod do tohoto runlevelu shutdownuje systém
–
S – singleuser (žádná síť, démoni. Často ekvivalentní init=/bin/sh)
–
6 – přechod do tohoto runlevelu rebootuje systém
Typické linuxové distribuce navíc: –
1 – singleuser bez sítě, démonů (nestandardní)
–
2 – multiuser – většinou podobné jako 1, navíc dovoluje non-root login
–
3 – multiuser + síť – běžný mód
–
4 – nepoužívaný
–
5 – X11 – runlevel 3 + X window system
Startování služeb ●
Standardizovány pouze symlinky, jejich vytváření je “system-specific”
●
většinou shell scripty s podporou v init skriptech
●
Redhat - chkconfig
●
Suse - yast
●
Debian - update-rc.d
●
Solaris - svcs, inetadm
Ještě k procesům ● ●
● ●
●
●
Init - první proces, rodič všech ostatních V unixu má každý proces rodiče => stromová struktura procesů (pstree, ps wwwfaux) Nejvyšší ve stromě procesů je init Každý proces vrací návratový kód a někdo jej musí vyzvednout (většinou rodič voláním wait()) Co když to rodič neudělá? (nechce se mu, neexistuje) Stavy procesů (man ps – process state codes)
Rozdělení disku ●
Utility fdisk, cfdisk, parted, qtparted, diskdruid
Qtparted
Diskdruid
Odbočka - loop device ●
Linux má speciální zařízení /dev/loop#
●
Umožňuje ze souborů vytvářet “disky”
● ●
●
–
soubory se pro systém tváří jako bloková zařízení
–
lze na nich vytvářet filesystémy
–
provádět ioctl() volání atd.
Vhodné pro testování, vytváření “images” atd. losetup [{-e|-E} encryption] [-o offset] [-p pfd] [-r] {-f|loop_device} file Podobné programu daemon-tools na Win
RAID ●
RAID - Redundant array of inexpensive disks
●
JBOD – just a bunch of disks
●
Mirroring – Stejná data na více discích
●
Striping – rozdělení dat na různé disky
●
RAID0 – RAID6, RAID 0+1, RAID 1+0, RAID 5+0, RAID 0+5
JBOD ●
●
Lze kombinovat různé velikosti (narozdíl od RAID0) Existují prostředky jak z více disků udělat jeden (na linuxu LVM) –
pvcreate, vgcreate, lvcreate, pvs, vgs, lvs
RAID 0 ●
●
●
●
Není redundantní (spíš naopak) V SW variantě se spíše nepoužívá (máme LVM) Vyšší výkon, sjednocení disků mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/sdb6 / dev/sdc5
HW RAID
RAID 1
RAID 1 ●
Zrcadlení
●
Data jsou zapisována na oba disky
●
Čtení jde z obou disků (zlepšení výkonu)
●
Některá nastavení umožňují “spare” disk
●
mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 /dev/sdc1 --spare-devices=1 /dev/sdd1
RAID 2 ● ●
●
●
Nepoužívá se Rozseká data na bity, ty zapisuje zvlášť na disky Na další disky pak zapíše samoopravný kód (Hammingův kód) Příliš drahé na realizaci
RAID 3 ●
●
●
Vyhrazený disk na paritu Parita se počítá po bytech A1-A6 je jeden blok dat
RAID 4 ● ●
●
Podobný jako RAID3 Parita se počítá na úrovni bloků Úzkým místem je zápis na paritní disk
Srovnání RAID3 a RAID4
RAID5 ●
●
Jako RAID4 Paritní disk není dedikovaný, jeho úlohu mají všechny disky
●
Zlepšuje výkon
●
Minimum jsou 3 disky
●
●
Kapacita: celkem*(pocet1)/pocet mdadm --create --verbose /dev/md0 \ --level=5 --raid-devices=3 \ /dev/sdb1 /dev/sdc1 /dev/sdd1 \ --spare-devices=1 /dev/sde1
Nested RAID
Různá vylepšení ●
RAIDE –
spare bloky distribuované mezi disky
●
VRAID
●
RAID-Z
Problémy ●
●
Typicky: –
kernel: sidisk I/O error: dev 08:01, sector 1590410
–
kernel: SCSI disk error : host 0 channel 0 id 0 lun 0 return code = 28000002
Nebo: –
kernel: hde: read_intr: error=0x10 { SectorIdNotFound }, CHS=31563/14/35, sector=0
–
kernel: hde: read_intr: status=0x59 { DriveReady SeekComplete DataRequest Error }
Problémy ●
V /proc/mdstat potom: –
– –
●
Personalities : [linear] [raid0] [raid1] [translucent] read_ahead not set md7 : active raid1 sdc9[0] sdd5[8] 32000 blocks [2/1] [U_]
Výpadek lze nasimulovat: –
mdadm --manage --set-faulty /dev/md1 /dev/loop2
–
mdadm --manage /dev/md1 --remove /dev/loop2
–
mdadm --manage /dev/md1 --add /dev/loop2
ZFS ●
moderní “filesystém”, který řeší všechny problémy admina
●
abstrahuje od partitions
●
zabudovaný raid (tzv. RAIDZ)
●
quoty
●
snapshoty (ty umí i LVM)
●
rychlý (většina operací probíhá za běhu)
●
pro Linux problematická licence
●
podobné věci umí BTRFS
Typy síťových propojení
Typy síťových rozhraní ●
Loopback - „tento počítač“, žádné fyzické zařízení
●
TUN – virtuální rozhraní (VPN, virtuální stroje)
●
PPP - sériové propojení point-to-point
●
●
●
●
Ethernet- společná sběrnice: současný přístup, řešení kolizí (CSMA/CD) Token ring - předávání volného-obsazeného tokenu po kruhu FDDI - jednoduchý nebo dvojitý kruh (překlene přerušení vlákna) ATM - systém přepínačů a virtuálních cest pro tok dat, hlasu,...
Základní příkazy ●
ifconfig –
●
route –
●
správa firewallových pravidel (linux specific)
netstat –
●
správa routovacích tabulek jádra
iptables –
●
práce se síťovými rozhraními
výpis stavu sítě a statistik
ip –
moderní náhrada předchozích
OSI model Číslo
Název
7
aplikační
6 5 4
Účel application specific protocol
prezentační datové konverze (little/big endian) relační
navázání relace
transportní korektnost (kontrolní součty apd.)
3
síťová
dosažení cíle, routing
2
linková
přenos dat (frames, MAC adresy)
1
fyzická
interpretace elektrického signálu
TCP/IP model
RFC dokumenty ●
Request for comment
●
Dokument popisující prostředí internetu –
● ●
●
Příklady: 793 TCP, 822 email formát, 1149 přenos IP packetů poštovními holuby Jednotná terminologie –
●
terminologie, protokoly, formáty
“MUST”, “MUST NOT”, “REQUIRED”
Ne každé RFC je standard!
Spojované vs. nespojované služby ●
Spojované (a-la telefon) –
Zaručeno doručení, navíc ve správném pořadí
–
Aplikace se nemusí starat o síťování ●
–
TCP, sofistikovaný netriviální protokol ●
●
Na druhou stranu nemá takovou kontrolu nad spojením Spolehlivost zaručena pomocí potvrzování (TCP okna)
Nespojované (a-la pošta) –
Není zaručeno ani pořadí, ani doručení
–
Všechny potřebné kontroly v režii aplikace
–
UDP, jednodušší než TCP
Monitoring sítě ●
tcpdump –
●
nmap –
●
jednoduchý tcp/udp klient-server
ethereal, wireshark –
●
port scanner
netcat/nc –
●
vypisuje provoz na síti
analyzátor packetů
iftop –
monitoring zatížení sítě
Zahájení spojení ●
●
●
●
Navázání TCP spojení (SYN, SYN+ACK, sekvenční čísla) IP 147.231.25.244.38199 > 147.231.25.248.websm: S 1788881918:1788881918(0) win 5840 <mss 1460,sackOK,timestamp 1546559963 0,nop,wscale 7> IP 147.231.25.248.websm > 147.231.25.244.38199: S 1877526254:1877526254(0) ack 1788881919 win 5792 <mss 1460,sackOK,timestamp 3062710 1546559963,nop,wscale 7> IP 147.231.25.244.38199 > 147.231.25.248.websm: . ack 1 win 46 <nop,nop,timestamp 1546559964 3062710>
Ukončení spojení ● ●
●
Uzavření spojení (FIN) IP 147.231.25.248.websm > 147.231.25.244.38195: F 1:1(0) ack 2 win 46 <nop,nop,timestamp 3054293 1546526291> IP 147.231.25.244.38195 > 147.231.25.248.websm: . ack 2 win 46 <nop,nop,timestamp 1546526292 3054293>
Adresace ●
Linková vrstva –
●
●
dána výrobcem
●
není uspořádání
Síťová vrstva –
●
MAC adresa (de:ad:be:ef:6:1f)
IP adresa (např.: 127.0.31.12) ●
uspořádání
●
Jednoznačná identifikace v rámci sítě
Aplikační vrstva –
Doména (např.: vsfs.cz) ●
přidělována podle organizační struktury
●
snazší zapamatování (DNS překlad)
Konverze adres
Kontrola konverze ●
Resolver –
ping ●
–
host ●
–
IP<->name, nepoužívá libc
nslookup, dig ●
●
používá pro resolving
pokročilé dotazy na DNS
ARP tabulka: –
arp
Subnetting - “sítě”, “podsítě” I. ●
● ●
Původní myšlenka: velikost sítě určuje kolik bytů v IP adrese je adresa sítě: –
A – 1 byte, např. 10.0.0.0
–
B – 2 byty, např. 192.168.0.0
–
C – 3 byty, např. 147.231.25.0
Sítě se tedy dělí do tříd => plýtvání Subnetting dovoluje rozšířit síťovou část adresy pomocí specifikace tzv síťové masky (netmask)
Subnetting - “sítě”, “podsítě” II.
● ●
●
255.255.255.192 V definici je přípustná nespojitá maska, ale většinou se neimplementuje. V současnosti se často ignorují třídy (classless) a místo masky se uvádí jen počet bitů (např. 127.0.5.0/26).
Speciální adresy I. ●
RFC 1918
●
Loopback
●
–
127.0.0.1
–
adresa loopback rozhraní
Privátní adresy –
10.0.0.0, 172.16-31.0.0, 192.168.*.0
–
nepřidělované, k použití pro lokální sítě
–
nesmí opustit síť
Speciální adresy II. ●
Network broadcast –
.<samé jedničky> ● ●
●
adresa sítě: nejnižší IP adresa v síti network broadcast: nejvyšší IP adresa v síti
–
„všem v dané síti“
–
normálně se doručí do cílové sítě
Limited broadcast –
255.255.255.255
–
nesmí opustit síť
Cvičení ●
●
Jaký rozsah IP adres je možný v síti 192.168.1.192/26 (192 je v binárním zápisu 11000000) Napište masku sítě 192.168.1.128, víte-li že má broadcast na adrese 192.168.1.143 (128 je v binárním zápisu 10000000, 143 je v binárním zápisu 10001111)
Tok dat v TCP/IP
●
scatter-gather ovladače
Socket, port ●
Port –
16bitové číslo identifikující jednu stranu spojení - aplikaci, proces ●
●
●
destination-port musí být znám, typicky je to některý z tzv. wellknown services (viz /etc/services) source-port navazovatele (>1024) spojení přiděluje lokální systém (pro <1024 je potřeba oprávnení roota)
Socket –
jeden konec komunikačního kanálu mezi klientem a servrem
–
označení (adresa) jednoho konce kanálu ●
Výpis otevřených socketů: netstat [an]
Struktura ethernetového rámce
Historie TCP/IP ●
úzce provázán s Internetem (ARPAnetem)
●
potřeba otestovat packetové technologie
●
financováno DoD (americké ministerstvo obrany)
●
po otestování síť předána akademické sféře
●
další specifikace vznikají až na univerzitách –
jsou volné (daňoví poplatníci už je zaplatili)
Historie TCP/IP ● ●
●
●
●
1973 – poprvé prezentováno veřejnosti 1974 – publikováno v IEEE Transaction on Computers 1979 – ustaveno ICCB (Internet control and configuration board) 1979 – univerzity získávají BSD Unix s první implementací TCP/IP (platí DoD) 1980 – ARPA prechází z NCB na TCP/IP
Historie TCP/IP ●
1983 – NCB vypnuto
●
1983-1986 – nástup TCP/IP
●
1992 – implementace ve Windows (winsock)
●
1993 – implementace v Linuxu (hlavně Alan Cox)
Požadované vlastnosti TCP/IP ●
žádné centrum, které by nepřítel zničil jako první (v dnešní době jsou úzká místa) –
●
decentralizovaný charakter obsažený už ve slově “Internet”
robustnost –
ustát i velký výpadek
–
podpora záložních tras
–
nespojované a nespolehlivé procesy (na úrovni IP splněno)
Nepožadované vlastnosti TCP/IP ●
bezpečnost –
●
mobilita –
●
autentizace i autorizace (obou stran) je ponechána na aplikaci uzel je v rámci sítě jasně určen místem zapojení do sítě
QOS –
prioritizace, vyhrazení spojení
Síťová vrstva (IP) ●
úkolem je pokusit se doručit data od odesílatele k adresátovi v rámci celé sítě –
●
●
narozdíl od linkové, která doručuje jen sousedům v rámci lokální sítě
je potřeba packety –
směrovat – tedy najít nejlepší další síťový prvek, přes který má packet jít
–
předávat (forwarding) – předávat packet ze sítě do sítě
vrstva může také předcházet zahlcení a zajištovat QoS
IP datagramy ●
IP nevytváří virtuální okruhy –
●
virtuální okruh je na začátku spojení vytvořená a vyhrazená cesta, kterou jdou všechny packety
během spojení se trasa může měnit –
směrování je třeba dělat pro každý packet na každém směrovači ● ●
velmi robustní plýtvání zdroji
Routing v linuxu ●
●
Zařízení rozhodující v síti o tom kam půjde linkový rámec: přepínač (switch) Zařízení rozhodující v síti o tom kam půjde síťový packet: směrovač (router) –
větší inteligence, tabulky, filtrace
–
v linuxu realizován jádrem a routovacími tabulkami
Routing v linuxu ●
příkazy route, ip route
●
$ route n
●
Kernel IP routing table
●
Destination Gateway Genmask Flags Metric Ref Use Iface
●
10.88.99.1 10.88.99.9 255.255.255.255 UGH 0 0 0 tun0
●
10.88.99.9 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
●
147.231.25.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
●
192.168.0.0 10.88.99.9 255.255.0.0 UG 0 0 0 tun0
●
0.0.0.0 147.231.25.253 0.0.0.0 UG 0 0 0 eth1
●
Nutno povolit v sysctl.conf –
net.ipv4.ip_forward = 1
Struktura IP datagramu
Struktura IP datagramu ●
velikost mezi 576B a 65536B
●
verze – 4 nebo 6 (budeme mluvit jen o 4)
●
délka hlavičky – v 32bitových slovech – typicky 5
●
typ služby – většinou ignorováno, někdy se používá pro QoS
●
celková délka – celková délka včetně hlavičky v bytech
●
pořadové číslo – používá se k sestavení fragmentu (různé fragmenty z jednoho packetu mají stejné toto číslo)
●
příznaky – nefragmentuj, poslední část fragmentovaného packetu
●
fragment offset
●
ttl – počet již prošlých routerů (kvůli zacyklení)
●
protocol – 1 ICMP, 6 TCP, 17 UDP (/etc/protocols)
Struktura IP datagramu ●
kontrolní součet hlavičky – kvůli TTL je potřeba naustále přepočítávat
●
zdrojová/cílova IP adresa
●
další volby – volitelné rozšíření (směrování podle zdroje apd.), často směrovače nepodporují
●
zarovnání – vycpávka do násobku 4 bytů
●
data
Fragmentace ●
●
Kvůli různým velikostem rámců pod síťovou vrstvou Jediná informace, kterou linková vrstva předává nahoru v IP modelu
●
Náročné na inteligenci směrovačů
●
Lze fragmentova fragmenty
●
Minimální velikosti fragmentu: 576B (512B dat)
Struktura TCP paketu
Struktura TCP paketu ●
source port, destination port
●
seq no. - pozice bytu v proudu bytů
●
ack no. - číslo posledního přijatého bytu v proudu (viz minule výstup tcpdumpu)
●
data offset – velikost hlavičky v 32bit slovech
●
příznaky – SYN, ACK, FIN, URG
●
window – počet bytů, které příjemce je schopen přijmout navíc (užitečné pro “Flow control”)
Struktura TCP paketu ●
urgent – offset do dat, určuje konec přednostních dat (např. CTRL-C v ssh spojení)
Spojování segmentů sítě
NAT ● ●
●
RFC 1631 privátní adresy jsou automaticky měneny bránou (směrovačem) Varianty –
1:1, 1:N
NAT 1:1 ●
●
statický –
mapování veřejné-soukromé adresy je pevné
–
umožnuje spojení dovnitř privátní sítě
–
nešetří IP adresy
dynamický –
mapování se mění podle potřeby
–
neumožňuje jednoduše spojení dovnitř (lze např. přes dynamické DNS)
–
šetříIP adresy pokud # privátních. > # veřejných
NAT 1:N ● ●
●
● ●
●
veřejnou IP adresu má pouze brána (router) průchozím packetům je zdrojová adresa změněna na adresu venkovního rozhraní brány spojení je identifikováno zdrojovým portem na bráně někdy nazýváno “maškaráda” nelze uskutečnit spojení dovnitř (nutno obcházet např. skype, hamachi) někdy NAT musí rozumět protokolu (FTP)
Principy firewallu
Firewall a NAT v Linuxu - iptables ●
●
iptables - administration tool for IPv4 packet filtering and NAT Usage: –
iptables [t table] [AD] chain rule [options]
–
iptables [t table] I chain [rulenum] rule [options]
–
iptables [t table] P chain target [options]
–
iptables –list [v]
–
iptables F [chain]
Firewall a NAT v Linuxu - iptables ●
Příklady –
iptables P INPUT DROP
–
iptables A INPUT p tcp dport ssh j ACCEPT
–
iptables A OUTPUT d uglysite.cz j DROP
–
iptables t nat A POSTROUTING o ppp0 j SNAT to 1.2.3.4
–
iptables t nat A PREROUTING p tcp dport 80 j REDIRECT to localhost:3128
–
iptables t nat A POSTROUTING s 10.8.0.0/255.255.255.0 j MASQUERADE
Stavový firewall ●
Problém: při limitování příchozího trafficu nezahazovat příchozí packety od spojení která byla iniciována z naší strany –
dříve – povolení všech příchozích packetů na porty > 1024 ●
–
velmi špatné
Nyní – stavové firewally ●
Sledují veškerou komunikaci, umí přiřadit přichozí packet k otevřenému spojení
Stavový firewall ●
●
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT Problém – protokoly obsahující údaje o adresách a portech v datech (ftp, H.323) –
Specializované moduly které “zkoumají vnitřnosti” procházejících packetů ●
modprobe ip_conntrack_ftp, ...