Ana içeriğe geç
Kategoriye Dön

phpMyAdmin Kurulumu ve Güvenli Erişim Rehberi

phpMyAdmin kurulumu, Apache ve Nginx yapılandırması, SSL ile güvenli erişim, kullanıcı yönetimi ve güvenlik sertleştirme adımları. Adım adım rehber.

Okuma süresi: 16 dk Veritabanı
phpmyadminmysqlmariadbapachenginxsslgüvenlikveritabanı

İçindekiler

phpMyAdmin Kurulumu ve Güvenli Erişim Rehberi

phpMyAdmin, MySQL ve MariaDB veritabanlarını web tarayıcısı üzerinden yönetmenizi sağlayan açık kaynaklı bir PHP uygulamasıdır. Veritabanı oluşturma, tablo yönetimi, SQL sorguları çalıştırma ve kullanıcı yönetimi gibi işlemleri grafiksel arayüzle yapabilirsiniz. Bu rehberde phpMyAdmin kurulumunu, Apache ve Nginx üzerinde yapılandırmasını ve güvenli erişim ayarlarını ele alacağız.

Ön Gereksinimler

phpMyAdmin kurulmadan önce şunların hazır olması gerekir:

  • Ubuntu 20.04/22.04 veya Debian 11/12
  • MySQL 8.0+ veya MariaDB 10.5+
  • PHP 7.4+ (önerilen: PHP 8.1+)
  • Apache 2.4+ veya Nginx 1.18+
hljs bash
# Sistem güncellemesi
apt update && apt upgrade -y

# PHP ve gerekli modüller
apt install -y php php-mysql php-mbstring php-zip php-gd php-json php-curl

# PHP sürümünü kontrol et
php -v

phpMyAdmin Kurulumu

Ubuntu/Debian Paket Yöneticisi ile Kurulum

hljs bash
# phpMyAdmin kur
apt install -y phpmyadmin

Kurulum sırasında:

  • Web sunucusu seçimi: apache2 veya lighttpd (Nginx kullanıyorsanız hiçbirini seçmeyin)
  • dbconfig-common ile veritabanı yapılandırması: Yes
  • phpMyAdmin için MySQL şifresi belirleyin

Manuel Kurulum (Önerilen)

Paket yöneticisi yerine en güncel sürümü manuel kurmak daha güvenlidir:

hljs bash
# En güncel sürümü indir (sürüm numarasını kontrol edin)
cd /tmp
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz

# Arşivi aç
tar xzf phpMyAdmin-latest-all-languages.tar.gz

# Web dizinine taşı
mv phpMyAdmin-*-all-languages /var/www/html/phpmyadmin

# Sahipliği ayarla
chown -R www-data:www-data /var/www/html/phpmyadmin
chmod -R 755 /var/www/html/phpmyadmin

# Yapılandırma dosyasını oluştur
cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php

Blowfish Secret Anahtarı Oluşturma

hljs bash
# Rastgele 32 karakterlik anahtar oluştur
openssl rand -base64 32

# config.inc.php dosyasını düzenle
nano /var/www/html/phpmyadmin/config.inc.php
hljs php
// Oluşturulan anahtarı buraya yapıştır
$cfg['blowfish_secret'] = 'BURAYA_RASTGELE_ANAHTAR_GIRIN';

// Geçici dizini ayarla
$cfg['TempDir'] = '/tmp/phpmyadmin';
hljs bash
# Geçici dizini oluştur
mkdir -p /tmp/phpmyadmin
chown www-data:www-data /tmp/phpmyadmin

Apache Yapılandırması

Virtual Host Oluşturma

hljs bash
nano /etc/apache2/sites-available/phpmyadmin.conf
hljs apache
<VirtualHost *:80>
    ServerName pma.example.com
    DocumentRoot /var/www/html/phpmyadmin

    <Directory /var/www/html/phpmyadmin>
        Options FollowSymLinks
        DirectoryIndex index.php
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/phpmyadmin_error.log
    CustomLog ${APACHE_LOG_DIR}/phpmyadmin_access.log combined
</VirtualHost>
hljs bash
# Siteyi etkinleştir
a2ensite phpmyadmin.conf
a2enmod rewrite
systemctl reload apache2

Apache ile HTTP Auth Koruması

hljs bash
# .htpasswd dosyası oluştur
htpasswd -c /etc/apache2/.htpasswd admin

# Virtual host'a ekle
nano /etc/apache2/sites-available/phpmyadmin.conf
hljs apache
<Directory /var/www/html/phpmyadmin>
    AuthType Basic
    AuthName 'phpMyAdmin Access'
    AuthUserFile /etc/apache2/.htpasswd
    Require valid-user
</Directory>

Nginx Yapılandırması

hljs bash
nano /etc/nginx/sites-available/phpmyadmin
hljs nginx
server {
    listen 80;
    server_name pma.example.com;
    root /var/www/html/phpmyadmin;
    index index.php;

    # HTTP Auth koruması
    auth_basic 'phpMyAdmin Access';
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    # Hassas dosyaları gizle
    location ~* /(libraries|setup/frames|setup/libs) {
        deny all;
        return 404;
    }
}
hljs bash
# Nginx için htpasswd oluştur
apt install -y apache2-utils
htpasswd -c /etc/nginx/.htpasswd admin

