Ján Fečík (JANOF)

osobná stránka · blog · galéria

Dátum: dnes je nedeľa, 20. apríla 2014
Čas: 00:31:38, 1397946698, @980
Meniny má: Marcel
IP adresa: 54.204.163.26 / US

10 °C

dnes
7 °C / 19 °C

nedeľa
8 °C / 16 °C

pondelok
8 °C / 18 °C

utorok
8 °C / 19 °C

Inštalácia FreeBSD + Apache, PHP, MySQL

Čo to vlastne FreeBSD je? FreeBSD je unixový operačný systém, ktorý vznikol z BSD verzie Unixu vyvinutého na Kalifornskej Univerzite v Berkeley. FreeBSD je pomerne spoľahlivý a robustný operačný systém, obsahuje podporu pre širokú škálu hardvérových platforiem. Je možné ho prevádzkovať na architektúre Intel i386 (vrátane Pentium a Athlon), amd64 (Opteron, Athlon 64 a EM64T), Alpha/AXP, IA-64, PC-98 a UltraSPARC, podpora ďalších platforiem je vo vývoji. Poďme teda k samotnej inštalácii. Táto inštalácia je svojim spôsobom jednoduchá záležitosť a väčšina to určite zvládne.

Na stránkach FreeBSD, presnejšie tu si stiahneme image (32bit -> i386 / 64bit -> amd64). V tomto návode som zvolil presne FreeBSD 7.2-RELEASE-i386-bootonly.iso, keďže návod som robil pred pár rokmi, image napálime na CD a nabootujeme z neho. Následne po boote na nás vyskočí takáto obrazovka:Inštalácia FreeBSD + Apache, PHP, MySQLPočkajte na odpočet, alebo to môžete urýchliť stlačením klávesy enter.Inštalácia FreeBSD + Apache, PHP, MySQLVyberiete si krajinu a pokračujete ďalej.Inštalácia FreeBSD + Apache, PHP, MySQLZvolíte si Standard, ktorá sa odporúča. Predsa len sme začiatočníci a teda sa nebudeme púšťať do niečoho čomu zatiaľ nerozumieme.Inštalácia FreeBSD + Apache, PHP, MySQLNásledne sa nám spustí FDISK, kde alokujeme disk stlačením písmenka A a ukončíme písmenkom Q.Inštalácia FreeBSD + Apache, PHP, MySQLZvolíme si či chceme používať Boot Manager alebo nie, ak nie tak vyberieme možnosť Standard.Inštalácia FreeBSD + Apache, PHP, MySQLTu môžeme na vytvorenie použiť automatické nastavenie pomocou klávesy A ktoré nám disk rozdelí, alebo pomocou klávesy C si môžeme rozdeliť disk tak ako to uznáme za vhodné. Na pokračovanie v inštalácií je potrebné mať vytvorený SWAP a /. Keď sme hotový ukončíme klávesou Q.Inštalácia FreeBSD + Apache, PHP, MySQLTu si môžeme zvoliť čo chceme nainštalovať, osobne odporúčam ak sa jedna o server poslednú možnosť a to Minimal. Takto sa nám nainštaluje základné prevedenie FreeBSD a tým si zabezpečíme, že systém nebude obsahovať pre nás nepotrebné veci.Inštalácia FreeBSD + Apache, PHP, MySQLZvolíme si akým spôsobom stiahneme potrebné dáta, keďže sme použili FreeBSD 7.2-RELEASE-i386-bootonly.iso, tak použijeme buď FTP alebo FTP Passive. Ja som pri inštalácií zvolil FTP Passive.Inštalácia FreeBSD + Apache, PHP, MySQLVyberieme si odkiaľ chceme sťahovať potrebné dáta, primárne je nastavené ftp.freebsd.org, ale je tam aj Slovenská republika vďaka čomu budeme dáta sťahovať oveľa rýchlejšie.Inštalácia FreeBSD + Apache, PHP, MySQLTu si zvolíme sieťovú kartu, cez ktorú sme pripojený k internetu a nakonfigurujeme si sieť buď sami alebo zvolíte DHCP. Ja som zvolil DHCP.Inštalácia FreeBSD + Apache, PHP, MySQLTakto vyzerá nastavenie sieťovej karty.Inštalácia FreeBSD + Apache, PHP, MySQLInštalácia FreeBSD + Apache, PHP, MySQLInštalácia FreeBSD + Apache, PHP, MySQLPo stiahnutí nám inštalácia zagratuluje, že sme úspešne nainštalovali FreeBSD.

