Archive for the ‘Linux-Apache-MySQL-PHP’ Category

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’);

Backup si restore la o baza de date MySQL in si din fisier gzip (*.sql.gz)

Putem efectua backup (dump) la o baza de date MySQL direct intr-un fisier arhivat cu gzip, adica sql.gz

mysqldump -u username -pPassword nume_baza_de_date | gzip >  nume_fisier_backup.sql.gz

De asemenea putem efectua restore la o baza de date MySQL in cazul in care acesta este deja arhivata intr-un fisier gzip, adica .sql.gz

gunzip < nume_fisier_backup.sql.gz | mysql -u username -pPassword nume_baza_de_date

Pornirea accesului remote la MySQL pentru un utilizator

imagesIn unele cazuri este necesar sa avem pornit accesul la MySQL pentru unul sau mai multi useri, pentru a evita bataile de cap si timpul pierdut la rularea comenzilor de mysqldump si restore a bazelor de date, iar operatiunile sa le putem efectua de la distanta direct pe serverul de baze de date.

Din punctul meu de vedere, acesta nu este un acces care sa fie deschis permanent, asa ca il folosesc doar pe perioada in care este nevoie de el.

Asadar, pentru a aloca accesul din exterior la un server MySQL, folosind un username specific, efectuam urmatoarele.

mysql -u root -p

GRANT ALL PRIVILEGES ON baza_de_date.* TO ‘username’@’%’ IDENTIFIED BY ‘parola’;

Apoi editam /etc/mysql/mycnf unde adaugam linia:

bind-address = 0.0.0.0

pentru a permite accesul din afara.

Cand vrem ca accesul din exterior sa nu mai fie disponbil, prima data comentam linia din my.cnf adaugata anterior si apoi facem REVOKE la privilegii:

mysql -u root -p

REVOKE PRIVILEGES ON baza_de_date.* TO ‘username’@’%’;

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.

Exportul unui Query SQL in fisier CSV folosind MySQL

export_mysql_csvDaca dorim sa facem exportul unei interogari din SQL in format .csv trebuie sa folosim o comanda prin care sa ne conectam la baza de date, sa rulam selectul si apoi acel select sa returneze informatiile direct intr-un fisier CSV.

mysql -u USER -pPAROLA -h hostname numele_bazei_de_date -B -e „COMANDA SELECT;” | sed ‘s/\t/”,”/g;s/^/”/;s/$/”/;s/\n//g’ > nume_fisier.csv

Clonarea unei baza de date MySQL

Daca vrem sa clonam o baza de date mult mai rapid decat metoda dump in fisier .sql apoi creem baza de date si facem restoreul datelor din fisierul .sql, putem proceda in felul urmator.

Prima data trebuie sa creem o baza de date (blank) unde va fi put continutul din baza de date din care vrem sa facem clonarea.

mysql -u user -p

CREATE DATABASE baza_de_date_noua;

Alocam privilegii userului de pe baza de date existenta pentru ca el sa poata scrie pe baza de date noua. (asta in conditiile in care vrem sa folosim acelasi user penru conectarea la baza de date).

GRANT ALL PRIVILEGES ON baza_de_date_noua.* TO ‘user_name’@’localhost’;

Iar acum urmeaza clonarea propriu-zisa:

mysqldump -u user -pPAROLA baza_de_date_existenta | mysql -u user -pPAROLA baza_de_date_noua

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/

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>

Resetarea parolei root MySQL

Se intampla sa administram un server pentru care nu primim parola root de la MySQL sau pur si simplu am uitat parola, dar totusi mai avem accesul root la server.

Pentru resetarea parolei usernameului root MySQL trebuie sa urmam pasii:

Oprirea serverului de baze de date MySQL:

/etc/init.d/mysqld stop #pentru Ubuntu, CentOS, Fedora, RHEL

sau

/usr/local/etc/rc.d/mysqld stop #pentru FreeBSD

Acum urmeaza pornirea serverului MySQL in Safe mode.

sudo mysqld_safe –skip-grant-tables &

Acum logarea este posibila si putem schimba parola prin urmatoarele comenzi:

mysql -u root
use mysql
update user set password=PASSWORD(„noua_parola_root”) where User=’root’
flush privileges;
quit

Acum oprim din nou MySQL pe care l-am pornit adineauri in Safe mode si il pornim in normal mode:

/etc/init.d/mysqld stop
/etc/init.d/mysqld start

srv StandDuPp
Articole recente