# Siteyi etkinleştir
ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

SSL ile Güvenli Erişim

Let's Encrypt ile Ücretsiz SSL

hljs bash
# Certbot kur
apt install -y certbot python3-certbot-apache
# veya Nginx için:
apt install -y certbot python3-certbot-nginx

# Apache için SSL sertifikası al
certbot --apache -d pma.example.com

# Nginx için SSL sertifikası al
certbot --nginx -d pma.example.com

# Otomatik yenilemeyi test et
certbot renew --dry-run

Manuel SSL Yapılandırması (Nginx)

hljs nginx
server {
    listen 443 ssl http2;
    server_name pma.example.com;
    root /var/www/html/phpmyadmin;
    index index.php;

    ssl_certificate /etc/letsencrypt/live/pma.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pma.example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # HSTS
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains' always;

    auth_basic 'phpMyAdmin Access';
    auth_basic_user_file /etc/nginx/.htpasswd;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }
}

# HTTP'yi HTTPS'e yönlendir
server {
    listen 80;
    server_name pma.example.com;
    return 301 https://$host$request_uri;
}

Kullanıcı Yönetimi

phpMyAdmin için Özel Kullanıcı Oluşturma

hljs sql
-- MySQL/MariaDB'ye bağlan
mysql -u root -p

-- phpMyAdmin yönetim kullanıcısı oluştur
CREATE USER 'pma_admin'@'localhost' IDENTIFIED BY 'GucluSifre123!';
GRANT ALL PRIVILEGES ON *.* TO 'pma_admin'@'localhost' WITH GRANT OPTION;

-- Sadece belirli veritabanına erişim
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'AppSifre456!';
GRANT ALL PRIVILEGES ON myapp.* TO 'app_user'@'localhost';

FLUSH PRIVILEGES;

config.inc.php ile Kullanıcı Kısıtlama

hljs php
// Sadece belirli kullanıcıların giriş yapmasına izin ver
$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = [
    'deny % from all',
    'allow pma_admin from localhost',
    'allow app_user from 192.168.1.0/24',
];

// Root girişini engelle
$cfg['Servers'][$i]['AllowRoot'] = false;

Güvenlik Sertleştirme

IP Kısıtlaması

hljs nginx
# Nginx - sadece belirli IP'lere izin ver
location / {
    allow 192.168.1.0/24;
    allow 10.0.0.5;
    deny all;
}
hljs apache
# Apache - IP kısıtlaması
<Directory /var/www/html/phpmyadmin>
    Require ip 192.168.1.0/24
    Require ip 10.0.0.5
</Directory>

Varsayılan URL'yi Değiştirme

hljs bash
# phpmyadmin dizinini yeniden adlandır
mv /var/www/html/phpmyadmin /var/www/html/db_manager_x7k2

# Nginx/Apache yapılandırmasını güncelle

Oturum Güvenliği

hljs php
// config.inc.php - güvenlik ayarları
$cfg['LoginCookieValidity'] = 1800;    // 30 dakika oturum süresi
$cfg['LoginCookieStore'] = 0;          // Tarayıcı kapanınca oturum sil
$cfg['ForceSSL'] = true;               // SSL zorunlu
$cfg['Servers'][$i]['ssl'] = true;     // MySQL SSL bağlantısı

// Güvenlik başlıkları
$cfg['CSPAllow'] = '';
$cfg['SendErrorReports'] = 'never';

Setup Dizinini Kaldırma

hljs bash
# Kurulum tamamlandıktan sonra setup dizinini sil
rm -rf /var/www/html/phpmyadmin/setup

Fail2Ban ile Brute Force Koruması

hljs bash
# /etc/fail2ban/filter.d/phpmyadmin.conf
nano /etc/fail2ban/filter.d/phpmyadmin.conf
hljs ini
[Definition]
failregex = ^<HOST> .* 'POST /phpmyadmin/index.php.*' (401|403)
ignoreregex =
hljs bash
# /etc/fail2ban/jail.local
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
logpath = /var/log/nginx/phpmyadmin_access.log
maxretry = 5
bantime = 3600

Sorun Giderme

hljs bash
# PHP hata loglarını kontrol et
tail -f /var/log/php8.1-fpm.log

# Nginx hata logları
tail -f /var/log/nginx/error.log

# Apache hata logları
tail -f /var/log/apache2/phpmyadmin_error.log

# phpMyAdmin izinlerini kontrol et
ls -la /var/www/html/phpmyadmin/

# PHP modüllerini kontrol et
php -m | grep -E 'mysql|mbstring|zip'

Sonuç

phpMyAdmin güçlü bir veritabanı yönetim aracıdır ancak doğru güvenlik yapılandırması olmadan ciddi riskler taşır. SSL kullanımı, HTTP kimlik doğrulaması, IP kısıtlaması ve varsayılan URL değişikliği gibi önlemleri mutlaka uygulayın. REXE sunucularında phpMyAdmin güvenli şekilde yapılandırılarak kullanılabilir.