LAMP jest to zestaw oprogramowania typu open source stanowiący popularną platformę serwerową dynamicznych stron WWW:
Platforma LAMP jest idealną bazą do stawiania różnego rodzaju systemów CMS (Content Management Systems), takich jak MediaWiki, Joomla, Wordpress czy Drupal.
Celem zajęć będzie zainstalowanie i skonfigurowanie platformy LAMP w wersji Apache+MySQL+PHP. Następnie, w ramach przetestowania konfiguracji, postawimy prosty system zarządzania treścią (CMS).
Apache to wieloplatformowy serwer WWW na licencji wolnego oprogramowania. Jest najszerzej stosowanym serwerem HTTP w Internecie.
Drugim bardzo popularnym serwerem HTTP na rynku jest nginx. Decyzja, który z serwerów wykorzystać w konkretnym przypadku wymaga zawsze dokładnej oceny. Przykładowe instrukcje do instalacji serwera nginx znajdują się tutaj: Instalacja serwera nginx.
Zanim zaczniesz cokolwiek instalować:
apt-get update
oraz ewentualnie apt-get upgrade
Włączyć przeglądarkę i przejść do adresu http://localhost/ . Nie powinno się nic wyświetlić.
Następnie należy zainstalować paczkę apache2 i przetestować czy działa: odświerzyć stronę. Powinna pojawić się strona Apache2 Debian Default Page.
Strona serwowana w tym momencie przez nasz komputer znajduje się w katalogu /var/www/html/ (index.html). Proszę wejść do tego katalogu i stworzyć wewnątrz plik tekstowy foo.html z dowloną treścią (np. “Ala ma kota”). Plik powinien zostać poprawnie wyświetlony przez przeglądarkę po wpisaniu http://localhost/foo.html. Podobnie, po wpisaniu adresu IP komputera na którym uruchomiony jest serwer np. http://194.29.175.132/foo.html możemy oglądać zawartość strony na zewnątrz.
Ponieważ jest to folder systemowy, należałoby rozpocząć od ustawienia odpowiednich uprawnień:
sudo chown -R $USER:$USER /var/www/example.com
sudo chmod -R 755 /var/www
Stwórz plik tekstowy index.html zawierający dowolną frazę.
Tworzenie wirtualnego hosta (Virtual Host)
W ogólności na jednym serwerze WWW może znajdować się więcej niż jedna strona (domena). Takie pojedyncze strony nazwyane są wirtualnymi hostami Virtual Hosts. Tworzy się je oraz konfiguruje w katalogach platformy apache2, mianowicie /etc/apache2. Najważniejsze elementy konfiguracji apache2:
By skonfigurować wirtualny host najłatwiej jest skopiować domyślny plik konfiguracyjny 000-default.conf znajdujący się w katalogu sites-avaliable. Polecane jest nadanie mu nazwy odpowiadającej nazwie domeny np example.com.conf. Nowy plik musi się kończyć rozszerzeniem *.conf!
Następnie należy go odpowiednio zmodyfikować:
Odkomentować i zmodyfikować linijkę:
ServerName http://www.example.com
Zmienić ścieżkę w DocumentRoot:
DocumentRoot /var/www/example.com
Dodaj linijkę zawierającą alias:
ServerAlias example.com
Zapisz i wyjdź.
Ostatnim krokiem jest aktywacja hosta oraz restart serwera apache2.
Dowiązanie symboliczne jest to specjalny rodzaj pliku, który wskazuje (odwołując się za pomocą nazwy/ścieżki) na dowolny inny plik lub katalog, który może nawet w danej chwili nie istnieć; odwołanie jest niewidoczne na poziomie aplikacji - dowiązanie symboliczne jest traktowany jak zwykły plik lub katalog.
Note
Do stworzenia dowiązania symbolicznego służy komenda ln -s [CEL] [NAZWA_LINKU].
Alternatywnie można użyć polecenia: sudo a2ensite example.com.
Restart serwera:
service apache2 restart
Domyślną stroną www wyświetlaną przez serwer po wpisaniu http://localhost jest strona określona przez pierwszy (alfabetycznie) plik konfiguracyjny znajdujący się w katalogu sites-enabled.
Plik hosts służy do mapowania (przypisywania) domen internetowych do konkretnych adresów IP. Kiedyś używany powszechnie, w dzisiejszych czasach zwykle zastąpiony przez serwery DNS. Jest to zwykły tekstowy plik, na linuksach znjdujący się w /etc/hosts.
Note
Jeśli domena jest wpisana w /etc/hosts, zawsze będze używany IP z tego pliku, a komputer w ogóle nie wykona zapytania DNS.
Pliki hosts są używane do dziś, np. w małych firmach, które nie chcą stawiać firmowych serwerów DNS.
Należy zmodyfikować plik /etc/hosts w ten sposób, by dodać nowe mapowanie:
127.0.1.2 example.com
Należy wpisać w pasku przeglądarki example.com (a właściwie w Państwa przypadku: nazwisko.net) i sprawdzić, czy uzyskujemy utworzoną stronę www.
MySQL jest to wolnodostępny system zarządzania relacyjnymi bazami danych.
Należy zainstalować paczki mysql-server i mysql-client
Uwaga, przy instalacji serwera zostanie poproszone o hasło roota dla MySQLa. Należy zapamiętać ustawione hasło!
Zadaniem jest stworzenie bazy danych MojaBaza, oraz użytkownika admin, który będzie posiadał pełne uprawnienia dostępu do niej.
Zapoznajmy się teraz z działaniem MySQL:
Logowanie do bazy danych (dla użytkownika root).
mysql -u root -p
Wylistowanie wszystkich dostępnych baz danych:
SHOW DATABASES;
Stworzenie nowej bazy danych:
CREATE DATABASE nazwa;
Stworzenie nowego użytkownika:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
Nadawanie uprawnień użytkownikom:
GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;
Należy nadać uprawnienia ALL PRIVILEGES nowo stworzonemu użytkownikowi dla nowo utworzonej bazy danych oraz wszystkich znajdujących się w jej wnętrzu tabel (należy użyć *):
GRANT ALL PRIVILEGES ON nazwa. * TO 'newuser'@'localhost';
PHP to skryptowy język programowania zaprojektowany do generowania stron internetowych i budowania aplikacji webowych w czasie rzeczywistnym. Można go umieszczać razem z kodem html.
Należy zainstalować paczki php5, php-pear, php5-mysql.
Następnie należy stworzyć plik info.php oraz umieścić go w katalogu naszej uprzednio utworzonej strony www (hostowanej przez apache2). Plik powinien zawierać kilka linijek napisanych w języku PHP, np.:
<?php
echo "Ala ma kota";
phpinfo();
?>
Znaczniki <?php oraz ?> oznaczają początek oraz koniec skryptu PHP. Funkcja echo działa podobnie jak w języku bash, natomiast phpinfo() wypisuje informacje o systemie.
Na koniec zrestartuj serwer apache2. Sprawdź, czy strona wyświetlana jest poprawnie wchodząc na http://localhost/info.php
System zarządzania treścią (ang. Content Management System, CMS) jesto to oprogramowanie pozwalające na proste tworzenie oraz późniejszą aktualizację serwisu WWW, umożliwiające dalszą rozbudowę przez redakcyjny personel nietechniczny. Dodawane informacje zapisywane są w bazie danych (najczęściej MySQL), a sam system napisany jest zwykle w języku PHP.
Wordpress, najpopularniejszy CMS na świecie, zaprojektowany jest głównie do obsługi blogów. Jest darmowy i rozpowszechniony na licencji GNU. Jeśli interesują Cię inne CMS możesz zerknąć tutaj: http://jakicmswybrac.pl/ .
Protokół SMTP służy do wysłania wiadomości e-mail, przykładowa konwersacja SMTP wygląda tak:
EHLO gmail.com
250-mx.google.com at your service, [83.24.214.204]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
250-ENHANCEDSTATUSCODES
250 CHUNKING
AUTH LOGIN
334 VXNlcm5hbWU6
c2llY2lrb21wdXRlcm93ZXRlc3QyMDE0
334 UGFzc3dvcmQ6
redacted
235 2.7.0 Accepted
MAIL FROM: <siecikomputerowetest2014@gmail.com>
250 2.1.0 OK g9sm392098wja.39 - gsmtp
RCPT TO: <jbzdak@gmail.com>
250 2.1.5 OK g9sm392098wja.39 - gsmtp
DATA
354 Go ahead g9sm392098wja.39 - gsmtp
Subject:Test
Tekst Test
.
Wysyłanie wiadomości e-mail dokonuje się za pomocą protokołu tekstowego.
Konwersacja z serwerem zaczyna się od prośby o funkcojonalności serwera:
EHLO gmail.com
Note
To nie jest literówka, ale skrót od Extended HeLlO.
Serwer odpowiada listą funkcjonalności, w tym że można logować się na kilka sposobów:
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
Klient wybiera najprostszą metodę logowania:
AUTH LOGIN
Note
Mamy tu typowy przykład negocjacji w protokole, serwer podaje jakie rodzaje autoryzacji są wspierane, a klient wybiera tego zestawu, ten rodzaj który mu odpowiada.
Serwer odpowiada:
334 VXNlcm5hbWU6
Status 334 jest informacyjny i jest prośbą o nazwę użytkownika:
c2llY2lrb21wdXRlcm93ZXRlc3QyMDE0
Następnie serwer prosi o hasło a klient je podaje:
334 UGFzc3dvcmQ6
redacted
Note
Wiadomości które są częścią autoryzacji wyglądają na “zaszyfrowane” jednak wcale takie nie są. Są one zakodowane w kodowaniu base64:
echo -n VXNlcm5hbWU6 | base64 -d
Username:
A login to:
echo -n c2llY2lrb21wdXRlcm93ZXRlc3QyMDE0 | base64 -d
siecikomputerowetest2014
Po zalogowaniu możemy wysyłać wiadomość, do wysłania wiadomości potrzebne są takie komendy:
MAIL FROM: <siecikomputerowetest2014@gmail.com>
RCPT TO: <jbzdak@gmail.com>
DATA
Subject:Test
Tekst Test
.
Gdzie linia z . kończy wiadomość.
SMTP ma zasadniczą wadę: w zasadzie nie pozwala na potwierdzenie tożsamości nadawcy. Ciągle niektóre serwery pozwalają na przeprowadzenie takiej konwersacji:
MAIL FROM: <prezydent@prezydent.pl>
RCPT TO: <jbzdak@gmail.com>
DATA
Subject:Order
Za wielkie zasługi dydaktyczne otrzymujesz order.
.
Taka wiadomość zostanie często potraktowana jako spam, ale ma niezłą szansę na dojście do obiorcy.
Note
Najprawdopodobniej typowi dostawczy poczty (np. gmail) nie pozwalają na wysłanie poczty z innego adresu niż ten zalogowany.
Przykład przesłanej wiadomości:
Delivered-To: jbzdak@gmail.com
Received: by 10.112.204.162 with SMTP id kz2csp980668lbc;
Sat, 12 Dec 2015 11:36:32 -0800 (PST)
X-Received: by 10.112.36.130 with SMTP id q2mr10069551lbj.116.1449948992830;
Sat, 12 Dec 2015 11:36:32 -0800 (PST)
Return-Path: <prezydent@prezydent.pl>
Received: from mars.if.pw.edu.pl (mars.if.pw.edu.pl. [194.29.174.13])
by mx.google.com with ESMTPS id r141si13413887lfg.219.2015.12.12.11.36.32
for <jbzdak@gmail.com>
(version=TLS1 cipher=AES128-SHA bits=128/128);
Sat, 12 Dec 2015 11:36:32 -0800 (PST)
Received-SPF: fail (google.com: domain of prezydent@prezydent.pl does not designate 194.29.174.13 as permitted sender) client-ip=194.29.174.13;
Authentication-Results: mx.google.com;
spf=fail (google.com: domain of prezydent@prezydent.pl does not designate 194.29.174.13 as permitted sender) smtp.mailfrom=prezydent@prezydent.pl
Received: from mars.if.pw.edu.pl (dkd82.neoplus.adsl.tpnet.pl [83.24.7.82])
(authenticated bits=0)
by mars.if.pw.edu.pl (8.13.1/8.13.1) with ESMTP id tBCJZH7d004469
(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO)
for jbzdak@gmail.com; Sat, 12 Dec 2015 20:36:04 +0100
Date: Sat, 12 Dec 2015 20:35:17 +0100
From: prezydent@prezydent.pl
Message-Id: <201512121936.tBCJZH7d004469@mars.if.pw.edu.pl>
Subject: PowoĹanie
(...)
Idziesz do wojska!
Wiadomość zdaje się być wysłana przez: prezydent@prezydent.pl, tak twierdzi nagłowek From::
From: prezydent@prezydent.pl
Możemy sprawdzić że coś jest z wiadomością nie tak patrząc przez jakie serwery poczta przeszła, pierwszym jest:
Received: from mars.if.pw.edu.pl (mars.if.pw.edu.pl. [194.29.174.13])
by mx.google.com with ESMTPS id r141si13413887lfg.219.2015.12.12.11.36.32
for <jbzdak@gmail.com>
(version=TLS1 cipher=AES128-SHA bits=128/128);
Sat, 12 Dec 2015 11:36:32 -0800 (PST)
Na zdrowy rozum okazuje się, że mejle z domeny prezydent.pl nie powinny wychodzić z adresu mars.if.pw.edu.pl.
Note
Bezpieczeństwo poczty znacznie wzrosło od czasu wprowadzenia mechanizmu SPF, który pozwala na identyfikację wiadomości wysłanych ze złych serwerów:
Received-SPF: fail (google.com: domain of prezydent@prezydent.pl does not designate 194.29.174.13 as permitted sender) client-ip=194.29.174.13;
Za pomocą programu telnet, lub openssl spróbować wysłać pocztę ze swojej poczty (lub poczty pokazanej przez prowadzącego).
By wysłać pocztę musicie:
Jeśli poczta używa szyfrowania (SSL/TLS) do uzyskania połączenia konieczne jest użycie programu openssl, by połączyć się z serwerami gmaila należy wykonać:
openssl s_client -quiet -connect host:port -crlf
W przypadku braku szfrowania:
telnet domena port
By “ukryć” za pomocą base64 hasło i login można użyć programu base64, np:
echo -n username | base64
Po wykonaniu wszystkich operacji dobrze jest usunąć historię basha:
rm ~/.bash_history