Sari la conținut
Cum securizezi wp-config.php și fișierele critice pe un server Linux

Cum securizezi wp-config.php și fișierele critice pe un server Linux

Fișierul wp-config.php este cel mai sensibil fișier dintr-o instalare WordPress: conține credențialele bazei de date, cheile de securitate și constantele de configurare WordPress. Accesul neautorizat la acest fișier oferă unui atacator controlul complet asupra bazei de date WordPress și, implicit, asupra întregului site.

Securizarea wp-config.php și a celorlalte fișiere critice WordPress necesită o abordare pe mai multe niveluri: permisiuni corecte ale sistemului de fișiere, blocare la nivel de server web și configurații WordPress specifice.

Cum securizezi wp-config.php și fișierele critice pe un server Linux

Măsurile prezentate în acest ghid sunt complementare și se aplică în straturi: fiecare strat adaugă o barieră suplimentară față de atacul precedent. Niciunul singur nu este suficient, dar combinate oferă protecție solidă.

Permisiunile corecte ale sistemului de fișiere

Permisiunile greșite sunt cauza cea mai frecventă a compromiterii fișierelor critice WordPress:

# Setati permisiunile corecte pentru WordPress
find /var/www/site-vostru.ro -type d -exec chmod 755 {} \;
find /var/www/site-vostru.ro -type f -exec chmod 644 {} \;

# wp-config.php: permisiuni mai restrictive
chmod 400 /var/www/site-vostru.ro/wp-config.php
# sau 440 daca serverul web trebuie sa il citeasca
chmod 440 /var/www/site-vostru.ro/wp-config.php

# Verificati permisiunile
ls -la /var/www/site-vostru.ro/wp-config.php

Permisiunea 400 permite citirea doar de root. Permisiunea 440 permite citirea de root și de grupul proprietar (util când PHP rulează sub un utilizator diferit de cel care deține fișierele).

Mutarea wp-config.php în afara directorului public

WordPress caută wp-config.php mai întâi în directorul instalării, apoi în directorul părinte. Mutând wp-config.php un nivel mai sus față de directorul public al serverului web, fișierul devine inaccesibil prin HTTP chiar dacă configurația serverului web are o problemă:

# Structura recomandata:
# /home/user/         <- directorul home (inaccesibil prin web)
#   wp-config.php    <- mutat aici
# /home/user/public_html/   <- radacina publica
#   index.php
#   wp-login.php
#   ...

# Mutati wp-config.php un nivel mai sus
mv ~/public_html/wp-config.php ~/wp-config.php

# WordPress il va gasi automat datorita cautarii in directorul parinte

Pe un VPS cu nginx unde root-ul este /var/www/site-vostru.ro/public, mutați wp-config.php în /var/www/site-vostru.ro/ (un nivel mai sus față de public).

Blocarea accesului prin nginx

Adăugați în configurația nginx a site-ului blocuri explicite pentru fișierele sensibile:

# In blocul server al configuratiei nginx
# Blocati accesul la wp-config.php
location = /wp-config.php {
    deny all;
    return 404;
}

# Blocati accesul la fisierele de log si backup
location ~* \.(log|bak|sql|gz|tar|zip)$ {
    deny all;
    return 404;
}

# Blocati accesul la fisierele ascunse (.git, .env, .htaccess)
location ~ /\. {
    deny all;
    return 404;
}

# Blocati accesul la readme.html, license.txt (dezvaluie versiunea WP)
location ~* ^/(readme\.html|license\.txt|wp-config-sample\.php)$ {
    deny all;
    return 404;
}

Blocarea accesului prin .htaccess (pe Apache/cPanel)

Pe servere Apache sau cPanel, adăugați în rădăcina WordPress:

# Protectie wp-config.php
<Files wp-config.php>
    Order Allow,Deny
    Deny from all
</Files>

# Protectie .htaccess
<Files .htaccess>
    Order Allow,Deny
    Deny from all
</Files>

# Blocare executie PHP in uploads
<Directory /uploads>
    <Files *.php>
        Order Allow,Deny
        Deny from all
    </Files>
</Directory>

Configurații de securitate în wp-config.php

Adăugați aceste constante în wp-config.php pentru hardening suplimentar:

// Dezactivati editorul de teme si plugin-uri din dashboard
define( 'DISALLOW_FILE_EDIT', true );

// Dezactivati instalarea/actualizarea de plugin-uri si teme din dashboard
// (actualizarile se fac prin WP-CLI sau manual)
define( 'DISALLOW_FILE_MODS', true );

// Dezactivati modul debug in productie
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_LOG', false );
define( 'WP_DEBUG_DISPLAY', false );

// Prefix tabel diferit de wp_ implicit
// (setat la instalare, nu dupa)
// $table_prefix = 'wp83_';

// Limitati reviziile articolelor
define( 'WP_POST_REVISIONS', 5 );

// Mutati directorul wp-content daca doriti obscuritate suplimentara
// define( 'WP_CONTENT_DIR', '/var/www/site/assets' );
// define( 'WP_CONTENT_URL', 'https://site-vostru.ro/assets' );

Rotația cheilor de securitate

Cheile de securitate din wp-config.php (AUTH_KEY, SECURE_AUTH_KEY etc.) autentifică sesiunile utilizatorilor. Regenerarea lor deconectează toți utilizatorii autentificați curent, ceea ce este util după o suspiciune de compromitere:

# Regenerati cheile prin WP-CLI
wp config shuffle-salts

# Sau descarcati chei noi manual de la:
# https://api.wordpress.org/secret-key/1.1/salt/
# si inlocuiti blocul din wp-config.php

Monitorizarea modificărilor fișierelor critice

# Creati o suma de control a wp-config.php
sha256sum ~/wp-config.php > ~/wp-config.sha256

# Verificati periodic daca fisierul s-a modificat
sha256sum -c ~/wp-config.sha256

# Script cron zilnic de verificare
echo '0 6 * * * sha256sum -c ~/wp-config.sha256 || \
    echo "wp-config.php modificat!" | mail -s "Alerta" admin@site.ro' \
    | crontab -

Concluzie

Securizarea wp-config.php și a fișierelor critice WordPress necesită măsuri la mai multe niveluri: permisiuni restrictive ale sistemului de fișiere, mutarea fișierului în afara directorului public, blocarea la nivel de server web și configurații WordPress care limitează modificările din dashboard. Implementate împreună, aceste măsuri reduc semnificativ riscul expunerii credențialelor bazei de date chiar și în prezența altor vulnerabilități.

Pe serverele noastre VPS cu acces root complet, puteți implementa toate măsurile de hardening descrise în acest ghid fără restricțiile unui mediu de hosting shared.

Înapoi sus
Your Cart

Your cart is empty.