Ubuntu 18.04/19.10 Üzerinde phpMyAdmin Kurulumu & Güvenliğini Sağlama

Birçok kullanıcı MySQL gibi bir veritabanı yönetim sisteminin işlevselliğine ihtiyaç duysa da, MySQL’i yalnızca komut isteminden yönetmek rahatsız edici olabilir.

phpMyAdmin, kullanıcıların bir web arayüzü üzerinden MySQL ile etkileşime girebilmesi için oluşturulmuş açık kaynak kodlu bir yazılımdır. Bu kılavuzda, bir Ubuntu 18.04 sisteminde veritabanlarınızı yönetmek için phpMyAdmin’in nasıl kurulacağını ve güvenliğini sağlayacağınızı tartışacağız.

Ön şartlar

  • Ubuntu 18.04/19.10 sunucusu (DigitalOcean ve Vultr tavsiyemdir)
  • Yapılandırılmış bir ufw güvenlik duvarı
  • SSH erişimi olan yetkili bir sudo ya da root kullanıcısı

Ayrıca Ubuntu 18.04 sunucunuzda LAMP (Linux, Apache, MySQL ve PHP) kurulumunu tamamladığınızı varsayacağız. Bunu henüz tamamlamadıysanız Ubuntu 18.04 Üzerinde Linux, Apache, MySQL, PHP (LAMP) Kurulumu öğreticisini takip edebilirsiniz.

Son olarak, phpMyAdmin gibi yazılımları kullanırken dikkat etmeniz gereken önemli hususlar vardır, çünkü phpMyAdmin:

  • MySQL kurulumunuzla doğrudan iletişim kurar,
  • MySQL kimlik bilgilerinizi kullanarak kimlik doğrulamalarını işler,
  • Rastgele SQL sorguları için sonuçlar yürütür ve döndürür

Bu nedenlerle ve sık sık saldırıya yönelik olarak yaygın olarak kullanılan bir PHP uygulaması olduğundan, phpMyAdmin’i uzak sistemlerde düz bir HTTP bağlantısı üzerinden çalıştırmamalısınız. SSL / TLS sertifikası ile yapılandırılmış mevcut bir alan adınız yoksa Ubuntu 18.04 Üzerinde Apache'ye Let's Encrypt İle SSL Sertifikası Kurulumu öğreticisini takip edebilirsiniz.

Bu adımları tamamladıktan sonra bu kılavuzu kullanmaya hazırsınız.

Adım 1 - phpMyAdmin Kurulumu

Başlamak için, varsayılan Ubuntu depolarından phpMyAdmin’i yükleyeceğiz.

sudo apt update && sudo apt install phpmyadmin -y

Bu, kurulumunuzu doğru şekilde yapılandırmak için size birkaç soru soracaktır.

  • Sunucu seçimi ekranında apache2 SPACE tuşu ardından TAB tuşu seçin,
  • Veritabanını kurmak için dbconfig-common kullanılıp kullanılmayacağı sorulduğunda Yes seçin,
  • Daha sonra sizden phpMyAdmin için bir MySQL uygulama şifresi seçmeniz ve onaylamanız istenecektir

Şimdi Apache yeniden başlatın;

sudo systemctl restart apache2

phpMyAdmin artık yüklendi ve yapılandırıldı. Ancak, oturum açıp MySQL veritabanlarınızla etkileşime girmeye başlamadan önce, MySQL kullanıcılarınızın programla etkileşim için gereken ayrıcalıklara sahip olduğundan emin olmanız gerekir.

Adım 2 - Kullanıcı Kimlik Doğrulamasını ve Ayrıcalıklarını Ayarlama

Sunucunuza phpMyAdmin yüklediğinizde, otomatik olarak yazılım için altta yatan işlemleri gerçekleştiren phpmyadmin adlı bir veritabanı kullanıcısı oluşturulur. Yükleme sırasında ayarladığınız yönetici parolasıyla bu kullanıcı olarak oturum açmak yerine, kök MySQL kullanıcısı olarak veya phpMyAdmin arabirimi aracılığıyla sadece veritabanlarını yönetmeye adanmış bir kullanıcı olarak oturum açmanız önerilir.

MySQL Kök Hesabı için Şifre Erişimini Yapılandırma

MySQL 5.7 (ve sonraki sürümleri) çalıştıran Ubuntu sistemlerinde, kök MySQL kullanıcısı bir şifre yerine varsayılan olarak auth_socket eklentisini kullanarak kimlik doğrulaması yapacak şekilde ayarlanmıştır . Bu, birçok durumda daha fazla güvenlik ve kullanılabilirlik sağlar, ancak phpMyAdmin gibi harici bir yazılımın kullanıcıya erişmesine izin vermeniz gerektiğinde işleri karmaşık hale getirebilir.

