INSTALACJA APACHE’A

Apache jest oprogramowaniem, które można powiedzieć zdominowało w pewnym stopniu rynek aplikacji serwerowych. Do działania wykorzystuje on protokół HTTP (RFC2616). Jak sama nazwa wskazuje Apache (a patche server) składa się z wielu modułów. Można to zauważyć już na pierwszy rzut oka. W tym rozdziale zostanie opisana autoryzacja, obsługa języka PHP, CGI, virtualhosts oraz ogólna jego konfiguracja. Przedstawiona poniżej oparta została o apache z serii 2.x.

Instalacja

Apache w PLD jest podzielony na wiele małych pakietów, możemy dzięki instalować tylko potrzebne moduły. Jeśli nie możemy się połapać w tym gąszczu to możemy posłużyć się metapakietem apache, który za pośrednictwem mechanizmu zależności zainstaluje najważniejsze pakiety.

# poldek -i apache

 

Kiedy będziemy mieli zainstalowane wymagane pakiety, będziemy mogli wstępnie przetestować serwer, zatem uruchomimy usługę:

 

# service httpd start

 

W katalogu /home/services/httpd umieszczamy jakąś testową stronę WWW którą nazwiemy np. test.html i sprawdzamy za pomocą przeglądarki czy się prawidłowo wyświetla:

 

$ elinks localhost/test.html

 

Jeśli wszystko jest w porządku, to możemy przejść do właściwej konfiguracji serwera.

Pliki konfiguracji

Tytułem wstępu pragnę powiedzieć, że niniejszy dokument nie może być traktowany jako dokumentacja do Apache. Ma on na celu ułatwienie użytkownikowi zapoznania się z usługą oraz kilkoma jej możliwościami. Po bardziej szczegółowe informacje odsyłam do stron podręcznika systemowego (man) oraz dokumentacji on-line

·         /etc/httpd/httpd.conf - w tym katalogu przechowywane są pliki konfiguracyjne demona. Po instalacji poszczególnych składników Apache, właśnie w tym miejscu należy szukać plików konfiguracyjnych od nich.

·         /home/services/httpd - pliki domyślnej strony Apache, katalog z komunikatami o błędach oraz katalog przeznaczony dla skryptów cgi.

·         /usr/lib/apache - moduły potrzebne do działania Apache oraz poszczególnych jego składników. Warto o tym pamiętać w przypadku problemów z uruchomieniem usługi.

·         /usr/sbin - jest to katalog należący stricte do Apache, jednak warto o nim wspomnieć ze względu na to iż przechowywane są w nim jego binaria. Aby się dowiedzieć które należą do niego wydaj następujące polecenie

# rpm -ql apache |grep ^\/usr\/sbin

Aby nasz serwer obsługiwał dodatkowe funkcje musimy zainstalować odpowiednie moduły, wraz z modułami dostarczane, są pliki konfiguracji z dyrektywami konfiguracyjnymi dla tego modułu.

Apache domyślnie działa z uprawnieniami zwykłego użytkownika (http), dlatego trzeba zadbać o to by demon miał prawo do odczytu plików ze stronami WWW.

Bardzo pożyteczną cechą Apache jest możliwość tworzenia lokalnych plików konfiguracji, dzięki którym możemy modyfikować niektóre opcje konfiguracji. Pliki te mają nazwę .htaccess i może ich używać każdy, kto ma tylko dostęp do katalogu ze stroną WWW. Wygoda w ich używaniu polega na tym, że nie ma potrzeby restartowania demona po każdorazowej ich modyfikacji.

Podstawowa konfiguracja

Głównym plikiem konfiguracyjnym jest /etc/httpd/apache.conf. Spośród wielu opcji w tym pliku zajmiemy się dwiema podstawowymi:

ServerAdmin root@example.net

Powinieneś tutaj wpisać kontaktowy adres e-mail do siebie jako administratora tego serwera.

Poniżej znajduje się opcja ServerName. Powinna ona wyglądać tak jak w poniższym przykładzie.

ServerName example.net:80

Dosłownie jest to nazwa tego serwera. A dokładniej nazwa domenowa skonfigurowana na serwerze nazw opiekującym się Twoją domeną. Jeżeli nie posiadasz zarejestrowanej domeny, powinieneś wpisać tutaj adres IP.

