]> gitweb.morketsmerke.org Git - mmdev.git/commitdiff
Tworzenie rozdziału 10. Ukończono podrozdział 10.1
authorxf0r3m <jakubstasinski@protonmail.com>
Wed, 23 Aug 2023 12:20:03 +0000 (14:20 +0200)
committerxf0r3m <jakubstasinski@protonmail.com>
Wed, 23 Aug 2023 12:20:03 +0000 (14:20 +0200)
articles/terminallog/Linux.Podstawy.html

index 9b0d34d29955c2ab339a49fe20122e0cf5bff269..37cea90647538cc1e75e72c71c27e497379950ec 100644 (file)
@@ -8057,6 +8057,261 @@ xf0r3m@immudex:~$ sudo wpa_cli
           konfiguracji sieci w Linuks. Jednak to nie koniec tematów 
           sieciowych ponieważ następne dwa rozdziały będą na niej bazować.
         </p>
+        <h1 id="10.applicationlayer">10. Warstwa aplikacji - usługi sieciowe</h1>
+        <p>
+          W poprzednim rozdziale dowiedzieliśmy się czym są sieci komputerowe
+          i jak wygląda ich konfiguracja w dystrybucjach Linuksa. Sieci służą
+          do przesyłania danych, a te musimy dostsować za pomocą uzupełnienia
+          formularza na stronie internetowej lub w postaci zwykłego pliku
+          tekstowego. Za obie te formy odpowiadają różne ustandaryzowane zbiory
+          programów składające się na jeden konkrent <strong>protokół</strong>.
+          Protokołów nie należy stawiać obok programów, które możemy kojarzyć
+          z daną formą sposóbu przesyłania informacji przez sieć. Te programy
+          najczęściej zajmują się ich obsługą, zawierają tym samym ich
+          implementacje oraz dostosowanie aby korzystanie z protokołu było
+          najcześciej niezauważalne a końcowy użytkownik utrzymał tylko
+          i wyłącznie żądaną stronę internetową lub dostęp do zasobu dyskowego
+          udostępnionego gdzieś na serwerze.
+        </p>
+        <p>
+          Aby pomiędzy dwoma <em>stronami</em> mogła zajść komunikacji
+          potrzebny jest nadawca i odbiorca. Z punktu widzenia sieci
+          komputerowej, każdy host jest jednocześnie jednym i drugim. Jednak
+          patrząc na to ze strony obecnie omiawianego tematu, różnica między
+          stronami jest już dużo bardziej podkreślona. Mamy sztywny podział
+          między aplikacji klienckimi danego protokołu, które żądają dostępu
+          do konkretnego zasobu a serwera, które te dane udostępniają.
+          Wiele serwerów określa się mianem <strong>usług sieciowych</strong>.
+          Często mówiąc o jakiś serwerze do słowa <em>serwer</em> dodaje się
+          protokół, który obsługuje. Jak możemy pamiętać np. z rozdziału 7,
+          nie które serwery domyślnie nie są usługami sieciowymi (chociaż mogą,
+          wystarczy odpowienio jes skonfigurować).
+        </p>
+        <p>
+          Usługi sieciowe mają za zadanie udostępniać dane poprzez wybrane
+          protokoły. Na przykład coś co nazywamy przeglądarką internetową
+          opiera swoje działanie na protokole HTTP bądź jego bezpieczeniejszej
+          wersji w postacji protokołu HTTPS. Programy pocztowe wykorzystują
+          protokoły SMTPS oraz POP3S lub IMAPS. Wiele różnych aplikacji
+          sieciowych może wykorzystywać różne protokoły lub samodzielnie
+          implementować format danych przesyłanych przez sieć. Nie mniej jednak
+          wszystkie te protokoły rezydują w <strong>warstwie aplikacji</strong>
+          czwartej warstwie modelu TCP/IP.
+        </p>
+        <p>
+          W tym rozdziale nadal pozostaniemy w sieciach. Przeanalizujemy
+          działanie protokołu HTTP. Omówimy sobie usługę sieciową na podstawie
+          SSH. Dowiemy się jak uruchamiane były, nie które specyficzne usługi
+          i jak są uruchamiane teraz. Sprawdzimy sobie narzędzia diagnostyczne,
+          które pozwolą nam na sprawdzenie dostępności usługi ale również
+          monitorowanie przesłanych przez nia i do niej danych. Na koniec
+          zajmiemy się zdalnym wywołaniem procedur (RPC) oraz omówimy sobie
+          podstawowe zagadnienia związane z bezpieczeństwem.
+          Tematem zaawansowamym będą gniazda. 
+        </p>
+        <h2 id="10.1.httpanalysis">10.1. Analiza HTTP</h2>
+        <p>
+          Na wstępie omówilśmy sobie co tak naprawdę znajduje się w warstwie
+          aplikacji. Aby była możliwość zapewnienia bezbłędnego działania
+          wielu znanych protokołów, które no men omen są podstawą komunikacji
+          w internecie, zespoły odpowiedzialne za implementacje tych standardów
+          często umieszczają w swoich programach klienckich możliwośc analizy
+          przesyłanych danych. W tym podrozdziale skupimy się głównie na jednym
+          protokole i jednym narzędziu umożliwiającym śledzenie danych
+          przesyłanych za pomocą protokołu. Jednak w podrozdziale poświęconym
+          narzędziom dianostycznym dowiemy się, że możemy sprawdzić większość
+          usług, za pomocą kilku narzędzi.
+        </p>
+        <p>
+          W większości dystrybucji dostępne jest narzędzie 
+          <strong>curl</strong> jest ono nagminnie wykorzystywane do pobierania
+          plików za pomocą protokołu HTTP w terminalu. Program ten jako, że
+          wykorzystuje protokół HTTP/S posiada również możliwość prześledzenia
+          transmisji. Jako przykład wykorzystamy serwis pogodowy, który
+          przesyła obecną sytuację pogodową (lub dwu-dniową prognozę) za ASCII.
+          Dla przykładu:
+        </p>
+<pre class="code-block">
+xf0r3m@immudex:~$ curl wttr.in/Warszawa?0\&amp;lang=pl
+Pogoda w: Warszawa
+
+      \   /     Słonecznie
+       .-.      21 °C
+    ― (   ) ―   → 9 km/h
+       `-’      10 km
+      /   \     0.0 mm
+</pre>
+        <p>
+          Na podstawie wyścia tego polecenia, ciężko jest na prierwszy rzzut
+          oka dostrzec, że jest to strona internetowa, ale tak właśnie jest.
+          Chcąc przeanalizować jak wygląda komunikacja za pomocą protokołu
+          HTTP należy wydać następujące polecenie:
+        </p>
+<pre class="code-block">
+xf0r3m@immudex:~$ curl --trace-ascii curl.log wttr.in/Warszawa?0\&amp;lang=pl
+</pre>
+        <p>
+          Opcja <code class="code-inline">--trace-ascii</code> mówi programowi
+          <em>curl</em> aby zapisywał on komunikaty diagnostyczne. Dodatkowo
+          ta opcja wymaga podania pliku przeznaczonego na dane wyjściowe. W
+          moim przypadku jest <em>curl.log</em>. Poniżej znajduje się jego
+          zawartość, pominąłem na poniższym przykładzie dane zwracane przez
+          polecenie (są one normalnie dostępne w terminalu po wydaniu 
+          polecenia).
+        </p>
+<pre class="code-block">
+== Info:   Trying 5.9.243.187:80...
+== Info: Connected to wttr.in (5.9.243.187) port 80 (#0)
+=&gt; Send header, 89 bytes (0x59)
+0000: GET /Warszawa?0&amp;lang=pl HTTP/1.1
+0022: Host: wttr.in
+0031: User-Agent: curl/7.74.0
+004a: Accept: */*
+0057:
+== Info: Mark bundle as not supporting multiuse
+&lt;= Recv header, 17 bytes (0x11)
+0000: HTTP/1.1 200 OK
+&lt;= Recv header, 32 bytes (0x20)
+0000: Access-Control-Allow-Origin: *
+&lt;= Recv header, 21 bytes (0x15)
+0000: Content-Length: 314
+&lt;= Recv header, 41 bytes (0x29)
+0000: Content-Type: text/plain; charset=utf-8
+&lt;= Recv header, 37 bytes (0x25)
+0000: Date: Wed, 23 Aug 2023 08:23:51 GMT
+&lt;= Recv header, 2 bytes (0x2)
+0000:
+&lt;= Recv data, 314 bytes (0x13a)
+0080:  .  .[38;5;226m  ... (   ) ...  .[0m .[1m....[0m .[38;5;154m9.[0
+00c0: m km/h.[0m       .  .[38;5;226m     `-...     .[0m 10 km.[0m
+0100:       .  .[38;5;226m    /   \    .[0m 0.0 mm.[0m         .
+== Info: Connection #0 to host wttr.in left intact
+</pre>
+        <p>
+          Pierwsze dwie linie, są to linie informujące nas o uzyskanym adresie
+          IP oraz o tym czy połącznie powiodło się. Jeśli tak jest, to wówczas
+          wysyłany jest <strong>nagłówek</strong>, - w nagłówkach HTTP
+          przeważnie znajdują się informacje kontrolne dla programów, które
+          będą zajmować się interpretowaniem treści przesłanej przez serwer.
+          No właśnie. Można by na logikę rzecz ująć, że to przeglądarka powinna
+          pobrać żądaną stronę WWW. W rzeczywistości to klient przesyła
+          jedynie nagłówek z żądaniem. Przyglądając się pierwszej linii 
+          nagłówka
+          rozpoczynajcego się liczbą: <code class="code-inline">0000</code>
+          (Ta liczba to bajt rozpoczęcią tych danych w ładunku/bloku danych
+          przesyłanych w pakietach sieciowych). Zawiera ona słowo kluczowe
+          <code class="code-inline">GET</code> Następnie występuje wartość
+          żądania (czego sobie życzysz), na podstawie tych informacji skrypt
+          jest wstanie zwrócić odpowiedni stan pogodowy, w przypadku kiedy
+          poprostu odwiedzamy jakąś witrynę to najczęściej po słowie 
+          <em>GET</em> występuje ukośnik (<strong>/</strong>). Serwery wówczas
+          interpretują to, że żądanie dotyczy głównie pliku <em>index.html</em>
+          zapisanego w katalogu przypisanym na serwerze do danej witryny.
+        </p>
+        <p>
+          Uwaga! Jeden serwer WWW, może utrzymać kilka jak nie kilkanaście lub
+          kilkadziesiąt różnych stron internetowych. Wszystko zależy od jego
+          ustawień oraz wydajności sprzętowej, która go utrzymuje. Dlatego też
+          wiele stron może kierowanych pod jeden adres IP. Taka funkcjonalność
+          nazywa się <strong>hostingiem</strong>.
+        </p>
+        <p>
+          W naszym przypadku również żądamy głównego pliku tego hostingu, w
+          nagłówku natomiast przekazujemy dane, które pomogą w uzyskaniu
+          żądanych przez nas danych. Jest to jedna z cech protokołu HTTP. Dane
+          (głównie do aplikacji, ponieważ statyczne strony rzadko interpretują
+          jakieś dane) mogą być przekazywane jako rozwinięcie adresów jest to
+          tak zwana <em>metoda GET</em> lub w postaci odrębnego pakietu danych
+          poza widocznością dla zwykłego użytkownika - <em>metoda POST</em>.
+          Przy użyciu <em>metody POST</em> najczęściej przesyłane są dane
+          uzupełnionych formularzy na stronach WWW. Po danych przekazywanych
+          aplikacji (w tym przypadku) wstepują już informacje kontrolne dla
+          samego protokołu HTTP w linii <em>0022</em> (będę używał takich
+          oznaczeń) występuje pole nagłówka 
+          <code class="code-inline">Host:</code> zawiera ono nazwę hosta do,
+          którego kierujemy nasze żądanie. Następne pole nagłówka to 
+          <code class="code-inline">User Agent:</code>, to pole zawiera
+          informacje jakiego programu klienckiego WWW używamy. Ta informacja
+          jest zapisywana w plikach dziennika serwera wraz z adresem IP.
+          Narzędzia takie jak <em>curl</em> lub podobny mu i bardziej
+          powszechny <em>wget</em> pozwalają na zmianę tej wartości, za pomocą
+          jednej opcji możemy podać się za np. program indeksujący jednej z
+          wyszukiwarek. Trzecim polem jest rodzaje danych jakie może 
+          zinterpretować, polecenie to służy głównie pobieraniu treści więc
+          rzadko kiedy je interpretuje. Wyjątkiem może być omawiany przez nas
+          przykład. Ostatnim pole jest znak nowego wiersza, który kończy
+          nagłówek żądania. Teraz następuje jego przesłanie i oczekiwnaie na
+          odpowiedź serwera.  
+        </p>
+        <p>
+          W przypadku odpowiedzi jak możemy zauważyć przesyłanych jest wiele
+          nagłówków przedstawiających pojedyńcze pola. Nie będe ich tutaj
+          wszystkich opisywał, jednak na uwagę zasługuję jedna informacja,
+          która została wcześniej pominięta. Otóż, w polu metody żądania lub
+          w pierwszym naglówku odpowiedzi znajduje się wykorzystywana w
+          transmisjii wersja protokołu HTTP. Wersja 1.1 jest obecnie
+          standardem, jednak obecnie w stanie proponowanych standardów są
+          wersje 2 i 3. Seria nagłówków odpowiedzi kończy się w taki sam 
+          sposób jak w przypadku nagłówka żądania, znakiem nowego wiersza.
+          Następnie odebrany zostaje pakiet danych a dane w nim zawarte
+          trafiają do użytkownika.
+        </p>
+        <p>
+          Tak moglibyś to wywnioskować na podstawie danych diagnostycznych
+          zwróconych przez program <em>curl</em>. Wygląda to nieco inaczej, ale
+          różnice występują tylko w przedstawieniu danych. Otóż otrzymując
+          pakiet protokołu HTTP, nie ma w nim podziału na sekcje nagłówka i
+          danych. Nie ma także dwóch odrębnych pakietów. Wszystko spakowane
+          jest w jednej paczce, a <em>curl</em> na podstawie znaku nowego
+          wiersza jest jedynie oddzielić te dane.
+        </p>
+        <p>
+          Innym sposobem na wejście interakcje np. z protokołem HTTP jest
+          wykorzystanie zapomnianego już programu <strong>Telnet</strong>.
+          <em>Telnet</em> kiedyś służył do tego do czego służy teraz 
+          protokół SSH. Do zdalnego połączenia się z powłoką.
+          Telnet sam w sobie również jest protokołem. Obecnie telnet rzadko
+          jest spotykany w swojej pierwotnej formie, chyba że w postaci
+          lokalnej konsoli w systemach wbudowanych.
+        </p>
+<pre class="code-block">
+xf0r3m@immudex:~$ telnet example.org 80 > telnet.log
+Trying 93.184.216.34...
+Connected to example.org.
+Escape character is '^]'
+GET / HTTP/1.1
+Host: example.org
+
+HTTP/1.1 200 OK
+Age: 126394
+Cache-Control: max-age=604800
+Content-Type: text/html; charset=UTF-8
+Date: Wed, 23 Aug 2023 11:28:50 GMT
+Etag: "3147526947+ident"
+Expires: Wed, 30 Aug 2023 11:28:50 GMT
+Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
+Server: ECS (dcb/7F7F)
+Vary: Accept-Encoding
+X-Cache: HIT
+Content-Length: 1256
+...
+</pre>
+        <p>
+          Po wielokropku występuje już tylko kod HTML strony. Polecenie
+          <code class="code-inline">telnet</code> wymaga aby port, pod który
+          należy się podłączyć. Aby otrzymać odpowiedź musimy metodę
+          (<code class="code-inline">GET</code>), ewentualne dane/żądany plik
+          (<code class="code-inline">/</code>), wersje protokołu
+          (<code class="code-inline">HTTP/1.1</code>) w drugiej lini nagłówka
+          należy podać nazwę hosta
+          (<code class="code-inline">Host: example.org</code>), ze względu na
+          to aby serwer WWW wiedział z jakiej witry przesłać odpowiedź.
+        </p>
+        <p>
+          Protokół jest może trochę mało interaktwny przy takim połączeniu, ale
+          np. usługi pocztowe są już bardziej skore do <em>rozmowy</em>.
+        </p>
+        <h2 id="10.2.networkservers">10.2. Serwery sieciowe</h2>
       </div>
                        <p style="margin: 15px; padding: 0; outline: 0;">
                                2022; COPYLEFT; ALL RIGHTS REVERSED;