Środowisko pracy i polecenia Linuxa - Ćwiczenia 1 

Część 1: Przygotowanie środowiska do pracy:

Podczas kursu sieci komputerowych będziemy korzystali z systemu Linux.
Większość wykorzystywanych narzędzi jest dostępna na dowolnej dystrybucji linuksa, lecz dla zachowania kompatybilności zalecamy używanie dystrybucji
Knoppix jest dystrybucją typu "live" uruchamiającą się bez potrzeby instalacji na dysku twardym.

Pobranie dystrybucji Knoppix

Strona domowa dystrybucji Knoppix http://www.knopper.net/knoppix/index-en.html
Strona z listą serwerów do pobrania dystrybucji:http://www.knopper.net/knoppix-mirrors/index-en.html
Strona trackera sieci P2P BitTorrent:http://torrent.unix-ag.uni-kl.de/

Pobrany obraz płyty należy wypalić na nośnik cd/dvd oraz umieścić ją w stacji dysków.


Uruchomienie dystrybucji Knoppix

Należy upewnić się, czy w BIOS'ie jest aktywna funkcja ładowania systemu z cd-rom'u, następnie zrestartować komputer.
Knoppix powinien uruchomić się w trybie graficznym z obsługą sieci (DHCP).
Po uruchomieniu systemu wszystkie dyski (partycje) odnalezione na komputerze będą wyświetlone na pulpicie.
System jest gotowy do pracy.

Przypomnienie podstawowych poleceń Linuxa

ls - lista plików w katalogu bieżącym.

Przydatne parametry:

-a - wyświetla wszystkie pliki, nawet te, których nazwy zaczynają się od "." (ukryte)

-l - wyświetla dodatkowe informacje

cd - zmiana katalogu

. - oznacza katalog bieżący

.. - oznacza katalog nadrzędny

cd nazwa katalogu

rm - usunięcie pliku

-f - nie pytaj użytkownika o potwierdzenie wykonania operacji

-r - usuwaj pliku rekursywnie (przydatne w przypadku kasowania katalogów)

rm nazwa_pliku

rm -rf nazwa_katalogu

cp - kopiowanie plików/katalogów

-r - kopiowanie rekursywne

cp nazwa_pliku1 nazwa_pliku2 nazwa_pliku3 nazwa_katalogu

cp -r nazwa_katalogu nazwa_katalogu

mv - zmiana nazwy / przeniesienie pliku

mv stara_nazwa nowa_nazwa


Poleceniem touch możemy zmieniać znaczniki czasowe na plikach (w przypadku gdy plik nie istnieje, to zostaje utworzony).
Polecenie man służy do przeglądania podręcznika systemowego (np. aby obejrzeć stronę opisującą polecenie ls, należy wykonać polecenie man ls).

Dołączanie systemu plików.

mount - zarządzanie systmem plików

Przydatne parametry:

-t typ_systemu_plików - określa typ podłączanego systemu plików

[root@localhost root]# mount
/dev/hda2 on / type ext3 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
none on /dev/shm type tmpfs (rw)
/dev/hda3 on /home type ext3 (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

Podłączamy system plików /dev/fd0 pod katalog /mnt/floppy.

[root@localhost root]# mount /dev/fd0 /mnt/floppy/
[root@localhost root]# mount
(...)
/dev/fd0 on /mnt/floppy type ext2 (rw)

W dystrybucji Knoppix możemy użyć do tego celu GUI klikając odpowiednie ikony na pulpicie.


Część 2: Pliki i polecenia związane z usługami sieciowymi w Linuksie (Unixie):


lspci - wypisuje urządzenia pci w komputerze (nas interesuje tylko adapter sieciowy)

Zuerst:~ # lspci | grep Ethernet
02:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)




ifconfig - wypisuje informację o interfejsach sieciowych, konfiguruje interfejsy sieciowe

