Posts Tagged ‘apache’

SAMP cu Solaris

solarisInstalarea pachetului SAMP (Solaris Apache MySQL PHP) se face destul de usor, avand in vedere ca ne pune la dispozitie o comanda care face acest lucru.

pkg install amp

Odata instalate, aceste pachete trebuie puse si pe enable, altfel ele nu vor porni, asa cum la alte sisteme de operare se intampla.

svcadm enable apache22

svcadm enable mysql

Aceste doua comenzi fac enable si pornesc cele doua servicii.

In cazul in care dorim sa facem restart la aceste servicii, rulam:

svcadm restart apache22

svcadm restart mysql

In mod implicit MySQL se instaleaza fara sa se aloce nici o parola pe userul root, iar pentru modificarea parolei trebuie sa ne conectam la serverul de mysql si apoi sa ii alocam o parola:

mysql sau mysql -u root -p

SET PASSWORD FOR root@localhost=PASSWORD(‘parola_alocata’);

Active Directory HTTP authentication folosind authnz_ldap cu Apache2

In multe cazuri este necesara autentificarea cu Active Directory la nivel de Apache2, in special cand discutam de un numar mare de utilizatori care acceseaza un portal web din locatii diferite si mai ales atunci cand vrem ca accesul sa fie cat mai restrans la persoanele dintr-o companie pe care de altfel sa nu ii incarcam cu un user si o parola pentru fiecare resursa existenta.

Astfel, configurarea consta in prima faza in adaugarea unei linii in fisierul: /etc/ldap/ldap.conf care sa arate asa:

REFERRALS off

si prin care specificam sa nu fie restrictionate referintele la un server printr-un site in special cand interogarile vin prin web pentru ca autentificarea cu Active Direcotry sa fie posibila si prin web.

Mai departe am trecut la partea de configurare a autentificarii prin Active Directory si in interiorul <Directory /var/www/>    </Directory>  am adaugat urmatoarele linii:

AuthBasicProvider ldap
AuthType Basic
AuthName „Restricted Zone”
AuthLDAPURL „ldap://nume_server_dc.tld:389/DC=nume_server_dc,DC=tld?sAMAccountName?sub?(objectClass=user)” NONE
AuthLDAPBindDN „user_creat_in_ad@DOMENIU”
AuthLDAPBindPassword „parola_userului_creat_in_ad”
require ldap-attribute objectClass=user

Detalii despre fiecare linie se gasesc aici: http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html

Daca toate datele introduse au fost corecte, in mod normal autentificarea trebuie sa se efectueze fara probleme din web. Inainte de testare trebuie restartat Apache2.

/etc/init.d/apache2 restart

Mai departe am dorit ca doar cei din exteriorul retelei sa aiba restrictia de a introduce user si parola, iar cei din interiorul retelei, sau cei care au adresele IP specificate de mine sa nu aiba aceasta problema. Atunci am mai adaugat inainte de AuthBasicProvider ldap linia:

order deny allow

iar dupa require ldap-attribute objectClass=user am adaugat liniile prin care am specificat adresele IP care sa aiba acces fara autentificare HTTP:

satisfy any

deny from all

allow from 172.16.16.1/24

allow from 1.2.3.4

unde 172.16.16.1/24 reprezinta o clasa de adrese IP care se pot aloca unei retele interne, iar 1.2.3.4 reprezinta un IP extern sau intern.

Rularea VirtualHosts ca useri separati (pool-uri separate) in Apache cu php5-FPM si Ubuntu/Debian

phpapcIn acest tutorial voi prezenta modul de rulare a php-ului cu FastCGI si a VirtualHosturilor folosind pool-uri separate cu useri separati.

Pentru ca este un server pe care vor rula si baze de date, eu am instalat si MySQL. Asadar:

apt-get install mysql-server mysql-client

unde se urmeaza procedura instalarii alocand parola pentru contul root la MySQL.

Acum incepe instalarea propriu-zisa pentru apache, php5, mysql si php5-fpm.

apt-get install apache2-mpm-worker
apt-get install libapache2-mod-fastcgi php5-fpm php5 php5-mysql

, iar dupa finalizarea instalarii trebuie dat enable la modulele instalate; actions, fastcgi si alias.

a2enmod actions fastcgi alias

Inainte de a incepe configurarile trebuie precizat ca voi rula un VirtualHost folsind grupul web si userul web_test evident ca parte din acest grup. Prima data creez grupul si userul si apoi voi trece la partea de configurare:

groupadd web
useradd -s /bin/false -d /home/web_test -m -g web web_test

Acum mai treuie sa modificam in VirtualHost unde adaugam urmatoarele linii intre <VirtualHost> si </VirtualHost>:

<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9001 -pass-header Authorization
</IfModule>

astfel incat sa arate in felul urmator:

<VirtualHost *:80>
ServerName web_test

DocumentRoot /home/web_test
DirectoryIndex index.php index.html

ErrorLog „/var/log/apache2/web_test_error_log”
CustomLog „/var/log/apache2/web_test_access_log” combined

