Introducere
Este nevoie de sistem de un management relațional al bazelor de date, cum ar fi MySQL și MariaDB pentru o parte semnificativă a site-urilor web și aplicațiilor. Cu toate acestea, nu toți utilizatorii se simt comod să își administreze datele prin intermediul liniei de comandă. Pentru a rezolva această problemă, a fost creat un proiect numit phpMyAdmin pentru a oferi o alternativă în forma unei interfețe de administrare web-based. În acest ghid, vom demonstra cum să instalăm și să asigurăm o configurare phpMyAdmin pe un server CentOS 7. Vom face această configurare în partea de sus a serverului web Nginx, care are un profil de performanță bun și poate suporta sarcini grele mai bine decât alte servere web.
Condiție Prealabilă
Înainte de a începe, există câteva cerințe care trebuie stabilite. Pentru a vă asigura că aveți o bază solidă pe care să vă construiți sistemul trebuie să aveți instalat CentOS 7. Printre alte lucruri, va trebui să configurați un utilizator cu drepturi non-root cu acces sudo pentru comenzi administrative. Cea de-a doua condiție prealabilă care trebuie îndeplinită pentru a începe acest ghid este să instalați grupul LEMP (Linux, Nginx, MariaDB și PHP) pe serverul CentOS 7. Aceasta este platforma pe care o vom folosi pentru a asigura interfața phpMyAdmin (MariaDB este de asemenea software-ul de management al bazelor de date pe care dorim să le gestioneze). Dacă nu aveți încă LEMP instalat pe server, parcurgeți ghidul de instalare LEMP pe CentOS 7.
Când serverul este într-o stare de funcționare adecvată după parcurgerea acestor ghiduri, puteți continua cu restul paginii.
Pasul Unu – Instalarea phpMyAdmin Odată platforma LEMP instalată, putem începe instalarea software-ului phpMyAdmin. Din păcate, phpMyAdmin nu este disponibil în arhiva implicită a CentOS 7. Pentru a obține pachetele de care avem nevoie, va trebui să adăugăm o altă arhivă în sistemul nostru.
Arhiva EPEL (Extra Packages for Enterprise Linux) conține multe pachete adiționale, inclusiv pachetul phpMyAdmin de care avem nevoie.
Din fericire, procedura de adăugare a arhivei EPEL s-a ușurat. Acolo este practic un pachet numit epel-release care reconfigurează managerul de pachete pentru a utiliza arhiva EPEL. Îl puteți instala tastând:
sudo yum install epel-release
Acum că aveți acces la arhiva EPEL, puteți instala phpMyAdmin cu ajutorul yum:
sudo yum install phpmyadmin
Instalarea se va finaliza. Pentru ca serverul Nginx să găsească și să servească corect fișierele phpMyAdmin va trebui să creăm un link între fișierele de instalare și directorul nostru document root Nginx tastând:
sudo ln -s /usr/share/phpMyAdmin /usr/share/nginx/html
Trebuie să repornim procesorul PHP pentru a ne asigura că poate încărca modulele suplimentare pe care le-am încărcat:
sudo systemctl restart php-fpm
Cu aceasta, instalarea phpMyAdmin este funcțională. Pentru a accesa interfața, mergeți la numele domeniului sau la adresa publică IP și adăugați /phpMyAdmin în browser: http://server_domain_or_IP/phpMyAdmin
Pentru a vă autentifica, folosiți perechea nume utilizator/parolă pentru un utilizator valid MariaDB. Utilizatorul root și parola administrativă MariaDB este o bună alegere pentru a începe.
După aceea veți putea accesa interfața de administrare:
Familiarizați-vă cu această interfață. În secțiunea următoare vom lua câteva măsuri pentru a securiza interfața.
Pasul Doi – Securizarea Interfeței phpMyAdmin phpMyAdmin instalat pe serverul dvs. ar trebui să fie complet utilizabil în acest moment. Oricum, prin instalarea unei interfețe web, am expus sistemul MySQL lumii exterioare. Chiar și cu includerea ecranului de autentificare, aceasta rămâne o problemă. Datorită popularității phpMyAdmin combinată cu marea cantitate de informații la care oferă acces, instalări ca aceasta sunt ținte comune pentru atacatori. Vom implementa două strategii simple pentru a diminua șansele ca programul dvs. să fie țintit și compromis.
Vom schimba interfața locației din /phpMyAdmin în altceva pentru a ocoli unele tentative de bot brute-force. Vom crea, de asemenea, un nivel suplimentar de autentificare gateway care trebuie să fie trecut, chiar înainte de a ajunge în fereastra de conectare phpMyAdmin.
Schimbarea Locației de Acces a Aplicației Pentru ca serverul dvs. web Nginx să găsească și să servească fișierele phpMyAdmin, am creat un link simbolic de la directorul phpMyAdmin la documentul root în pasul precedent. Pentru a schimba URL-ul de unde poate fi accesată interfața phpMyAdmin, va trebui să redenumim simbolic link-ul. Mutați în directorul root Nginx pentru a avea o idee mai bună despre ceea ce facem:
cd /usr/share/nginx/html
ls -l
-rw-r–r– 1 root root 537 Aug 5 08:15 50x.html
-rw-r–r– 1 root root 612 Aug 5 08:15 index.html
lrwxrwxrwx 1 root root 21 Aug 6 17:29 phpMyAdmin -> /usr/share/phpMyAdmin
După cum puteți vedea, avem un link simbolic denumit phpMyAdmin în acest director. Puteți schimba numele link-ului după cum doriți. Aceasta va schimba locația unde phpMyAdmin poate fi accesat de un browser, care poate ajuta la ascunderea punctului de acces din hard-coded bots. Alegeți un nume care nu indică scopul locației. În acest ghid, vom denumi locația de acces /nothingtosee. Pentru a realiza acest lucru, vom redenumi link-ul:
sudo mv phpMyAdmin nothingtosee
ls -l
total 8
-rw-r–r– 1 root root 537 Aug 5 08:15 50x.html
-rw-r–r– 1 root root 612 Aug 5 08:15 index.html
lrwxrwxrwx 1 root root 21 Aug 6 17:29 nothingtosee -> /usr/share/phpMyAdmin
Acum, dacă veți merge în locația anterioară instalării phpMyAdmin, veți primi eroarea 404: http://server_domain_or_IP/phpMyAdmin
Oricum, interfața dvs. phpMyAdmin va fi disponibilă în noua locație pe care am selectat-o:
http://server_domain_or_IP/nothingtosee
Configurarea Autentificării Gate a unui Server Web
Următoarea caracteristică pe care ne-am dori-o pentru instalarea noastră este un mod de autentificare care i s-ar cere utilizatorului să îl treacă înainte de a vedea caseta de autentificare a phpMyAdmin. Din fericire, majoritatea serverelor web, inclusiv Nginx, oferă această opțiune nativ. Va trebui să modificați fișierul de configurare Nginx cu detalii. Înainte de a face acest lucru, vom crea un fișier cu parole care va stoca credențialele de autentificare. Nginx cere ca parolele să fie criptate folosind funcția crypt(). Suita Open SSL, care ar trebui să fie instalată deja pe server, include această funcționalitate. Pentru a crea parola criptată, tastați:
openssl passwd
Vi se va cere să introduceți și să confirmați parola pe care vreți să o folosiți. Utilitarul va afișa apoi o versiune criptată a parolei care va arăta ca mai jos:
O5az.RSPzd.HE
Copiați această valoare, pentru că veți avea nevoie să o lipiți în fișierul de autentificare pe care îl vom crea. Acum, creați un fișier de autentificare. Îl vom denumi `pma_pass` și îl vom plasa în directorul de configurare Nginx:
sudo nano /etc/nginx/pma_pass
În acest fișier, va trebui să specificați numele de utilizator pe care doriți să îl folosiți, urmat de două puncte (:) și de versiunea criptată a parolei pe care ați primit-o de la utilitarul `openssl passwd`. Vom denumi utilizatorul `demo`, dar dvs. va trebui să alegeți un nume de utilizator diferit. Fișierul acestui ghid arată ca cel de mai jos:
demo:O5az.RSPzd.HE
Salvați și închideți fișierul când ați terminat. Acum, suntem gata să modificăm fișierul de configurare Nginx. Deschideți acest fișier în editorul text pentru a începe:
sudo nano /etc/nginx/conf.d/default.conf
În acest fișier, va trebui să adăugăm o nouă secțiune locație. Aceasta va viza locația pe care am ales-o pentru interfața phpMyAdmin (în acest ghid am selectat `/nothingtosee`). Creați această secțiune în unitatea server, dar în afara oricăror alte unități. Vom pune noua noastră secțiune locație `location /sub` unitate ca în exemplul de mai jos:
server {
. . .
location / {
try_file $uri $uri/ =404;
}
location /nothingtosee {
}
. . .
}
În această unitate, va trebui să configurăm o valoare a directivei numită `auth_basic` pentru mesajul de autentificare care va fi afișat utilizatorilor. Nu dorim să le arătăm utilizatorilor neautentificați ce protejăm, așa că nu oferiți detalii specifice. Vom folosi „Admin Login” în exemplul nostru. Mai apoi va trebui să folosim directiva `auth_basic_user_file` pentru a indica serverului web fișierul de autentificare pe care l-am creat. Nginx va cere utilizatorilor detaliile autentificării și va verifica dacă valorile introduse se potrivesc cu cele introduse în fișierul specificat. După ce ați terminat, fișierul ar trebui să arate ca cel de mai jos:
server {
. . .
location / {
try_file $uri $uri/ =404;
}
location /nothingtosee {
auth_basic „Admin Login”;
auth_basic_user_file /etc/nginx/pma_pass;
}
. . .
}
Salvați și închideți fișierul când ați terminat. Pentru a pune în aplicare noua noastră modalitate de autentificare, va trebui să repornim serverul web:
sudo systemctl restart nginx
Acum, dacă accesăm locația phpMyAdmin în serverul web (va trebui să goliți memoria cache sau să folosiți o altă sesiune a browserului dacă deja utilizați phpMyAdmin), vi se va cere numele de utilizator și parola pe care le-ați adăugat în fișierul `pma_pass`:
http://server_domain_or_IP/nothingtosee
După ce introduceți credențialele dvs., veți fi direcționat către pagina normală de conectare phpMyAdmin. Această metodă suplimentară de protecție vă va ajuta să mențineți jurnalele încercărilor de autentificare MySQL curate, în plus față de beneficiul de securitate adăugat.
Concluzii
Acum puteți organiza baza de date MySQL prin intermediul unei interfețe web sigure și rezonabile. Acest UI expune cea mai mare parte a funcționalității care este disponibilă din linia de comandă MySQL. Puteți consulta bazele de date și schema, executa interogări și crea noi seturi și structuri de date.