phpMyAdmin oturumunda kök MySQL kullanıcısı için kimlik doğrulama yöntemini auth_socket > mysql_native_password değiştirmeliyiz. Bizim LAMP kurulumu öğreticimizi uyguladıysanız bu işlemi zaten yapmışsınız demektir, Önceden yapmadıysanız. Bunu yapmak için terminalinizden MySQL istemini açın:

sudo mysql

Ardından, MySQL kullanıcı hesaplarınızın her birinin aşağıdaki komutla hangi kimlik doğrulama yöntemini kullandığını kontrol edin:

SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *91EA82EFAD0677E20FDAEC7F11E15244530996F6 | auth_socket            | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *70B3E55DA437B329F2F1A90C66719B666CBF4B9E | mysql_native_password | localhost |
| phpmyadmin       | *91EA82EFAD0677E20FDAEC7F11E15244530996F6 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Bu örnekte, kök kullanıcının aslında auth_socket eklentisini kullanarak kimlik doğrulaması yaptığını görebilirsiniz. Kök hesabını bir parolayla kimlik doğrulaması yapacak şekilde yapılandırmak için aşağıdaki ALTER USER komutu çalıştırın . Şifreniz2020*- kısmını kendi seçtiğiniz güçlü (Bir büyük harf, bir küçük harf, bir rakam ve özel simgeler) bir şifreyle değiştirdiğinizden emin olun:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Şifreniz2020*-';

Ardından, FLUSH PRIVILEGES ile sunucunuza veritabanı tablolarının yeniden yüklemesi gerektiğini ve yeni değişikliklerinizi yürürlüğe koymasını söyleyebilrisiniz:

FLUSH PRIVILEGES;

Kök kullanıcının artık auth_socket eklentisini kullanarak kimlik doğrulaması yapmadığını doğrulamak için her bir kullanıcı tarafından kullanılan kimlik doğrulama yöntemlerini yine kontrol edin:

SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *91EA82EFAD0677E20FDAEC7F11E15244530996F6 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *70B3E55DA437B329F2F1A90C66719B666CBF4B9E | mysql_native_password | localhost |
| phpmyadmin       | *91EA82EFAD0677E20FDAEC7F11E15244530996F6 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Bu örnek çıktıda kök MySQL kullanıcısının artık bir parola kullanarak kimliğini doğruladığını görebilirsiniz. Bunu kendi sunucunuzda da onayladıktan sonra, MySQL kabuğundan çıkabilirsiniz.

exit

Özel bir MySQL Kullanıcısı için Parola Erişimini Yapılandırma

Alternatif olarak, bazılarınız sadece phpMyAdmin’e adanmış bir kullanıcıyla bağlanmayı daha doğru bulabilir. Bunu yapmak için MySQL komut istemcisini bir kez daha açın:

sudo mysql

Not: Önceki bölümde açıklandığı gibi parola kimlik doğrulamasını etkinleştirdiyseniz, MySQL komut istemcisine erişmek için farklı bir komut kullanmanız gerekir.

mysql -u root -p

Şimdi yeni bir kullanıcı oluşturun;

CREATE USER 'yenikullanici'@'localhost' IDENTIFIED BY 'Şifreniz2020*-';

Ardından, yeni kullanıcınıza uygun yetkileri verin. Örneğin yenikullanici için, veritabanındaki tüm tablolara bu komutla kullanıcı ayrıcalıklarını ekleme, değiştirme ve kaldırma yetkisi verebilirsiniz:

GRANT ALL PRIVILEGES ON *.* TO 'yenikullanici'@'localhost' WITH GRANT OPTION;
exit

Artık web arayüzüne sunucunuzun alan adını veya genel IP adresini ve ardından aşağıdakileri ziyaret ederek erişebilirsiniz /phpmyadmin :

http://sizinalanadiniz.com/phpmyadmin
http://sunucuipadresiniz/phpmyadmin

Arabirimde kök olarak veya yeni yapılandırdığınız yeni kullanıcı adı ve parola ile oturum açın.

Giriş yaptığınızda, aşağıdaki gibi görünen kullanıcı arayüzünü göreceksiniz:

Artık phpMyAdmin’e bağlanıp etkileşimde bulunabildiğinize göre, tek yapmanız gereken saldırganlardan korumak için sistem güvenliğinizi güçlendirmektir.

Adım 3 - phpMyAdmin Sunucunuzun Güvenliğini Sağlama

