Budujeme web server III.

25.02.2011 22:32 | Články | Dare_devil
V minulom dieli sme konfigurovali Lighttpd, prešli sme si jeho základnou aj pokročilejšou konfiguráciou. Teraz sa však ideme zaoberať Apache HTTP Serverom, ktorý je tak často nasadzovaný, že sa mu budeme venovať viacero dielov za sebou pre podrobnú konfiguráciu.

Apache HTTP Server

Kedže sme si Apache HTTP Server predstavili v prvom dieli našeho seriálu, nebudeme sa jeho opisom ďalej zaoberať a prejdeme rovno na inštaláciu. Taktiež sa už nebudeme zaoberať inštaláciou MySQL serveru, nakoľko ten už máme po prvom dieli seriálu nainštalovaný.

Dnešný diel môžme spokojne nazvať ako ,,Jemný úvod do Apache a oboznámenie sa s jeho štruktúrou.'' Ako sami uvidíte, obsahovo tento diel nie je rozsiahly, no ponúka základné vedomosti a postupy, na ktoré budeme nadväzovať v nasledujúcich častiach, ktoré budú o to rozsiahlejšie.

Poďme však ku samotnej inštalácii. Inštaláciu Apache HTTP Serveru prevedieme následovne:

Debian:
# aptitude install apache2

Arch Linux:
# pacman -S apache

Fedora:
# yum install httpd

Týmto by sme mali Apache nainštalovaný a bežiaci. Jeho činnosť si môžeme overiť:
root@debian:/var/www# netstat -tap | grep apache2
tcp6       0      0 [::]:www                [::]:*                  LISTEN      17172/apache2   

V nasledujúcom zozname nájdete v poradí: Koreňový web adresár, Adresu konfiguračného súboru a príkaz na základné riadenie Apache serveru

Debian:
1. /var/www/
2. /etc/apache2/apache2.conf
3. /etc/init.d/apache2 start|stop|restart


Arch Linux:
1. /srv/www/
2. /etc/httpd/conf/httpd.conf
3. /etc/rc.d/httpd start|stop|restart


Fedora:
1. /srv/http/
2. /etc/httpd/conf/httpd.conf
3. /etc/init.d/httpd start|stop|restart


Je vhodné, aby ste si tak ako sme to robili v predchádzajúcom dieli nastavili prístupové práva vytvorením novej používateľskej skupiny. Nakoľko sme sa tejto téme dostatočne podrobne venovali pri nastavovani Lighttpd a postup je rovnaký, budeme pokračovať a považovať túto časť za zvládnutú a vykonanú. Taktiež odporúčam vykonať zálohu pôvodného konfiguračného súboru, aby sme sa k nemu mohli kedykoľvek v prípade kolízie vrátiť. Nie je nič horšie ako nefunkčný server bez záložného správneho konfiguračného súboru.

Každý používateľ "adminom"

Aj v dnešnej dobe sa v množstve firiem stretávame s potrebou sieťového zdielania určitých prvkov/súborov medzi zamestnancami, no typickejším príkladom bol/je univerzitný život, kde každá/každý študentka/študent mala/mal na serveri prístupné používateľské konto s možnosťou hostovať súbory na verejných sieťach. Zabezpečil sa tak priestor pre študentov na ich sebarealizáciu sa ale zároveň sa im tak poskytol priestor pre prispievanie svojimi prácami ku vývoju vedy a techniky. Najčastejšie sa zdielala zložka /home/*/public_html na adrese http://server/~*/. Vo všetkých spomenutých distribúciách je to pomerne jednoduché.

Debian

root@debian:/var/www# cd /etc/apache2/mods-enabled/

# Overíme si, či už modul userdir nie je načítaný
root@debian:/etc/apache2/mods-enabled# ls -laF | grep userdir

# Vytvoríme symbolické odkazy, čím aktivujeme činnosť modulov
root@debian:/etc/apache2/mods-enabled# ln -s ../mods-available/userdir.conf
root@debian:/etc/apache2/mods-enabled# ln -s ../mods-available/userdir.load

# Znova overíme správne zavedenie modulov
root@debian:/etc/apache2/mods-enabled# ls -laF | grep userdir
lrwxrwxrwx 1 root root 30 Feb 18 15:19 userdir.conf -> ../mods-available/userdir.conf
lrwxrwxrwx 1 root root 30 Feb 18 15:19 userdir.load -> ../mods-available/userdir.load