Teraz zajmiemy się opcją DocumentRoot, którą odnajdziemy w /etc/httpd/conf.d/10_common.conf Określa ona domyślny katalog w którym będzie przechowywana strona internetowa. Wpisując nazwę lub adres IP określony przez ServerName właśnie z tego katalogu zostaną pobrane i wczytane przez przeglądarkę pliki strony.

DocumentRoot "/home/services/httpd/html"

Domyślnie wszystkie żądania są tutaj skierowane. Ta lokalizacja nie jest obligatoryjna, więc nie musisz się jej trzymać. Może zostać zmieniona przy użyciu dowiązań symbolicznych lub aliasów wskazujących w inne miejsca.

Zgodnie z obecnym standardem tworzenia stron internetowych, domyślnym plikiem który jest automatycznie wczytywany po wpisaniu w przeglądarce adresu jest index, który w zależności od konstrukcji strony może mieć różne rozszerzenia. A więc skąd Apache wie, co ma zostać wczytane jako pierwsze? Do tego właśnie służy pakiet apache-mod_dir. Jego plikiem konfiguracyjnym jest /etc/httpd/httpd.conf/59_mod_dir.conf

Poprzez dyrektywę DirectoryIndex określa się czego i w jakiej kolejności ma szukać przeglądarka.

DirectoryIndex index.html index.html.var index.htm index.shtml \
    index.cgi index.php

Oczywiście możemy podawać tutaj różne nazwy plików startowych stron w zależności od naszych potrzeb.

Strony użytkowników

Swobodne publikowanie stron internetowych przez użytkowników jest możliwe dzięki pakietowi apache-mod_userdir. Opcja UserDir w pliku 16_mod_userdir.conf definiuje nazwę katalogu przechowującego strony użytkowników wewnątrz ich katalogów domowych.

UserDir public_html

 

Przykład: Użytkownik Jan Kowalski posiada konto o nazwie: jan. W /home/users/jan jest jego katalog domowy. Swoją stronę internetową umieszcza w katalogu /home/users/jan/public_html, zaś dostęp do nie uzyskuje za pomocą adresu http://example.net/~jan.

Aby strona się wyświetliła należy ustawić odpowiednie prawa dostępu - tak by Apache (domyślnie z prawami użytkownika http) miał prawo do odczytu. Katalog domowy jan powinien mieć ustawione prawa 711. Katalog przechowujący jego stronę czyli public_html powinien mieć 755. Każdy katalog zawierający elementy strony powinien mieć również uprawnienia 755. Pliki strony natomiast 644.

Virtual Hosts

Mechanizm hostów wirtualnych pozwala obsługiwać strony o różnych adresach domenowych na jednej maszynie. Mechanizm ten jest realizowany na dwa sposoby: hosty oparte o adresy IP oraz oparte o nazwy, pierwsza z metod wymaga osobnego adresu IP dla każdego wirtualnego hosta, drugi zaś korzysta z jednego. Z oczywistych względów dużo bardziej popularna jest druga z metod i właśnie ją będziemy opisywać.

Obsługa hostów wirtualnych jest związana z odpowiednią konfiguracją domen w systemie DNS - wymaga wpisów typu IN A wskazujących na nasz serwer WWW. Konfigurację serwera DNS opisano w tym dokumencie i będzie docelowo konieczna, jednak dla potrzeb testowych wystarczą nam wpisy w pliku /etc/hosts, który z kolei został opisany w tym dokumencie.

W naszym przykładzie dodamy obsługę domeny moja-strona.com, na początku należy stworzyć dodatkowy plik konfiguracji (dla porządku) o nazwie np. vhosts.conf, który umieścimy w katalogu /etc/httpd/httpd.conf/. Zakładamy, że wszystkie vhosty będziemy trzymać w katalogu /home/services/httpd/vhosts/. Plik będzie się zaczynał od następującego zestawu opcji:

NameVirtualHost *
<Directory /home/services/httpd/vhosts>
        Order allow,deny
        Allow from all
</Directory>
<VirtualHost _default_>
        DocumentRoot /home/services/httpd/html/
</VirtualHost>

 

