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ğundaYes
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.