Ön Hazırlık
phpMyAdmin kurulumu için sunucuda LAMP paketi hazırda kurulu olmak zorundadır. Her şey tamamsa phpMyAdmin yazılımını kurmaya başlayabiliriz. phpMyAdmin CentOS 8’nin varsayılan deposunda mevcut değil ancak olsa bile kurmanızı önermiyorum zira derlenmiş paketler sürüm olarak oldukça geriden geliyor.
sudo dnf install nano wget unzip
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-5.0.4-all-languages.zip
unzip phpMyAdmin-5.0.4-all-languages.zip
sudo mv phpMyAdmin-5.0.4-all-languages /usr/share/phpmyadmin
Gerekli paketleri kurup phpmyadmin indirdik ve doğru dizine taşımasını yaptık.
Sırada blowfish secret ayarı var. Bunun için phpmyadmin dizinine gidip config dosyasını yeniden adlandırıp bir editörle açıyoruz.
cd /usr/share/phpmyadmin
sudo mv config.sample.inc.php config.inc.php
sudo nano config.inc.php
Benzersiz bir kod oluşturmak için BURAYA bakın. Kodu oluşturup tek tırnak işaretlerinin arasına girdikten sonra F3 ile kaydedin ve F2 ile nano editörden çıkış yapın.
Sırada tmp klasörü oluşturma ve phpmyadmin ana dizin yetkilendirmeleri var. Alttaki komutlar ile /tmp klasörünü oluşturduk, phpmyadmin ana dizinini apache kullanıcısına atadık ve /tmp klasörünün yetkilendirmesini yaptık.
sudo mkdir /usr/share/phpmyadmin/tmp
sudo chown -R apache:apache /usr/share/phpmyadmin
sudo chmod 777 /usr/share/phpmyadmin/tmp
sudo nano /etc/httpd/conf.d/phpmyadmin.conf
Bir editör ile phpmyadmin.conf dosyasını açıyoruz. Dosya içeriği tam olarak alttaki gibi olmalıdır.
Alias /phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin/>
AddDefaultCharset UTF-8
<IfModule mod_authz_core.c>
# Apache 2.4
<RequireAny>
Require all granted
</RequireAny>
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
<Directory /usr/share/phpmyadmin/setup/>
<IfModule mod_authz_core.c>
# Apache 2.4
<RequireAny>
Require all granted
</RequireAny>
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
Yapılan değişikliklerin aktif olması için apache’yi yeniden başlatalım ve çalıştığını kontrol edelim.
systemctl restart httpd
systemctl status httpd
SELinux ve Firewall Ayarları
SELinux kernel seviyesinde iyileştirmeler ve güvenlik sunan bir yazılımdır. phpmyadmin’in doğru çalışması için yeniden konfigüre edilmelidir. Öncelikle ihtiyacımız olacak paketleri kuruyoruz ve SELinux ayarlarını yapıyoruz.
sudo dnf install policycoreutils-python-utils
semanage fcontext –a –t httpd_sys_rw_content_t ‘/usr/share/phpmyadmin/’
semanage fcontext –a –t httpd_sys_rw_content_t “usr/share/phpmyadmin/tmp(/.*)?”
restorecon –Rv ‘/usr/share/phpmyadmin/’
İlk 2 komutun tamamlanması biraz uzun sürebilir. Firewall için aşağıdaki ayarı yapmanız yeterlidir. Bu hata MySQL’in parola doğrulama mekanizması yüzünden meydana gelmektedir. Hatayı düzeltmek için MySQL komut satırına gidin ve bir mysql root parolası oluşturun.
mysql –u root –p
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH myswl_native_password BY ‘password’;
password yazan yere daha önce kurulumda girdiğiniz root mysql parolasını girin.
Kurulumu tamamladık.
Şimdi http://SunucuIP/phpmyadmin adresini tarayıcıda açın ve root şifrenizle giriş yapın.
phpMyAdmin Güvenliği
phpMyAdmin kurulumunu tamamladık ve veritabanı yönetimi için kullanıcı girişimizi yaptık. Bu noktada veritabanlarını dilediğimiz gibi yönetebiliriz ancak bir web arayüzü kurarak MySQL sistemimizi dış dünyaya da açmış olduk.
phpMyAdmin girişinde her ne kadar kimlik doğrulama ekranı olsa da, direkt erişim oldukça büyük bir güvenlik riskidir. Bu yüzden ekstra güvenlik önlemleri almak zorundayız.
PhpMyAdmin gittikçe artan popülaritesi nedeniyle, saldırganların bir numaralı hedefi haline geldi. Kurulumun varsayılan yolları saldırganlar tarafından kolayca tahmin edilebilir durumdadır. Sunucunun saldırıya maruz kalma olasılığını azaltmak için iki basit yol izleyeceğiz.
İlk olarak web erişim konumunu /phpMyAdmin
den başka bir isme değiştirerek saldırganların kullandığı otomatik brute force ataklarından bazılarını atlatacağız. Ayrıca phpMyAdmin oturum açma ekranına ulaşmadan önce geçilmesi gereken sunucu düzeyinde kimlik doğrulama geçidi oluşturacağız.
Arayüz Erişim Konumunu Değiştirme
Apache’nin phpMyAdmin dosyalarını bulması için, önceki adımda phpMyAdmin dizininde bir alias ayarlamıştık. PhpMyAdmin giriş sayfasının bağlantısını değiştirmek için, sembolik bağlantıyı yeniden adlandırmamız yeterlidir. Öncelikle phpmyadmin dizinini açın:
cd /usr/share/phpmyadmin
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
Gördüğünüz gibi, bu dizinde /phpMyAdmin
adında sembolik bir bağımız var. Bu bağlantı adını istediğimiz gibi değiştirebiliriz. Yapacağımız değişiklik, phpMyAdmin’e tarayıcıdan erişim konumunu değiştirecek ve bu da erişim noktasını saldırganlardan gizlemeye yardımcı olacaktır.
Veritabanı ile ilgisi olmayan, konumun amacını belirtmeyen bir ad seçin. Bu kılavuzda, erişim konumuna /aramasorma
adını verdim. Alttaki komutla bağlantıyı yeniden adlandıracağız:
sudo mv phpMyAdmin aramasorma
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 aramasorma -> /usr/share/phpMyAdmin
Şimdi eski sembolik bağlantıdaki dizini tarayıcıdan çağırdığınızda 404 hatası alacaksınız ki, bu ilk güvenlik adımı tamamladığımız anlamına geliyor:
http://SunucuIP/phpMyAdmin
phpMyAdmin arayüzü seçtiğimiz yeni konumda mevcut olacaktır:
http://domain_veya_IP/aramasorma
Web Erişimi Konumu Şifreleme
Kullanacağımız bir sonraki güvenlik özelliği, bir kullanıcının phpMyAdmin oturum açma ekranını görmeden önce geçmesi gereken bir kimlik doğrulama ekranı olacak. Sadece apache yapılandırma dosyasına birkaç ekleme yapacağız.
mkdir /etc/phpmyadmin
htpasswd –c /etc/phpmyadmin/.htpasswd admin
Bu komut ile bir giriş şifresi oluşturacağız. Bu şifre phpmyadmin root şifresinden farklı olmalıdır. Şifreyi belirledikten sonra güvenli bir yerde saklayın.
sudo nano /etc/httpd/conf.d/phpmyadmin.conf
Daha önce oluşturduğumuz bu dosyada tam olarak AddDefaultCharset UTF-8
satırından sonrasına aşağıdaki eki girin.
Options +FollowSymLinks +Multiviews +Indexes
AllowOverride None
AuthType basic
AuthName "Authentication Required"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user
Apache’yi yeniden başlatın.
sudo systemctl restart httpd
Kurulum tamamlandı. Artık güvenli bir biçimde phpmyadmin kullanabiliriz. Lütfen sorularınız varsa konu altına yazın ve sosyal medya hesaplarınızda paylaşım yapmayı unutmayın.