Opcja NameVirtualHost wskazuje, które adresy IP serwera mają być używane do obsługi hostów witrualnych, w tym wypadku wszystkie, co jest najczęściej spotykaną konfiguracją. Sekcja Directory zezwala na dostęp do plików ze wskazanego katalogu. Pierwszy zdefiniowany virtualhost (_default_) ma za zadanie wskazanie serwerowi domyślnej strony, wyświetlanej w wypadku jeśli jakiś vhost nie jest skonfigurowany na naszym serwerze, w przeciwnym razie wyświetli się strona pierwszego w kolejności vhosta. Teraz możemy dodawać vhosty, wg. przykładu:

 

<VirtualHost *>
        ServerName moja-strona.com
        DocumentRoot /home/services/httpd/vhosts/moja_strona
</VirtualHost>

 

Wewnątrz sekcji VirtualHost znajduje się opcja ServerName, mówiąca o nazwie domenowej vhosta, a poniżej wskazanie są ścieżki do katalogu z plikami strony. Po uruchomieniu mechanizmu hostów wirtualnych całkowicie bezużyteczne staną się globalne opcje ServerName czy DocumentRoot, od tej pory konfiguracja w całości opiera się o vhosty. W konfiguracji hostów wirtualnych możemy umieszczać wiele opcji używanych w głównym serwerze (np.: ServerAdmin, ErrorLog), tak zdefiniowane opcje przesłonią globalne wartości.

Istnieje możliwość masowego konfigurowania vhostów, bez konieczności tworzenia wpisów dla każdego po kolei, służy do tego moduł vhost-alias dostarczany wraz z pakietem apache-mod_vhost_alias. Jego opis wykracza poza ramy tego rozdziału, więcej na jego temat odnajdziemy w dokumentacji serwera.

Ograniczanie dostępu na podstawie adresu

Czasami chcemy ograniczyć możliwość przeglądania stron dla konkretnych adresów lub klas adresowych. W tym celu użyjemy modułu apache-mod_authz_host, dzięki niemu będziemy mogli chronić przed dostępem do wskazanych katalogów. Jeżeli potrzebujesz chronić jedynie jeden lub kilka plików, stwórz w obrębie strony katalog o dowolnej nazwie i umieść je w nim. Oczywiście musisz pamiętać o przekonstruowaniu linków na stronie.

Do konfiguracji Apache dodajemy podobną konstrukcję konstrukcję:

<Directory "/home/users/jan/public_html/intra">
        Order allow,deny
        Allow from 123.45.0.0/255.255.0.0
        Allow from 56.67.9.34
</Directory>

Dostęp do katalogu intra mają wszystkie komputery z określonej w przykładzie sieci oraz jeden komputer (bądź urządzenie udostępniające NAT) o wymienionym adresie. Wszystkie połączenia nie pasujące do tych kryteriów traktowane są jako deny, zgodnie z porządkiem wyznaczonym przez dyrektywę Order.

Ograniczenie dostępu za pomocą loginu i hasła

Apache udostępnia mechanizm autoryzacji, który używany jest do wyodrębnienia z serwisu pewnej części przeznaczonej dla upoważnionych użytkowników. Ograniczenie działa na poziomie katalogów i podobnie jak w ograniczeniu dla adresu (opisanego powyżej) nie można w ten sposób chronić poszczególnych plików.

Apache wspiera wiele rodzajów źródeł uwierzytelniających: pliki tekstowe, konta systemowe, bazy LDAP i inne. My będziemy zajmować się autoryzacją za pomocą plików tekstowych, ze względu na popularność i prostotę tego rozwiązania. Istnieją dwa protokoły przesyłania hasła Basic i Digest (w postaci skrótu). Metoda Digest jest bezpieczniejsza jednak praktycznie nie jest obsługiwana przez przeglądarki WWW, tak więc pozostaje nam używanie metody Basic.

Zaczynamy od instalacji metapakietu apache-mod_auth oraz pakietu htpasswd-apache. Teraz dodajemy do któregoś z plików konfiguracji regułkę chroniącą katalog :

<Directory "/home/users/jan/public_html/private">
        AuthType Basic
        AuthBasicProvider file
        AuthName "Witaj Janie, zaloguj sie."
        AuthUserFile /home/services/httpd/.htpasswd
        Require valid-user
</Directory>

Opcja AuthUserFile wskazuje plik z loginami i hasłami użytkowników, jak widać ścieżka ta jest inna niż chroniony katalog ze względów bezpieczeństwa. Opcja Require określa jacy użytkownicy są akceptowani - tutaj każdy autoryzowany.