<Directory „/home/web_test/”>
AllowOverride All
</Directory>

<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9001 -pass-header Authorization
</IfModule>
ServerSignature Off
</VirtualHost>

De asemenea trebuie configurat php-fpm:

vim /etc/php5/fpm/pool.d/web_test.conf

unde am adaugat:

[web_test]
listen = 127.0.0.1:9001
user = web_test
group = web
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 4
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 200
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Aici se observa ca fastCGi face diferenta intre useri folosind hostnameul si portul pe care asculta, deci fiecare pool care ruleaza ca user separat trebuie sa aiba si un port diferit. Testarea se face ruland phpinfo(); si accesandu-l din browser. In cazul meu nu a functionat corect pentru ca nu gasea fisierul php5-fcgi asa ca a trebuit sa il creez manual ruland:

touch /usr/lib/cgi-bin/php5-fcgi

Testarea:

O putem face fie din phpinfo, sau ruland whoami.

Pentru phpinfo: vim /home/web_test/www/info.php unde adaugam:

<?php phpinfo(); ?>

Pentru whoami: vim /home/web_test/www/whoami.php unde adaugam:

<?php
echo exec('whoami');
?>

Optional am instalat si php-apc ca si accelerator al aplicatiilor care ruleaza cu php.

Upgradeul de la Apache 2.2.x la 2.4.x in Ubuntu

In Ubuntu 13.04, upgradeul de la versiunea de Apache 2.2.x la 2.4.x nu se face foarte corect si asta datorita faptului ca trebuie intervenit manual in setarile VirtualHost-urilor. Asadar, in versiunea de Apache 2.4.x s-ar putea sa intampinati erori de tipul „Forbidden” in momentul in care accesati hosturi care in versiunea anterioara functionau fara nici un fel de problema, iar in loguri eroarea care apare arata cam asa:

AH01630: client denied by server configuration:

Aceasta eroare se datoreaza liniei „Allow from All” din VirtualHost care nu mai este inteleasa de Apache 2.4.x si trebuie inlocuita  cu „Require all granted” odata cu trecerea de la vechea versiune de Apache la cea noua.

De asemenea pe acest link: http://httpd.apache.org/docs/2.4/upgrading.html apar si diferentele care trebuiesc efectuate in setari odata cu trecerea la noua versiune.

apache24

Apache si eroarea: Permission denied: make_sock: could not bind to address 0.0.0.0:80

Sunt cazuri cand restartam Apache si acesta nu vrea sa mai porneasca afisand mesajul de eroare:

Permission denied: make_sock: could not bind to address 0.0.0.0:80

Acesta eroare este cauzata de blocarea portului 80 datorita faptului ca Apache nu a fost oprit corect de catre sistem.

Pentru rezolvarea problemei putem folosi comanda:

fuser -k -n tcp 80
apoi rulam din nou comanda pentru repornirea apache:
/etc/init.d/apache2 restart

Rularea VirtualHost-urilor ca useri separati folosind Apache-MPM-ITK in Ubuntu/Debian

apacheTrebuie sa mentionez de la bun inceput ca fastCGI este o alternativa mult mai buna poentru ca virtualhosturile sa ruleze ca useri separati. Eu am adoptat aceasta metoda si o adopt in cotninuare pe serverele care sunt in productie, ruleaza multe aplicatii si nu permit downtime decat unul foarte mic pentru aceasta implementare. MPM (Multi Processing Module) ajuta la separarea VirtualHost-urilor astfel ca ele sa ruleze ca useri separati si sa nu mai apara problema ca toate siteurile sa ruleze ca www-data.

Instalarea se face astfel (presupunand ca avem deja Apache2 instalat):

apt-get install apache-mpm-itk

Dupa instalarea modulului urmeaza crearea grupurilor si a userilor. Presupunem creare grupului web cu userul web_test care va fi folosit pentru un anumit VirtualHost.

groupadd web

useradd -s /bin/false -d /var/www/web_test -m -g web web_test #creare userului web_test care va fi inclus in grupul web

In VirtualHost mai trebuie adaugate urmatoarele linii, inainte de </VirtualHost>:

<IfModule mpm_itk_module>
AssignUserId web_test web
</IfModule>

Dupa aceasta procedura se da restart la Apache si ar trebui sa functioneze corect:

service apache2 restart

Evident acum fisierele trebuie sa aiba userul web_test si sa se afle in grupul web:

chown -R web_test:web /var/www/web_test/

Instalarea unui certificat SSL generat cu OpenSSL in Apache

Aici procedura este destul de simpla si incepe cu generarea certificatului SSL in conditiile in care presupunem ca Apache are incarcat deja mod_ssl si are creat cel putin un VirtualHost in /etc/apache2/sites-available.

Generarea certificatului se face cu comanda:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

Apoi urmeaza sa completam cateva campuri, unde cel mai important este „Common Name” unde trebuie trecut numele de domeniu pentru care a fost generat certificatul.

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:NYC
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Awesome Inc
Organizational Unit Name (eg, section) []:Dept of Merriment
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:webmaster@domain.tld

