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.