Teraz tworzymy plik z hasłami, poprzez dodanie pierwszego konta:

# htpasswd -c /home/services/httpd/.htpasswd jan
New password:
Re-type new password:
Adding password for user jan

 

Plikowi ustawiamy odpowiednie uprawnienia i własność, aby dostęp do niego miał wyłącznie użytkownik http:

 

# chmod 600 /home/services/httpd/.htpasswd
# chown http.http /home/services/httpd/.htpasswd

Po restarcie każde odwołanie do katalogu będzie wymagało podania loginu jan i hasła. Istnieje także możliwość dodania obsługi grup - mechanizmu zbliżonego działaniem do uniksowych grup systemowych.

W wielu wypadkach będziemy chcieli dać możliwość użytkownikom tworzenia plików z hasłami z wraz z plikami .htaccess w katalogu określonym przez DocumentRoot. Stanowi to zagrożenie bezpieczeństwa, ze względu na możliwość wyświetlenia zawartości tych plików. Możemy się zabezpieczyć przed tym instalując pakiet apache-mod_authz_host, dzięki któremu m.in. nie zostaną wysłane do przeglądarki pliki .ht*

Obsługa skryptów PHP

Ze względu na dużą funkcjonalność język PHP stał się już w zasadzie pewnym standardem w tworzeniu interaktywnych stron internetowych. Współczesne serwisy wykorzystują m. in. bazy danych, dlatego zostanie również opisane jak taką obsługę zapewnić. Przeglądając listę dostępnych do zainstalowania pakietów z PHP na pierwszy rzut oka widać nacisk twórców dystrybucji jaki został nałożony na modularność. Daje to niesamowitą wolność w wyborze tego co jest Ci dokładnie potrzebne.

Zaczynamy od instalacji pakietu apache-mod_php, w ten sposób otrzymamy podstawową wersję PHP, dodatkowe pakiety instalujemy wtedy gdy potrzebna nam jest jakaś funkcjonalność. Najlepszą metodą sprawdzenia czy PHP działa jest użycie funkcji phpinfo(), aby z niej skorzystać stwórz plik z zawartością taką jak poniżej:

<? phpinfo(); ?>

 

następnie należy go umieść w katalogu /home/services/httpd/html, pod nazwą np. info.php. Teraz wpisujemy w przeglądarce adres http://example.net/info.php, powinieneś uzyskać informacje m. in. na temat wersji PHP, konfiguracji serwera oraz obsługiwanych modułów.

Obsługa różnego typu systemów bazodanowych rozbita jest na osobne pakiety zawierające definicje funkcji PHP które ją zapewniają. Poniżej w tabeli znajduje się lista która to odzwierciedla.

Nazwa pakietu

Baza Danych

php-dba

Moduł dla PHP dodający obsługę dla baz danych opartych na plikach (DBA).

php-dbase

Moduł PHP ze wsparciem dla DBase.

php-filepro

Moduł PHP dodający możliwość dostępu (tylko do odczytu) do baz danych filePro.

php-interbase

Moduł PHP umożliwiający dostęp do baz danych InterBase i Firebird.

php-mssql

Moduł PHP dodający obsługę baz danych MS SQL poprzez bibliotekę FreeTDS.

php-mysql

Moduł PHP umożliwiający dostęp do bazy danych MySQL.

php-odbc

Moduł PHP ze wsparciem dla ODBC.

php-pgsql

Moduł PHP umożliwiający dostęp do bazy danych PostgreSQL.

php-sybase

Moduł PHP dodający obsługę baz danych Sybase oraz MS SQL poprzez bibliotekę SYBDB.

php-sybase-ct

Moduł PHP dodający obsługę baz danych Sybase oraz MS SQL poprzez CT-lib.

Aby skorzystać z którego kolwiek modułu wystarczy go po prostu zainstalować. Przeprowadzając instalację w trybie wsadowym pamiętaj o zrestartowaniu usługi apache, o czym zostaniesz przez poldka poinformowany. Dystrybucja nie posiada niestety pakietów do obsługi bazy danych Oracle. Jeżeli jest Ci ona potrzebna musisz zbudować PHP włączając obsługę oracla z serwera CVS, instalując uprzednio Oracla którego posiadasz.