Zuerst:~ #  ifconfig
eth0      Link encap:Ethernet  HWaddr 00:50:BA:B8:A6:20
          inet addr:192.168.1.44  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8644256 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10736361 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1624176413 (1548.9 Mb)  TX bytes:3532556602 (3368.9 Mb)
          Interrupt:193 Base address:0x8c00

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:31173 errors:0 dropped:0 overruns:0 frame:0
          TX packets:31173 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1576287 (1.5 Mb)  TX bytes:1576287 (1.5 Mb)

inne statystyki interfejsów są w pliku: /proc/net/dev

Zuerst:~ # cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes      packets errs drop fifo colls carrier compressed
    lo: 1576287   31173    0    0    0     0          0         0 1576287    31173    0    0    0     0       0          0
  eth0:1624205710 8644329  0    0    0     0          0         0 3532629276 10736457 0    0    0     0       0          0

Interfejs lo jest interfejsem wirtualnym. Na tym interfejsie możemy testować aplikacje sieciowe, nawet, gdy nie posiadamy aktualnie połączenia z żadną siecią. Ruch sieciowy skierowany na ten interfejs nie opuszcza komputera (nie da się go podsłuchać).





Adresy zrozumiałe dla komputerów nie są proste do zapamiętania przez ludzi. Dlatego powstał system nazewnictwa (DNS) który jest powszechnie używany w Internecie. System ten "tłumaczy" nazwy domenowe (np www.pjwstk.edu.pl) na adresy IP rozumiane przez komputer (np 148.81.141.16). Po wpisaniu przez użytkownika nazwy domenowej system operacyjny sprawdza pliki konfiguracyjne w celu przetłumaczenia nazwy na "zrozumiały" dla siebie adres.
Plik /etc/hosts - zawiera listę gotowych mapowań "nazwa domeny"->"adres ip"

Zuerst:~ # cat /etc/hosts
127.0.0.1       localhost
192.168.1.44    Zuerst
# special IPv6 addresses
::1             localhost ipv6-localhost ipv6-loopback
fe00::0         ipv6-localnet
ff00::0         ipv6-mcastprefix
ff02::1         ipv6-allnodes
ff02::2         ipv6-allrouters
ff02::3         ipv6-allhosts

Plik posiada 2 kolumny. W pierwszej podany jest adres IP, w drugiej przypisane mu nazwy (może być ich więcej niż 1) Jeżeli dana nazwa nie znajduje się w pliku hosts, system przeszukuje zasoby sieciowe.
Plik /etc/resolv.conf - zawiera listę serwerów nazw. Serwery służą do tłumaczenia nazw domen na adresy IP

Zuerst:~ # cat /etc/resolv.conf
nameserver 213.241.79.37
nameserver 192.168.1.1

W powyższym przykładzie mamy ustawione dwa komputery. System operacyjny wysyła pakiet zapytania o domenę do pierwszego z nich, i w przypadku braku odpowiedzi odpytuje drugi serwer. Jeżeli żaden z serwerów nie odpowie, system uznaje że nazwa nie istnieje (zwróci błąd).





Po uzyskaniu adresu IP system operacyjny sprawdza przez którą kartę sieciową wysłać dany pakiet (wiele urządzeń służących do kierowania ruchem w Internecie posiada więcej niż 2 interfejsy sieciowe). Polecenie route - wypisuje tablicę routingu, pozwala dodawać i usuwać wpisy do tablicy routingu.
plik: /proc/net/route

Zuerst:~ # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
link-local      *               255.255.0.0     U     0      0        0 eth0
loopback        *               255.0.0.0       U     0      0        0 lo
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

Zuerst:~ # cat /proc/net/route
Iface   Destination     Gateway         Flags   RefCnt  Use     Metric  Mask            MTU     Window  IRTT
eth0    0001A8C0        00000000        0001    0       0       0       00FFFFFF        0       0       0
eth0    0000FEA9        00000000        0001    0       0       0       0000FFFF        0       0       0
lo      0000007F        00000000        0001    0       0       0       000000FF        0       0       0
eth0    00000000        0101A8C0        0003    0       0       0       00000000        0       0       0