Ďalej sa nás inštalácia spýta na pár vecí, napríklad či bude daný stroj využívaný ako gateway, či chcete nakonfigurovať inetd, či chcete povoliť SSH login (tu zvoľte yes), či chcete nastaviť časové pásmo, či chcete aby mal systém podporu binárnych Linuxových aplikácií (ja som zvolil no, pokiaľ zvolíte yes, tak sa balík na podporu stiahne), ďalej môžete nastaviť myš pokiaľ ju chcete používať, taktiež sa spýta či chcete nainštalovať aplikácie na sprevádzkovanie napríklad web servera, tam by som tiež zvolil no a toto všetko si nainštaloval cez porty.Inštalácia FreeBSD + Apache, PHP, MySQLTu zvolíme yes pre vytvorenie klasického účtu a pomocou User si vytvoríme užívateľské konto, ktoré pridáme do skupiny wheel, čo nám zabezpečí to, že ak sa cez ssh pripojíme na náš systém z vonku, tak pomocou užívateľa v tejto skupine sa prihlásime cez príkaz su pod konto root. Je to viac menej ochrana konta root z vonku.Inštalácia FreeBSD + Apache, PHP, MySQLTu vidíte kam je potrebné skupinu wheel zadať.Inštalácia FreeBSD + Apache, PHP, MySQLZvolíme no a ukončíme inštaláciu pomocou Exit install. Počítač sa nám reštartuje a ak ste urobili všetko tak ako je v tomto obrázkovom manuále, tak sa vám zobrazí toto:Inštalácia FreeBSD + Apache, PHP, MySQLSystém máme teda nainštalovaný, blahoželám :-)

Ďalej si môžete stiahnuť porty (ktoré som vyššie spomínal) pomocou príkazu portsnap fetch extract odkiaľ budete všetko inštalovať. Porty nájdete potom v /usr/ports. Pomocou whereis nazovaplikacie môžete vyhľadať aplikácie (napr. irssi, mc, etc.), alebo cez:

cd /usr/ports
make search name="nazovaplikacie"


Je možné samozrejme použiť aj inštalovanie softvéru z bináriek, ale ja som skôr za inštaláciu zo zdrojákov a medzi nami som z bináriek ešte ani neskúšal nainštalovať nejaký softvér okrem serveru pre Unreal Tournament, ak mám pravdu povedať. Ak si chcete spojazdniť svoj web server tj. Apache, PHP, MySQL, phpMyAdmin, tak postupujte podľa inštrukcií v tomto článku ďalej.

Predpokladám, že máte už systém nainštalovaný, článok berte s rezervou a hlavne ho neberte ako nejaký profesionálny návod. Som len laik a mám to len ako hobby, takže sa dá niečo možno lepšie vyriešiť. Pomaly sa s FreeBSD učím a toto snáď pomôže aj iným.

Očakávam, že ak sa niekto pustíte do FreeBSD a chcete si spraviť vlastný web server, tak dúfam že čo to viete o Apache a jeho konfigurovaní a samozrejme aj niečo o FreeBSD, lebo ak by ste išli presne podľa tohto návodu, tak minimálne Apache určite nespustíte, keďže je potrebné jeho konfiguračný súbor nastaviť. Možno vám pomôže táto kniha o Apache. Toto som robil na verzii FreeBSD 7.2, čiže či vám to presne tak pôjde aj na nejakej staršej verzii nemôžem zaručiť.Inštalácia FreeBSD + Apache, PHP, MySQLPre inštalovanie a konfigurovanie týchto aplikácií je potrebné aby sme boli prihlásený ako root. Ak sa chystáte inštalovať cez ssh, tak defaultne má FreeBSD zablokovaný ssh prístup ako root. Čiže sa musíte prihlásiť ako užívateľ ktorý je v skupine wheel a cez príkaz su sa prihlásite ako root. Ďalej predpokladám, že ste správne nainštalovali FreeBSD a taktiež máte stiahnuté porty (tie stiahneme pomocou príkazu portsnap fetch extract, etc.) odkiaľ budeme všetko inštalovať. Pomocou whereis nazovaplikacie si môžete vyhľadať iné aplikácie ako irssi, mc, etc., alebo cez:

cd /usr/ports
make search name="nazovaplikacie"


MySQL
cd /usr/ports/databases/mysql50-server
make BUILD_OPTIMIZED=yes BUILD_STATIC=yes
make install clean


Do súboru /etc/rc.conf pridáme mysql_enable="YES" pre spustenie MySQL servera pri štarte systému. Pomocou /usr/local/etc/rc.d/mysql-server start spustíme MySQL server. Následne nastavíme heslo pre používateľa root: /usr/local/bin/mysqladmin -u root password ''tajneheslo''.

Apache
cd /usr/ports/www/apache22
make install clean


Do súboru /etc/rc.conf pridáme apache22_enable="YES" pre spustenie Apache pri štarte systému. Pri spustení môže nastať problém s accf_http, ja som ho vyriešil pomocou kldload accf_http. Pre zapnutie modulu pri štarte systému treba editovať /boot/loader.conf a pridať tam accf_http_load="YES". Taktiež sa mi stalo, že ak som spustil apache pomocou /usr/local/etc/rc.d/apache22 start a následne som pozrel jeho status /usr/local/etc/rc.d/apache22 status, tak nebežal. Pričom pri štarte vypísalo, že je Apache spustený. Došiel som nato, že treba v konfiguračnom súbore (/usr/local/etc/apache22/httpd.conf) vypnúť modul mod_unique_id (#LoadModule unique_id_module libexec/apache22/mod_unique_id.so).

PHP
cd /usr/ports/lang/php5
make install clean

cd /usr/ports/lang/php5-extensions
make install clean

Spustí sa nám config, kde si pozaškrtávame čo potrebujeme. Nachádza sa tam aj Suhosin, čiže ak ho zaškrtneme, tak ho nemusíme neskôr doinštalovať a môžeme jeho inštaláciu čo je nižšie preskočiť.

cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini
(PHP extensions /usr/local/etc/php/extensions.ini)


Editujeme konfiguračný súbor (/usr/local/etc/apache22/httpd.conf) Apache a pridáme tam:# pre Apache 1.3.x
LoadModule php5_module libexec/apache/libphp5.so
AddModule mod_php5.c

# pre Apache 2.x
LoadModule php5_module libexec/apache22/libphp5.so


<IfModule mod_dir.c>
 <IfModule mod_php3.c>
  <IfModule mod_php5.c>
   DirectoryIndex index.php index.php3 index.html
  </IfModule>
  <IfModule !mod_php4.c>
   DirectoryIndex index.php3 index.html
  </IfModule>
 </IfModule>
 <IfModule !mod_php3.c>
  <IfModule mod_php5.c>
   DirectoryIndex index.php index.html index.htm
  </IfModule>
  <IfModule !mod_php4.c>
   DirectoryIndex index.html
  </IfModule>
 </IfModule>
</IfModule>


AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

//Ak chceme spracovávať htm a html súbory ako PHP skripty, tak to bude vyzerať nasledovne:
AddType application/x-httpd-php .php .htm .html
AddType application/x-httpd-php-source .phps


Riadok s:DirectoryIndex index.htm
zmeníme za:DirectoryIndex index.php index.htm index.html
Riadok s:#Include etc/apache22/extra/httpd-languages.conf
zmeníme za:Include etc/apache22/extra/httpd-languages.conf

Editujeme súbor /usr/local/etc/apache22/extra/httpd-languages.conf a na koniec riadku pridáme AddDefaultCharset On. Následne reštartujeme Apache pomocou: /usr/local/etc/rc.d/apache22 restart. Do konzoly napíšeme echo "<?php phpinfo(); ?>" >> /usr/local/www/apache22/data/test.php a takto si môžeme overiť či nám PHP funguje.

phpMyAdmin
cd /usr/ports/databases/phpmyadmin
make install clean


Editujeme súbor /usr/local/etc/apache22/httpd.conf a pridáme tam:
Alias /phpmyadmin /usr/local/www/phpMyAdmin

<Directory "/usr/local/www/phpMyAdmin">
Order allow,deny
Allow from all
</Directory>


Ďalej treba vytvoriť konfiguračný adresár zadaním príkazov:

cd /usr/local/www/phpMyAdmin
mkdir config
chmod 777 config


A pomocou /usr/local/etc/rc.d/apache22 restart reštartujeme Apache.

Ak všetko beží, tak cez http://nazovstranky/phpmyadmin/scripts/setup.php treba phpMyAdmin ponastavovať. Následne treba skopírovať z adresára phpMyAdmin/config konfiguračný súbor do adresára phpMyAdmin nasledujúcim príkazom:

cp config/config.inc.php .

Na záver zmažeme konfiguračný adresár a nastavíme chmod na konfiguračný súbor:

rm -rf config
chmod 440 config.inc.php


eAccelerator
eAccelerator slúži na zrýchlenie PHP skriptov tak, že si ukladá predspracované skripty v cache pamäti, vďaka čomu urýchľuje ich opätovné spúšťanie. eAccelerator sa nachádza medzi portami a presne tu /usr/ports/www/eaccelerator, čiže:

cd /usr/ports/www/eaccelerator
make install clean


Následne treba editovať súbor php.ini (/usr/local/etc/php.ini) a pridať tam pre:

zend_extension="/usr/local/lib/php/20060613/eaccelerator.so"

Po skompilovaní, sa vypíše presná cesta.

Takto nejako vyzerá nastavenie eAcceleratoru:
extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"


Zmena shmall a shmmax:
# sysctl -w kern.ipc.shmmax=536870912
kern.ipc.shmmax: 33554432 -> 536870912

# sysctl -w kern.ipc.shmall=131072
kern.ipc.shmall: 8192 -> 131072


Do /etc/sysctl.conf pridáme:
kern.ipc.shmmax=536870912
kern.ipc.shmall=131072


Ďalej treba vytvoriť adresár eaccelerator a nastaviť chmod:
mkdir /tmp/eaccelerator
chown www /tmp/eaccelerator
chmod 0700 /tmp/eaccelerator

A pomocou /usr/local/etc/rc.d/apache22 restart reštartujeme Apache.

Suhosin
Suhosin stiahneme tu, ale ako tak čítam teraz tú stránku, tak Suhosin by sa mal tiež nachádzať medzi portami vo FreeBSD. Takže to môžete skúsiť cez whereis php-suhosin a mal by byť tu /usr/ports/security/php-suhosin, čiže:

cd /usr/ports/security/php-suhosin
make install clean


Ak chcete stiahnuť zdrojáky priamo zo stránky, tak pokračujte:

wget http://download.suhosin.org/suhosin-0.x.x.tgz
tar xfv suhosin-0.x.x
cd suhosin-0.x.x
phpize
./configure
make
make install


Nakoniec je potrebné editovať súbor php.ini (/usr/local/etc/php.ini) do ktorého vložíme na koniec toto: extension=suhosin.so uložíme a reštartujeme Apache.

Bezpečnosť
suPHP zabezpečí, že každý užívateľ bude spúšťať skripty pod svojim kontom. Každý užívateľ bude mať nadefinovaný svoj php.ini súbor v ktorom bude nastavená direktíva openbasedir tak, že bude smerovať na adresár konkrétneho užívateľa. Ďalej tiež spomínaný Suhosin. suPHP je taktiež vo FreeBSD a konkrétne tu /usr/ports/www/suphp, čiže:
cd /usr/ports/www/suphp
make install clean


Ďalšie zabezpečenia na úrovni PHP môžu byť nasledovné:
===========
SAFE MODE
===========
PHP skripty budú mať prístup len k súborom ktorých vlastníkom je užívateľ, ktorý spustil skript
safe_mode = On

PHP skripty budú mať prístup len k súborom ktorých vlastníkom je skupina apache
safe_mode = Off
safe_mode_gid = On

PHP skripty budú môcť spúšťať binárky, ktoré sú v špecifickom adresári
safe_mode_exec_dir = /var/www/bin

PHP skripty budú mať prístup len k premenným prostredia (ENV VARS) s nadefinovaným prefixom
safe_mode_allowed_env_vars = PHP_

=====================================
CO BUDE MOCT PHP CITAT A ZAPISOVAT
=====================================
PHP bude mať prístup (RW) len k súborom zadefinovaných v ceste premennej open_basedir
open_basedir = /cesta/k/suborom/ku/ktorym/ma/php/pristup
PR: open_basedir = /var/www/

=========================
ZOBRAZOVANIE INFORMACII
=========================
Vypnutie zobrazovaní informácií o PHP v HTTP hlavičkách
expose_php = Off

Vypnutie zobrazovania php chýb a varovaní
display_errors = Off

===========
LOGOVANIE
===========
Zapnutie logovania chýb
log_errors = On

Zadefinovanie cesty k logom
error_log = /cesta/k/logu

Register globals su peklo - OFF
register_globals = Off

========
LIMITY
========
Maximálny čas vykonania skriptu
max_execution_time = 30

Maximálny čas pre parsovanie vstupu
max_input_time = 60

Maximálna pamäť v MB obsadená jedným skriptom
memory_limit = 8M

Maximálna veľkosť pre uploadovaný súbor
upload_max_filesize = 2M

Maximálna veľkosť POST requestu
post_max_size = 8M

Vypnutie nebezpečných funkcií
disable_functions = proc_nice, proc_terminate, proc_get_status, proc_close, proc_open, ini_alter, dl, system, exec, pfsockopen, fsockopen, curl_init, curl_setopt, curl_exec, curl_close, leak, shell_exec, proc_open, syslog, link, readlink, symlink, error_log, ini_restore, openlog, passthru, socket_create, socket_write, shmop_close, shmop_delete, shmop_open, shmop_read, shmop_size, shmop_size

Vypnutie nebezpečných tried funkcií
disable_classes = posix

Vypnutie vzdialených URL (HTTP URL) - problém hlavne ak názov súboru je od užívateľa bez riadného ošetrenia vstupu
allow_url_fopen = Off

Vypnutie includovania pomocou URL
allow_url_include = Off

Vypnutie magic_quotes_gpc - vstup sa bude filtrovať na úrovni PHP skriptu
magic_quotes_gpc = Off

Vypnutie UPLOADOVANIA súborov
file_uploads = Off

Vypnutie session ID v URL
session.use_trans_sid = Off


Ďalej je dobré použiť modul pre Apache mod_security, ktorý slúži na detekciu útokov a ochranu web aplikácií pred ne/automatizovanými útokmi. Jeho výhodou je možnosť zamedzenia Cross site scriptingu, SQL injections a ďalším lahôdkam.

Dobré je prestaviť aj ServerTokens v konfiguračnom súbore Apache. Defaultne tam býva nastavená hodnota Full a odporúčam ju zmeniť za Prod. Vtedy útočník nezistí akú verziu Apache používate. Ak sa mýlim, tak ma opravte, ale nedošiel som nijak k verzii Apache, keď som tam nastavil hodnotu Prod. Tu sú všetky možnosti s príkladom:

ServerTokens Prod[uctOnly]
Server sends (e.g.): Server: Apache

ServerTokens Major
Server sends (e.g.): Server: Apache/2

ServerTokens Minor
Server sends (e.g.): Server: Apache/2.0

ServerTokens Min[imal]
Server sends (e.g.): Server: Apache/2.0.41

ServerTokens OS
Server sends (e.g.): Server: Apache/2.0.41 (Unix)

ServerTokens Full (or not specified)
Server sends (e.g.): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2


Článok bol zobrazený 655 krát a obsahuje 2281 slov
Pridané 10. februára 2014