Warto jeszcze wspomnieć o narzędziach wspomagających zarządzanie bazami danych. Do obsługi bazy MySQL służy pakiet phpMyAdmin natomiast do PostgreSQL zainstaluj phpPgAdmin. Szerzej o tych aplikacjach w dokumentacji do tych systemów.

CGI

Aby nasz Apache obsługiwał programy CGI wystarczy zainstalować pakiet apache-mod_cgi. Po przeładowaniu demona programy CGI obsługiwane będa w katalogu /home/services/httpd/cgi-bin, zgodnie z ustawieniami w pliku /etc/httpd/apache.conf.

Żeby przetestować CGI wystarczy że utworzymy plik o następującej treści:

#!/bin/sh
echo "Content-type: text/html\n\n"
echo "Hello, World."

 

a następnie umieścimy go w odpowiednim katalogu z nazwą np. cgi.sh, nadamy mu prawo wykonywalności i w przeglądarce podamy adres http://example.net/cgi-bin/cgi.sh. Możemy do tego użyć również testowych skryptów przychodzących z pakietem apache-cgi_test.

Jeśli zechcemy wskazać więcej katalogów w których pozwolimy uruchamiać aplikacje CGI (np. dla hostów wirtualnych) wystarczy, że do któregoś z plików konfiguracji dodamy odpowiednio skonfigurowaną opcję ScriptAlias np.:

ScriptAlias /cgi-bin/ "/home/users/jan/cgi-bin/"

 

Ze względów bezpieczeństwa autorzy Apache zalecają by taki katalog leżał poza ścieżką wskazaną w opcji DocumentRoot.

Security Socket Layer (SSL)

Mechanizm ten wykorzystuje się w serwisach wymagających od użytkownika autoryzacji. Najbardziej typowymi aplikacjami tego typu są różnego rodzaju klienci poczty. SSL zapewnia szyfrowany kanał dla informacji przepływającej od użytkownika do serwera. Dzięki temu niemożliwe jest podsłuchanie hasła. UWAGA! Jeden certyfikat SSL może zostać przypisany tylko dla jednego adresu IP.

Konfigurację zaczynamy od zainstalowania pakietu apache-mod_ssl. W wyniku instalacji utworzony zostanie plik /etc/httpd/httpd.conf/40_mod_ssl.conf. Zanim zaczniemy go konfigurować należy wygenerować certyfikaty. Służy do tego polecenie openssl. Program ten znajduje się w pakiecie openssl-tools.

# openssl genrsa -out /etc/httpd/ssl/apache.key 1024

W wyniku tego polecenia zostanie utworzony plik apache.key który posłuży do tworzenia certyfikatu. Robimy to w następujacy sposób.

# openssl req -new -x509 -days 365 -key /etc/httpd/ssl/apache.key \
     -out /etc/httpd/ssl/apache.crt

Proces tworzenia certyfikatu będzie wymagał podania kilku informacji. Zostaniesz o nie poproszony trakcie jego trwania.

Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Województwo
Locality Name (eg, city) []:Miasto
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Firma
Organizational Unit Name (eg, section) []:Web Server
Common Name (eg, YOUR name) []:example.net
Email Address []:root@example.net

Pola, które widzisz w powyższym przykładzie należy wypełnić zgodnie z tym jak zostało to przedstawione. W przypadku, kiedy serwer jest prywatną własnością i nie należy do żadnej firmy, w polu Organization Name możesz wpisać imię i nazwisko. Para plików: klucz oraz certyfikat powinny mieć takie uprawnienia, aby użytkownik http mógł je odczytywać.

Możemy teraz wyedytować plik /etc/httpd/httpd.conf/40_mod_ssl.conf. Pośród szeregu opcji interesuje nas w zasadzie tylko konfiguracja katalogu, do którego połączenie będzie szyfrowane oraz ścieżki do plików z kluczem oraz certyfikatem. Musimy odnaleźć początek sekcji o nazwie VirtualHost.

<VirtualHost _default_:443>
        DocumentRoot "/home/services/httpd/html/webmail"
        ServerName mail.example.net:443
        ServerAdmin root@example.net
        ErrorLog /var/log/httpd/error_log
        TransferLog /var/log/httpd/access_log

