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.
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.
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.
phpMyAdmin kurulmadan önce şunların hazır olması gerekir:
# 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 kur
apt install -y phpmyadmin
Kurulum sırasında:
apache2 veya lighttpd (Nginx kullanıyorsanız hiçbirini seçmeyin)dbconfig-common ile veritabanı yapılandırması: YesPaket 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
# 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
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
# .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>
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
# 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
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;
}
-- 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;
// 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;
# 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>
# phpmyadmin dizinini yeniden adlandır
mv /var/www/html/phpmyadmin /var/www/html/db_manager_x7k2
# Nginx/Apache yapılandırmasını güncelle
// 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';
# Kurulum tamamlandıktan sonra setup dizinini sil
rm -rf /var/www/html/phpmyadmin/setup
# /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
# 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'
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.
Üç şeyi kontrol edin: 1) Dizin izinlerini doğrulayın (chown -R www-data:www-data /var/www/html/phpmyadmin), 2) Apache/Nginx yapılandırmasında 'Require all granted' veya 'allow' kurallarını kontrol edin, 3) IP kısıtlaması varsa kendi IP adresinizin izin listesinde olduğundan emin olun.
Bu kasıtlı bir güvenlik önlemidir. config.inc.php dosyasında $cfg['Servers'][$i]['AllowRoot'] = false; ayarı root girişini engelliyor olabilir. Güvenlik açısından root yerine yeterli yetkiye sahip ayrı bir kullanıcı oluşturmanız önerilir: CREATE USER 'pma_admin'@'localhost' IDENTIFIED BY 'Sifre'; GRANT ALL PRIVILEGES ON *.* TO 'pma_admin'@'localhost';
Doğrudan internete açmak önerilmez. Güvenli erişim için: SSL kullanın, HTTP Basic Auth ekleyin, varsayılan URL'yi değiştirin (/phpmyadmin yerine rastgele bir yol), IP kısıtlaması uygulayın veya VPN üzerinden erişim sağlayın. Bu önlemlerin tamamını uygulamak en güvenli yaklaşımdır.
config.inc.php dosyasında $cfg['blowfish_secret'] değeri boş veya çok kısa. openssl rand -base64 32 komutuyla 32+ karakterlik rastgele bir anahtar oluşturun ve bu değere atayın. Değişiklik sonrası sayfayı yenileyin.
phpMyAdmin 5.x sürümü PHP 7.2 veya üzerini gerektirir. En güncel phpMyAdmin sürümleri için PHP 8.0+ önerilir. php -v komutuyla mevcut PHP sürümünüzü kontrol edebilirsiniz. PHP 8.1 veya 8.2 ile en iyi uyumluluk ve performans elde edilir.
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 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, temel komutlar, persistence ayarları, Redis vs Memcached karşılaştırması ve uygulama entegrasyonu. Adım adım cache katmanı rehberi.