W każdym wpisie do tablicy routingu znajduje się jedna reguła sterowania ruchem pakietów. Dopasowanie adresów jest wykonywane na podstawie porównania adresu docelowego (kolumna Destination) i maski sieciowej (kolumna Genmask). Na tej podstawie wybierany jest właściwy interfejs (kolumna Iface) oraz następny przeskok przed osiągnięciem celu (kolumna Gateway). W przypadku, gdy sieć jest bezpośrednio połączona z komputerem następny przeskok jest hostem docelowym (adresatem) i można wysłać mu pakiet bezpośrednio (wyświetlany jest znak gwiazdki '*' w kolumnie Gateway). W przypadku, gdy adres odbiorcy nie ma odpowiedniego wpisu w tablicy routingu wybierana jest trasa domyślna (default).





Jeżeli adres odbiorcy znajduje się w sieci lokalnej, system operacyjny używa protokołu arp do pozyskania adresu sprzętowego interfejsu sieciowego komputera odbiorcy. W tym celu wysyłany jest do wszystkich komputerów w sieci lokalnej pakiet arp z pytaniem. Komputer posiadający interfejs o tym adresie odpowiada swoim adresem karty sieciowej (tzw. MAC adres).
Polecenie arp - wypisuje tablicę odwzorowań adresów IP-MAC, oraz zarządza tablicą arp.
plik: /proc/net/arp

Zuerst:~ # arp
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.1              ether   00:0F:3D:F4:C9:FD   C                     eth0
192.168.1.3              ether   00:02:44:9C:76:CB   C                     eth0

Zuerst:~ # cat /proc/net/arp
IP address       HW type     Flags       HW address            Mask     Device
192.168.1.1      0x1         0x2         00:0F:3D:F4:C9:FD     *        eth0
192.168.1.3      0x1         0x2         00:02:44:9C:76:CB     *        eth0

W pierwszej kolumnie widzimy adresy IP interfejsów, w kolumnie trzeciej odpowiadające im adresy sprzętowe (MAC). W ostatniej kolumnie jest wypisany lokalny interfejs, z którego możemy osiągnąć te interfejsy.

Część 3: Narzędzia do rekonesansu

(na przykładzie hosta to.to i komputera lokalnego 192.168.1.44):




ping - wysyła komputerowi pakiet ICMP typ 8 (echo request) w odpowiedzi dostaje ICMP typ 0 (echo reply)
jeżeli host nie odpowiada może to znaczyć, że:
- "ping" nie doszedł do celu (odrzucony po drodze do hosta)
- "ping" został odrzucony przez hosta (np firewall)
- "pong" nie doszedł do celu (odrzucony po drodze od hosta)
- inna przyczyna skutkująca usunięciem pakietu (przepełnienie kolejki na routerze, odpowiedź zbyt późna, błąd bitowy itp)

Zuerst:~ # ping to.to
PING to.to (62.8.221.3) 56(84) bytes of data.
64 bytes from ns.majesty.net (62.8.221.3): icmp_seq=1 ttl=53 time=604 ms
64 bytes from ns.majesty.net (62.8.221.3): icmp_seq=3 ttl=53 time=251 ms
64 bytes from ns.majesty.net (62.8.221.3): icmp_seq=4 ttl=53 time=380 ms
--- to.to ping statistics ---
4 packets transmitted, 3 received, 25% packet loss, time 3004ms
rtt min/avg/max/mdev = 251.522/412.208/604.480/145.816 ms

Dodatkową (i cenną) informacją jest wartość TTL (time to live) ustawiana zwykle na 64, 128 lub 255
(zależnie od systemu operacyjnego, o czym będzie można przeczytać dalej)
czyli w naszym przykładzie od hosta doszedł pakiet z TTL rownym 53, co oznacza,
że host docelowy jest 64 - 53 = 11 przeskoków od nas...(prawdopodobnie jakiś Linux)





