Kurulum

phpMyAdmin kurulumu için sunucuda LAMP veya LEMP paketi kurulu olmalıdır. Bu kılavuzda LAMP üzerinde çalışacağız. phpMyAdmin CentOS 8’in varsayılan deposunda mevcut değil ancak olsa bile kurmanızı önermiyorum zira derlenmiş paketler sürüm olarak oldukça geriden geliyor.

Kuruluma geçiyoruz:

sudo dnf install nano wget unzip
sudo dnf install php-pdo php-pecl-zip php-json php-mbstring
wget https://files.phpmyadmin.net/phpMyAdmin/5.1.0/phpMyAdmin-5.1.0-all-languages.zip
unzip phpMyAdmin-5.1.0-all-languages.zip
sudo mv phpMyAdmin-5.1.0-all-languages /usr/share/phpmyadmin

Gerekli paketleri kurup phpmyadmin indirdik ve kullanacağımız dizine taşıdı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. Kodu gireceğiniz yeri aramanıza gerek yok, dosyayı açar açmaz göreceksiniz.

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 editörden çıkış yapın.

Sırada tmp klasörü oluşturma ve phpmyadmin ana dizin yetkilendirmeleri var.

sudo mkdir /usr/share/phpmyadmin/tmp
sudo chown -R apache:apache /usr/share/phpmyadmin
sudo chmod 777 /usr/share/phpmyadmin/tmp

Bu komutlar ile /tmp klasörünü oluşturduk, phpmyadmin ana dizinini apache kullanıcısına atadık ve chmod yetkilendirmesi yaptık.

Nano editörü ile phpmyadmin.conf dosyasını oluşturun.

sudo nano /etc/httpd/conf.d/phpmyadmin.conf

Aşağıdaki içeriği girin:

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 işlemlerin aktif olması için apache’yi yeniden başlatalım ve çalıştığını kontrol edelim.

systemctl restart httpd
systemctl status httpd

SELinux 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. İhtiyacımız olacak paketleri kuruyoruz ve 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. Komutlar tamamlandıktan sonra phpmyadmin klasörünü sunucu ip adresi üzerinden /phpmyadmin şeklinde çağırıp mysql root şifrenizle giriş yapabilirsiniz.

phpMyAdmin Güvenliği

phpMyAdmin kurulumunu tamamladık ve kullanıcı girişimizi yaptık. Bu noktada veritabanlarını dilediğimiz gibi yönetebiliriz ancak bir web arayüzü kurarak veritabanlarına erişimi dış dünyaya açmış olduk. Ekstra güvenlik önlemleri almak zorundayız.

İ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 Konumu 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

Burada /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ırın:

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 giriş adresinizi tarayıcıdan açtığınızda 404 hatası alacaksınız ki, bu ilk güvenlik adımı tamamladığımız anlamına geliyor. Yeni erişim adresiniz /aramasorma olarak değişti.

Web Erişim Konumu Şifreleme

Kullanacağımız bir sonraki güvenlik özelliği, kullanıcının phpMyAdmin oturum açma ekranını görmeden önce geçmesi gereken kimlik doğrulama ekranı olacak. Sadece apache yapılandırma dosyasına birkaç ekleme yapacağız.

mkdir /etc/phpmyadmin
htpasswd –c /etc/phpmyadmin/.htpasswd admin09773

Üstteki komut ile admin09773 kullanıcısına bir giriş şifresi atanacak. Kullanıcı adını kendiniz seçebilirsiniz. Şifreyi de güvenli bir yerde saklayın ve tarayıcınıza asla kaydetmeyin.

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.