# Reštartujeme apache
root@debian:/etc/apache2/mods-enabled# apachectl restart

Otestovať to môžme veľmi jednoducho, a to vytvorením už spomínanej zložky a následným sieťovým testom

monika@debian:~$ mkdir public_html
monika@debian:~$ cd public_html/
monika@debian:~/public_html$ cat >> index.html << EOF
> <h1>Stránka Moniky!</h1>
> EOF
monika@debian:~/public_html$

Teraz už môžeme overiť Monikinu účasť v sieti na adrese http://ip-serveru/~monika/

Arch Linux

Tu je to o niečo jednoduchšie, nakoľko Apache nainštalovaný na Arch Linuxe v základnej inštalácii podporuje ~/public_html zložky aj s ich umiestnením na sieti. Ak si však neželáte túto službu, zakážte ju. V prípade, že nepredpokladáte potrebu ~/public_html zložiek na serveri, zakážte túto službu a v prípade potreby ju povolte. Nenechávajte túto časť bez povšimnutia a dbajte na jej správne použitie.

Povolenie/blokovanie tejto služby sa nastavuje v konfiguračnom súbore pridaním/zakomentovaním riadku:
Include conf/extra/httpd-userdir.conf


Fedora

Čo sa týka konfigurácie Fedory, tá nie je o nič zložitejšia. Otvorme /etc/httpd/conf.d/userdir.conf a zaistime, aby bol obsah tohto súboru približne takýto:
<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
UserDir enabled

#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disabled" line above, and uncomment
# the following line instead:
#
UserDir public_html

</IfModule>