traceroute (też. traceroute6) - wysyła komputerowi docelowemu "paczki" po 3 pakiety UDP z ustawionym (w warstwie sieciowej)
parametrem TTL(time to live) na 1 (3 pakiety), 2 (3 pakiety) i tak dalej. Każdy host przesyłając taki pakiet odejmuje 1 od wartości TTL.
W odpowiedzi na wyzerowany TTL host odsyła do nadawcy (czyli do nas) pakiet ICMP typ 11 (time exceeded)
Pakiety zostają odrzucane przez kolejne "przeskoki" aż osiągną cel.
Dzięki temu możemy otrzymać informację o ilości hostow jest między naszym komputerem a komputerem docelowym (i nie tylko).
Jeżeli host nie odpowiada na nasze pakiety pojawiają się znaki gwiazdki "*" może to znaczyć, że: (patrz ---> ping)

Zuerst:~ # traceroute to.to
traceroute to to.to (62.8.221.3), 30 hops max, 40 byte packets
 1  192.168.1.1 (192.168.1.1)  0.657 ms   0.445 ms   0.709 ms
 2  Warszawa-bras2.inetia.pl (195.114.190.150)  379.634 ms   446.487 ms   466.532 ms
 3  * * *
 4  WarsC001RT06-WarsC001RT05.inetia.pl (83.238.250.1)  466.154 ms   463.231 ms   461.034 ms
 5  * * *
 6  * * *
 7  core2.fra.qsc.de (212.202.214.221)  477.787 ms * *
 8  uplgw-broadnet.fra.qsc.de (212.202.214.238)  281.583 ms   279.392 ms   276.809 ms
 9  at-0-2-0-0001.per-ffm06.bmcag.net (194.140.111.205)  34.728 ms   94.460 ms   410.206 ms
10  213.217.93.204 (213.217.93.204)  435.761 ms   432.465 ms   430.292 ms
11  ns.majesty.net (62.8.221.3)  427.955 ms   426.695 ms   424.376 ms

Jak widzimy kmputery 3,4,5 nie odpowiedziały wogule, a komputer 7 odpowiedział raz (dwie gwiazdki).
Tam gdzie to było możliwe nasz komputer "dopytał" się o adresy ip i zamienił na nazwy DNS.
Widać też dokąd lecą pakiety z mojego komputera:
1 - moj domowy router
2 - router netii (moj ISP) zlokalizowany w Warszawie
3,4 (nie wiadomo)
5 - router netii
6 - niemcy
Prawdopodobnie komputer to.to jest gdzieś w zachodniej europie (lub dalej)

W naszym przykładzie host jest od na s oddalony 11 przeskoków (jak wcześniej wyliczyliśmy z ping-a)





nmap - narzędzie do skanowania komputerów w sieci.
dokładny opis i parametry wywołania znajduje się w manualu linuksa(man nmap)
z uwagi na to, że skanowanie może być uznane za atak, wszelkie działania wykonywałem na adresach lokalnych

Zuerst:~ # nmap -sP 192.168.1.44
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2007-04-09 22:22 CEST
Host Zuerst.H5MP (192.168.1.44) appears to be up.

Nmap finished: 1 IP address (1 host up) scanned in 0.020 seconds

Zuerst:~ # nmap -PA 192.168.1.44
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2007-04-09 22:22 CEST
Interesting ports on Zuerst.H5MP (192.168.1.44):
Not shown: 1675 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
5800/tcp open  vnc-http
5900/tcp open  vnc
8888/tcp open  sun-answerbook

Nmap finished: 1 IP address (1 host up) scanned in 0.402 seconds

W kolumnie SERVICE proba "odgadnięcia"
jaki serwis znajduje się na moim komputerze...
Lista powszechnie znanych portów: http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
Oczywiście nic i nikt nie zabroni nam uruchomienia jakiejkolwiek usługi na dowolnym porcie...