Jak widać jej początek nie różni się niczym od konfiguracji VirtualHosts. Zwróć uwagę na opcję ServerName. Powinna ona kończyć się ciągiem :443 który oznacza port na którym ma nasłuchiwać demon. Przechodzimy dalej i zmieniamy takie opcje jak SSLCertificateFile oraz SSLCertificateKeyFile.

SSLCertificateFile /etc/httpd/ssl/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl/apache.key

Podajemy tutaj ścieżki do plików, które wygenerowaliśmy w poprzednim etapie.

Po zapisaniu i zakończeniu edycji pliku restartujemy Apache, aby nasze zmiany odniosły skutek. Aby nawiązać połączenie szyfrowane z webmailem należy w przeglądarce wpisać adres https://example.net/webmail. Aby ustanowić połączenie szyfrowane i za każdym razem nie wpisywać https://, powinieneś użyć mechanizmu vhosts. Stwórz katalog /home/services/httpd/html/mail dla którego zrobisz wpis w pliku 20_mod_vhost_alias.conf. Czyli zgodnie z tym czego już się dowiedziałeś, robisz wpis w pliku strefy domeny oraz konfigurujesz apache. Natomiast w katalogu /home/services/httpd/html/mail tworzysz plik o nazwie index.php z zawartością taką jak w przykładzie.

<?php
                                                                                                     
/**
* index.php -- Displays the main frameset
*
* Copyright (c) 1999-2002 The SquirrelMail Project Team
* Licensed under the GNU GPL. For full terms see the file COPYING.
*
* Redirects to the login page.
*
* $Id: index.php,v 1.13 2002/02/19 15:05:03 philippe_mingo Exp $
*/
                                                                                                     
 header("Location: https://poczta.example.net\n\n");
 exit();
                                                                                                     
?>

 

 

Oczywiście domena, która jest podana na listingu musi odnosić się do vhosta z opcją DocumentRoot ustawioną na /home/services/httpd/html/mail.

Indeksowana zawartość katalogu

Jest to bardzo przydatna funkcja, pozwalająca w łatwy sposób udostępnić zawartość katalogu na serwerze. Aby umożliwić indeksowanie musimy zainstalować moduł apache-mod_autoindex.

poldek -i apache-mod_autoindex

 

Aby uruchomić indeksy musimy włączyć opcję Indexes. W domyślnej konfiguracji, Apache ma włączone indeksy dla wszystkich podkatalogów wewnątrz /home/services/httpd/html (w pliku 10_common.conf). Jeśli ustawiliśmy inaczej to musimy włączać tą opcję dla każdego z katalogów osobno np.:

 

<Directory /home/services/httpd/html/katalog>
        Options Indexes
</Directory>

 

Opcja nie zadziała wtedy, kiedy zainstalowaliśmy moduł apache-mod_dir i w katalogu znajduje się plik określony przez DirectoryIndex.

Uwagi

Po każdej zmianie konfiguracji w katalogu /etc/httpd/httpd.conf konieczne jest przeładowanie demona, aby na nowo odczytał swoje pliki konfiguracji. Możemy użyć w tym celu odpowiedniego wywołania rc-skryptu:

# service httpd restart

 

Jeśli będziemy modyfikować konfigurację działającego serwera produkcyjnego, to dobrą praktyką jest wcześniejsze użycie programu apachectl z pakietu apache-tools do sprawdzenia poprawności składni plików konfiguracji:

 

# apachectl configtest
Syntax OK

Na szczególną uwagę zasługują parametry rc-skryptu: reload|force-reload|graceful np.:

# service httpd reload

Użycie któregoś z nich wywołuje "łagodny" restart serwera (graceful restart), który pozwala dokończyć wykonywane prace przez procesy. Dzięki temu restart nie jest odczuwalny przez klientów. Parametry te mają jeszcze jedną ważną zaletę, wywołanie ich powoduje sprawdzenie konfiguracji serwera przed rozpoczęciem restartu, dzięki czemu nie musimy do tego używać programu apachectl.  się według prostej zasady. Po pierwsze relacyjna baza danych. Po drugie przetwarzanie rekordów bazy według określonych reguł, np. przepisów prawnych. Ostatni etap, to produkcja wyników i publikowanie ich w formie dokumentów. Wystarczy uważnie popatrzeć, a znajdziemy zastosowania, które ułatwią nam codzienne zadania.