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.
İç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+
# 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
# phpMyAdmin kur
apt install -y phpmyadmin
Kurulum sırasında:
- Web sunucusu seçimi:
apache2veyalighttpd(Nginx kullanıyorsanız hiçbirini seçmeyin) dbconfig-commonile 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:
# 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
# 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
// Oluşturulan anahtarı buraya yapıştır
$cfg['blowfish_secret'] = 'BURAYA_RASTGELE_ANAHTAR_GIRIN';
// Geçici dizini ayarla
$cfg['TempDir'] = '/tmp/phpmyadmin';
# Geçici dizini oluştur
mkdir -p /tmp/phpmyadmin
chown www-data:www-data /tmp/phpmyadmin
Apache Yapılandırması
Virtual Host Oluşturma
nano /etc/apache2/sites-available/phpmyadmin.conf
<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>
# Siteyi etkinleştir
a2ensite phpmyadmin.conf
a2enmod rewrite
systemctl reload apache2
Apache ile HTTP Auth Koruması
# .htpasswd dosyası oluştur
htpasswd -c /etc/apache2/.htpasswd admin
# Virtual host'a ekle
nano /etc/apache2/sites-available/phpmyadmin.conf
<Directory /var/www/html/phpmyadmin>
AuthType Basic
AuthName 'phpMyAdmin Access'
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
Nginx Yapılandırması
nano /etc/nginx/sites-available/phpmyadmin
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;
}
}
# 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
# 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)
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
-- 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
// 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ı
# Nginx - sadece belirli IP'lere izin ver
location / {
allow 192.168.1.0/24;
allow 10.0.0.5;
deny all;
}
# 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
# 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
// 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
# Kurulum tamamlandıktan sonra setup dizinini sil
rm -rf /var/www/html/phpmyadmin/setup
Fail2Ban ile Brute Force Koruması
# /etc/fail2ban/filter.d/phpmyadmin.conf
nano /etc/fail2ban/filter.d/phpmyadmin.conf
[Definition]
failregex = ^<HOST> .* 'POST /phpmyadmin/index.php.*' (401|403)
ignoreregex =
# /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
# 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.
İlgili Makaleler
MySQL ve MariaDB Kurulumu: Temel Yönetim Rehberi
MySQL ve MariaDB kurulumu, mysql_secure_installation, veritabanı ve kullanıcı oluşturma, temel SQL komutları, uzak erişim yapılandırması ve performans ayarları. Adım adım rehber.
PostgreSQL Kurulum ve Temel Yönetim Rehberi
PostgreSQL kurulumu, kullanıcı ve veritabanı oluşturma, temel SQL komutları, uzak bağlantı yapılandırması ve yedekleme. Ubuntu/Debian ve RHEL/CentOS için adım adım rehber.
Redis ve Memcached Kurulumu: Cache Katmanı Rehberi
Redis ve Memcached kurulumu, temel komutlar, persistence ayarları, Redis vs Memcached karşılaştırması ve uygulama entegrasyonu. Adım adım cache katmanı rehberi.