Apoi se modifica VirtualHost-ul astfel:

<VirtualHost *:443>
ServerName example.com:443

iar lasfarsitul VirtulHost-ului se adauga liniile prin care apelam certificatul si cheia.

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Ultima faza este sa dam reload la apache: service apache2 reload si sa accesam linkul in browser folosind https://example.com

HTTP to HTTPS redirect folosind Apache2 cu un server de reverse proxy in fata

Cand folosim o masina virtuala cu Apache pe care rulam un site si vrem ca acesta sa ruleze folosind protocolul HTTPS impreuna cu un certificat SSL, iar in fata serverului avem un reverse proxy care este pe un alt server, atunci redirectarea si instalarea certificatului SSL trebuie sa fie pe reverse proxy, in zadar fiind pe masina virtuala.

Astfel, redirectarea HTTP to HTTPS permanenta la accesul http://srv.standdupp.ro care sa fie trimis spre https://srv.standdupp.ro trebuie sa se faca din reverse proxy astfel:

<VirtualHost *:80>

ServerName srv.standdupp.ro
# Creem aici redirectarea 80 to 443
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

</VirtualHost>

Apoi creem VirtualHost pentru HTTPS

<VirtualHost *:443>

ServerName srv.standdupp.ro
Order deny,allow
Allow from all

ProxyPreserveHost On
ProxyPass / http://ip_masina_virtuala/
ProxyPassReverse / http://ip_masina_virtuala/

</VirtualHost>

LAMP Server cu CentOS

centosInstalarea serverului LAMP in CentOS este putin diferita fata de Ubuntu sau Debian, unde cam totul vine aproape gata la rularea comenzii apt-get install.

Instalarea Apache:

yum install httpd

odata ce a fost instalat, el nu se porneste automat, ci trebuie pornit cu comanda:

/etc/init.d/httpd start

In mod implicit, odata instalat Apache pe CentOS, nu se poate accesa linkul din browser doar daca accesul se face de pe masina locala si ast adatorita unui firewall cu care vine CentOS instalat. Eu am dezactivat firewallul pentru ca am avut nevoie si de alte setari, asa ca l-am pus pe disable cu comenzile:

/etc/init.d/iptables save
/etc/init.d/iptables stop

chkconfig iptables off

Tot in mod implicit, datele se tin in /var/www/html, dar si aici se poate personaliza editand setarile servererului din httpd.conf.

Instalarea MySQL:

yum install mysql mysql-server

Aici din nou e la fel, trebuie pornit manual, iar odata cu pornirea i se initializeaza si tabelele.

/etc/init.d/mysqld start

Ca sa ne putem conecta la serverul MySQL trebuie sa avem o parola a userului root, dar care la instalare nu ni s-a cerut pentru a fi alocata, asa cum fac sistemele Debian-based. Nici o problema, ii creem si parola root, urmand comenzile:

mysql
mysql> USE mysql;
mysql> UPDATE user SET Password=PASSWORD(‘parola_noua’) WHERE user=’root’;
mysql> FLUSH PRIVILEGES;

apoi logarea la serverul MySQL este posibila ruland:

mysql -u root -p

Instalarea php, impreuna ca unele module necesare:

yum install php php-mysql php-common php-gd php-mbstring php-mcrypt php-devel php-xml

Dupa care bine-nteles trebuie restartat Apache, pentru a se actualiza si in setarile lui:

/etc/init.d/httpd restart

Instalarea phpMyAdmin:

Procedura este simpla:

yum install phpmyadmin

si aici din nou acelasi lucru ca si in cazul Apache, unde phpMyAdmin este accesibil doar de pe hosul local. Aici are un mare plus, mai ales ca pentru mine phpMyAdmin = evil datorita vulnerabilitatilor pe care le are.
Ca sa fie accesibil si de pe alte IP-uri, trebuie editat /etc/httpd/conf.d/phpMyAdmin.conf unde se adauga:

Require ip adresa_ip

apoi se poate accesa de pe adresa IP specificata la Require ip.

Password protect pe un folder folosind Apache

In cazul in care vrem ca un domeniu sau un folder sa fie protejat cu user si parola, trebuie sa urmam urmatorii pasi:

In .htaccess se adauga conditia de autentificare:

AuthUserFile /var/www/.htpasswd
AuthType Basic
AuthName „Auth Required”
Require valid-user

Dupa ce am modificat .htaccess, urmeaza creearea unui user si implicit a fisierul .htpasswd unde se stocheaza userii si parolele criptate.

htpasswd -c .htpasswd user_name

Sistemul ne va cere o parola, alocam aceasta parola, iar apoi vom putea accesa linkul folosind userul si parola definite aici.

Daca vrem sa protejam doar unele fisiere, in .htaccess conditia se modifica putin:

AuthUserFile /var/www/.htpasswd
AuthType Basic
AuthName „Auth Required”
<Files „nume_fisier.html”>
Require valid-user
</Files></blockquote>

srv StandDuPp
Articole recente