Zadania 

    1. w katalogu domowym, należy utworzyć trzy pliki o nazwach: plik_1, plik_2, plik_3
    2. następnie utworzyć drzewo katalogów katalog_1/katalog_2/katalog_3
    3. plik_1 przekopiować do katalog_1, plik_2 przekopiować do katalog_2, plik_3 przekopiować do katalog_3.
    4. wejść do katalog_3, usunąć plik_3
    5. zmienić nazwę katalog_3 na katalog_pusty
    6. usunąć pliki plik_1, plik_2, plik_3 z katalogu domowego
    7. usunąć rekursywnie utworzone drzewo katalogów
  1. Przećwiczyć polecenia more, less, cat przeglądając pliki konfiguracyjne (w katalog /etc).
  2. Sprawdzić prawa zapisu do pliku /etc/hosts (jeżeli nie, przejść na tyb super-użytkownika poprzez polecenie su Dodać linię
    148.81.141.16 www.microsoft.com
    do tego pliku. Można wykonać to poleceniem:
    Zuerst:~ # echo 148.81.141.16 www.microsoft.com >>/etc/hosts

    odwiedzić stronę www.microsoft.com


  3. Słownik 

    arp - polecenie Linuxa: zarządza tablicą ARP w komputerze. W tablicy trzymane są odwzorowania adresów IP na odpowiednie MAC-adresy interfejsów sieciowych. Polecenie wykonane bez parametrów wyświetla całą tablicę arp.

    ARP - Address Resolution Protocol: Protokół umożliwiający uzyskanie adresu MAC interfejsu sieciowego poprzez przypisany do interfejsu adres IP. Protokół działa tylko w zasięgu lokalnym (nie wychodzi poza sieć lokalną). Jedyną możliwością, aby protokół miał większy zasięg jest użycie "arp bridge" który łączy dwie sieci lokalne (np protokołem point-to-point).

    DNS - Domain Name System (System nazw Domenowych) system umożliwiający przetłumaczenie adresów zrozumiałych przez użytkownika (np www.pjwstk.edu.pl) na adresy IP (np 148.81.141.16) i odwrotnie (za pomocą specjalnej domeny arpa).

    ifconfig - polecenie Linuxa: służy do konfiguracji interfejsu sieciowego. Polecenie wykonane bez żadnych parametrów wyświetla listę aktywnych interfejsów sieciowych.

    IP - Internet Protocol: Protokół komunikacyjny warstwy sieciowej, służy do komunikacji między komputerami w Internecie (sterowania ruchem pakietów). Protokół nie gwarantuje dostarczenia pakietów do adresata, kolejności dostarczenia lub fragmetnacji. Adres w protokole IP w wersji 4 ma długość 32 bity oraz 128 bitów w wersji 6 (która powoli zostaje wprowadzana do Internetu).

    lspci - polecenie Linuxa: Wyświetla informacje o urządzeniach podłączonych do szyn PCI w systemie operacyjnym.

    nmap - polecenie Linuxa: skaner portów. narzędzie służące do rekonesansu sieci oraz audytów bezpieczeństwa. Wykrywa otwarte porty komunikacyjne na komputerze zdalnym. Posiada wiele opcji służących do zmiany rodzaju skanowania.

    ping - polecenie Linuxa: podstawowe narzędzie służące do testowania komputera zdalnego. Pozwala na sprawdzenie, czy komputer zdalny jest osiągalny z komputera lokalnego. Mierzy liczbę zgubionych pakietów, liczbę przeskoków przed osiągnięciem celu oraz czas przesłania pakietu "tam i z powrotem". Komunikacja używa pakietów ICMP typu Echo Request oraz Echo Reply

    route - polecenie Linuxa: polecenie zarządzające tablicą routingu. Umożliwia dodanie statycznych tras do sieci/hostów poprzez wybrany interfejs sieciowy. Wykonanie polecenia bez parametrów wypisuje aktualnie używaną tablicę routingu.

    traceroute - polecenie Linuxa: wykrywa trasę przebiegu pakietów między komputerem lokalnym a komputerem zdalnym. Program modyfikuje wartość parametru TTL (Time-To-Live) w celu "odpytania" kolejnych komputerów na drodze do komputera zdalnego.

    Pliki 

    Ten dział zostanie uzupełniony wkrótce...

    W sieci