<Directory /home/*/public_html>
Options Indexes Includes FollowSymLinks

AllowOverride All
Allow from all

Order deny,allow
</Directory>


Konfigurácia samotného modulu Userdir nie je vôbec zložitá. V prípade, že potrebujeme povoliť používať public_html len niektorým používateľom, vytvoríme pravidlo:
UserDir disabled
UserDir enabled monika peter vlado

Taktiež sa môže stať, že potrebujeme iba určitým používateľom používanie public_html zakázať. V tom prípade volíme:
UserDir enabled
UserDir disabled peter

Všetky tieto zmeny robíme v *.conf konfiguračných súboroch userdir modulu, ktorých adresy vyčítate pár riadkov vyššie.
Nezabudnime pre aplikovanie zmeny reštartovať Apache server.

CGI / Python / Perl

Pristúpme však bližšie ku funkčnému serveru. Začnime podporou CGI skriptov.
CGI skripty aj v dnešnej dobe nájdu uplatnenie aj napriek tomu, že ide o pomerne zanedbanú technológiu. Mnoho vecí Perl / Python a i. dokážu urobiť oveľa rýchlejšie a efektívnejšie ako samotné PHP a preto netreba na tieto možnosti zanevrieť. Veľkým problémom však ostáva nedostatočne kladený dôraz na bezpečnosť a preto odporúčam, aby ste volili cestu bezpečnejšiu, tj. ohradiť možnosť spúšťania CGI skriptov iba v zložke cgi-bin/. Vytvorenie podpory pre cgi skripty je samo o sebe jednoduché.

Prvým krokom je inštalácia konkrétneho modulu, či už pre Perl alebo pre Python.

Debian:
# aptitude install perl libapache2-mod-perl2 python libapache2-mod-python
# apachectl restart

Tým je inštalácia a zavedenie modulov kompletné. Pre overenie si môžme skontrolovať existenciu symbolických odkazov v zložke /etc/apache2/mods-enabled ( a samozrejme, v prípade potreby ich vytvoriť ).

root@debian:/etc/apache2/mods-enabled# ls -laF | egrep "python|perl|php"
lrwxrwxrwx 1 root root   27 Feb 18 15:15 perl.load -> ../mods-available/perl.load
lrwxrwxrwx 1 root root   27 Feb 19 12:15 php5.conf -> ../mods-available/php5.conf
lrwxrwxrwx 1 root root   27 Feb 19 12:15 php5.load -> ../mods-available/php5.load
lrwxrwxrwx 1 root root   29 Feb 19 12:15 python.load -> ../mods-available/python.load

Podľa všetkého by mala byť podpora v CGI skriptov v Arch Linuxe a Fedore nainštalovaná priamo s nainštalovaným Apache.

Nasleduje editácia konfiguračného súboru na adrese:

Debian:
/etc/apache2/sites-enabled/000-default

Arch Linux:
/etc/httpd/conf/httpd.conf

Fedora:
/etc/httpd/conf/httpd.conf

Ak aj napriek bezpečnostným rizikám hodláme povoliť používanie CGI skriptov na celom web serveri a nie len v zložke cgi-bin/, postupujme podľa tejto predlohy: ( pridané riadky sú zvýraznené )

        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                Options +ExecCGI
                AddHandler cgi-script cgi pl py
        </Directory>

Ak sme však nedôverčiví a hodláme sa zaoberať bezpečnosťou, môžeme vytvoriť jednoduché pravidlo podľa predlohy. Použitie je napríklad takéto:

        <Directory /var/www/*/cgi-bin>
                Options +ExecCGI
                AddHandler cgi-script cgi pl py
        </Directory>

        <Directory /home/*/public_html/cgi-bin>
                Options +ExecCGI
                AddHandler cgi-script cgi pl py
        </Directory>

Nasleduje reštart Apache Serveru a vytvorenie CGI skriptu pre test

Perl
#!/usr/bin/perl
print "Content-Type: text/plain", "\n\n";
print "Ahoj!!", "\n";

Python
#!/usr/bin/python
print "Content-type: text/html\r\n\r\n"
print "Ahoj!!!"

Skript uložíme do koreňového adresára ( alebo do svojej public_html zložky ) a spúšťame na adrese. Týmto by bola podpora CGI skriptov vyriešená. Presuňme sa však ku podpore PHP, ktorá je často pre web adminov atraktívnejšia.

PHP
Inštalácia PHP je taktiež veľmi jednoduchá. Funguje ( tak isto ako ostatné časti ) na princípe zásuvného modulu pre Apache

Debian:
# aptitude install php5 php5-mysql libapache2-mod-php5

Arch Linux:
# pacman -S php php-apache

Fedora:
# yum install php php-mysql

Týmto by sme však dnešný diel o Apache skončili. Posledným krokom sme si nainštalovali do systému PHP5 a sme tak pripravení na jeho podrobnú konfiguráciu, ktorá nás čaká v dieli, ktorý výjde o pár dní. Téma ktorá nasleduje je veľmi obsiahla a preto je jednoduchšie rozdeliť to a venovať téme samotnú časť, ako vydať také množstvo informácii po kope.

Čo nás ešte čaká k téme ,,Apache'':

  • Podrobná konfigurácia PHP
  • Nastavenie virtual hostov
  • Mod_rewrite a jemný úvod do .htaccess
  • SSL
  • Java tomcat
  • Logovanie a ošetrovanie
  • Základné aj pokročilé bezpečnostné opatrenia
  • Ochrana pred DDoS útokmi
  • Suhosin
  • a ďalšie...

Dúfam že sa vám aj dnešný "light" úvod do Apache páčil a verím v to, že sa stretneme v ďalších dieloch pokračovania, ktoré budú o to zaujímavejšie a pútavejšie.

Čo sme sa dnes naučili:
  • Nainštalovať Apache HTTP server
  • Sprístupniť používateľom ~/public_html zložku pre bežné úkony
  • Rozbehať podporu CGI skriptov
  • Nainštalovať PHP5 do systému

Za opravu ďakujem používateľovi KLFMANiK

    • a2enmod 27.02.2011 | 16:04
      KLFMANiK   Návštevník
      v Debiane (a mozno aj pri inych distribuciach) nam pri nastavovani a zakazovani apache2 modulov pomahaju prikazy a2enmod a a2dismod (podobne pri konfiguracii virtualhostov a2ensite a a2dissite)

      a mozem sa spytat, preco nepouzivate /etc/init.d/apache2 start|stop|... ??? tam je zahrnute aj pouzitie /etc/default/apache2 a roznych premennych prostredia spolu s apache2ctl, ktore sa potom automaticky pouziju napr. po restarte, takze ja by odporucil pouzit presne to, co pouzije moj system, inac sa mi to iba pri pouziti apache2ctl bude spravat inac bez tych nastavenych premennych
      • Re: a2enmod 27.02.2011 | 16:16
        Avatar Dare_devil Debian, OpenSuse  Používateľ
        Predpokladal som ze tak, ako je a2enmod a i., tak nam aj apachectl iba zjednodusuje pracu, netusim som ze tam je problem s /etc/default/apache2 . Vdaka za opravu, zmeny zahrniem
        There is no flag large enough to cover the shame of killing innocent people
    • Ochrana pred DDoS útokmi 27.02.2011 | 18:19
      Avatar Tomáš Srnka Darwin Kernel Version 9.8.0  Administrátor
      Ochrana pred DDoS útokmi = mod_dosevasive?
      4c 11 42 c0 05 00 00 00 c7 05 50 11 42 c0 2f cc 31 c0
      • Re: Ochrana pred DDoS útokmi 27.02.2011 | 18:25
        Avatar Dare_devil Debian, OpenSuse  Používateľ
        mod_evasive
        There is no flag large enough to cover the shame of killing innocent people
    • Dalsia cast 28.02.2011 | 10:02
      Avatar Dare_devil Debian, OpenSuse  Používateľ
      Dalsia cast serialu sa oneskori, nastali komplikacie s particiami ktore bolo nutne razantne riesit, coho vysledkom bol omylom zmazany cely serial z disku
      There is no flag large enough to cover the shame of killing innocent people
      • Re: Dalsia cast 01.03.2011 | 11:46
        Avatar dusan Arch Linux + Openbox  Používateľ
        Zalohovat, zalohovat, zalohovat...
        • Re: Dalsia cast 01.03.2011 | 12:04
          Avatar Dare_devil Debian, OpenSuse  Používateľ
          Lepsie povedane pred tym nez nieco robis poriadne sa vyspi :)
          There is no flag large enough to cover the shame of killing innocent people
    • apache2 vs httpd 18.03.2011 | 09:54
      amater   Návštevník
      chcel som opýtať aký je rozdiel medzi tým že si nainštalujem na debiane

      apt-get install apache2 alebo si stiahnem z netu na stránke apache.org zdrojový kód tam dám:

      ./configure && make && make install

      jediny rozdiel som zatial zbadal že sú inak pooznačované niektoré aj konfiguračné súbory

      Je tam aj iný rozdiel?? a celkovo myslím aj iné balíky či je rozdiel medzi apt-get instal a vlastnou kompilaciou a nainštalovaním.

      Mimochodom serial sa mi velmi paci a pokracuj ďalej som fanúšik
      • Re: apache2 vs httpd 24.03.2011 | 14:31
        Avatar Tomáš Srnka Darwin Kernel Version 9.8.0  Administrátor
        Rozdiel je v tom, ze sa o ten program musis sam starat. Vzdy ked vyjde nova verzia alebo oprava, tak si ho sam musis aktualizovat a sam si musis riesit zavislosti programov.

        Kdezto debian balickovy system toto riesi akoze za teba.
        4c 11 42 c0 05 00 00 00 c7 05 50 11 42 c0 2f cc 31 c0
        • Re: apache2 vs httpd 02.10.2011 | 23:36
          tomy   Návštevník
          škoda, že to už nepokračuje - v mnohých prípadoch som samouk a lepšie by bolo, ak by to niekto viedol

          • Re: apache2 vs httpd 25.10.2011 | 00:34
            Avatar Dare_devil Debian, OpenSuse  Používateľ
            Bude to pokracovat, ale uz nie tu.. Coming soon
            There is no flag large enough to cover the shame of killing innocent people
            • Re: apache2 vs httpd 28.03.2012 | 21:20
              xatan   Návštevník
              a kde to bude pokračovať?
              • Re: apache2 vs httpd 29.03.2012 | 19:54
                Avatar Dare_devil Debian, OpenSuse  Používateľ
                uz nikde, neostal na to cas ani prostriedky
                There is no flag large enough to cover the shame of killing innocent people
    • mysql? 22.02.2012 | 21:19
      miiisa   Návštevník
      da sa daco spravit take,aby kazdy uzivatel mohol vytvorit vlastnu db a spravovat ? ako napr. tu public zlozku?