Botlar ve saldırganlar, varsayılan phpMyAdmin giriş sayfası için web sunucularını sürekli olarak tarar, bu nedenle URL’yi başka bir şeye değiştirmeniz önerilir.

Bu örnekte bunu sizinalanadiniz.com/phpmyadmin yerine sizinalanadiniz.com/gizlipma olarak değiştireceğiz.

Nano metin düzenleyicisini kullanarak Apache için phpMyAdmin yapılandırma dosyasını açın

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Alias kısmını /phpmyadmin yerine /gizlipma olarak değiştirin - bunu istediğiniz gibi değiştirebilirsiniz.

Alias /gizlipma /usr/share/phpmyadmin

Daha sonra Apache yeniden başlatın;

sudo systemctl restart apache2

Yaygınlığı nedeniyle, phpMyAdmin saldırganlar için popüler bir hedeftir ve yetkisiz erişimi önlemek için ekstra özen göstermelisiniz. Bunu yapmanın en kolay yollarından biri, Apache’nin yerleşik .htaccess kimlik doğrulama ve yetkilendirme işlevlerini kullanarak tüm uygulamanın önüne bir geçit yerleştirmektir.

Bunu yapmak için, önce .htaccess Apache yapılandırma dosyanızı düzenleyerek dosya geçersiz kılma kullanımını etkinleştirmelisiniz .

Apache yapılandırma dizininize yerleştirilen bağlı dosyayı düzenleyin:

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Yapılandırma dosyasının <Directory /usr/share/phpmyadmin> bölümüne AllowOverride All yönergesini ekleyin:

<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All

Bu satırı eklediğinizde dosyayı kaydedip kapatın.

Yaptığınız değişiklikleri uygulamak için Apache’yi yeniden başlatın:

sudo systemctl restart apache2

Artık .htaccess uygulamanız için kullanımı etkinleştirdiğinize göre , aslında biraz güvenlik uygulamak için bir tane oluşturmanız gerekir.

Bunun başarılı olması için dosyanın uygulama dizininde oluşturulması gerekir. Gerekli dosyayı oluşturabilir ve şunu yazarak kök düzenleyicisiyle metin düzenleyicinizde açabilirsiniz:

sudo nano /usr/share/phpmyadmin/.htaccess

Bu dosyaya aşağıdaki satırları girin:

AuthType Basic
AuthName "Ellibirinci Bolge"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

Bu satırların anlamları:

  • AuthType Basic: Bu satır kimlik doğrulama türünü belirtir.
  • AuthName: Kimlik doğrulama iletişim kutusu için mesajı ayarlar.
  • AuthUserFile: Kimlik doğrulama için kullanılacak şifre dosyasının konumunu ayarlar.
  • Require valid-user: Yalnızca kimliği doğrulanmış kullanıcılara bu kaynağa erişim izni verilmesi gerektiğini belirtir. Yetkisiz kullanıcıların girişini gerçekten engelleyen satır budur.

İşiniz bittiğinde dosyayı kaydedin ve kapatın.

Şifre dosyanız için seçtiğiniz konum /etc/phpmyadmin/.htpasswd olacaktır. Şimdi htpasswd yardımcısı ile istediğiniz kullanıcıyı belirleyebilirsiniz:

sudo htpasswd -c /etc/phpmyadmin/.htpasswd muhyal

Oluşturduğunuz kullanıcı için bir parola seçmeniz ve onaylamanız istenecektir. Daha sonra dosya, girdiğiniz parolayla oluşturulacaktır.

Eğer ek bir kullanıcı daha girmek istiyorsanız, yapmanız gereken komutu -c olmadan tekrarlamanızdır:

sudo htpasswd /etc/phpmyadmin/.htpasswd ekkullanici

Şimdi, phpMyAdmin alt dizininize eriştiğinizde, az önce yapılandırdığınız ek hesap adı ve parola istenecektir:

https://sizinalanadiniz.com/gizlipma
https://sunucuipadresiniz/gizlipma

Apache kimlik doğrulamasını geçtikten sonra, MySQL kimlik bilgilerinizi girmek için normal phpMyAdmin kimlik doğrulama sayfasına yönlendirilirsiniz. Bu kurulum aslında, phpMyAdmin geçmişte güvenlik açıklarından muzdarip olduğu için arzu edilen ek bir güvenlik katmanı ekler.

Sonuç

Artık phpMyAdmin’i yapılandırdınız ve Ubuntu 18.04 sunucunuzda kullanıma hazır. Bu arabirimi kullanarak kolayca veritabanları, kullanıcılar, tablolar vb. oluşturabilir ve yapıları, verileri silme, değiştirme gibi olağan işlemleri gerçekleştirebilirsiniz.