Linux için 12 MySQL/MariaDB Güvenliği En İyi Uygulamaları


MySQL dünyanın en popüler açık kaynaklı veritabanı sistemidir ve MariaDB (MySQL'in bir çatalı) dünyanın en hızlı büyüyen açık kaynaklı veritabanı sistemidir. MySQL sunucusu kurulduktan sonra varsayılan yapılandırması güvenli değildir ve güvenliğinin sağlanması genel veritabanı yönetiminde temel görevlerden biridir.

Ayrıca Okuyun: Yeni Başlayanlar İçin MySQL/MariaDB'yi Öğrenin – Bölüm 1

Saldırganlar her zaman sistemin herhangi bir bölümündeki güvenlik açıklarını taradığından ve veritabanları geçmişte önemli hedef alanlar olduğundan, bu, genel Linux sunucu güvenliğinin sağlamlaştırılmasına ve artırılmasına katkıda bulunacaktır. Yaygın bir örnek, MySQL veritabanı için kök parolanın kaba kuvvetle kullanılmasıdır.

Bu kılavuzda Linux için yararlı MySQL/MariaDB güvenliği en iyi uygulamasını açıklayacağız.

1. Güvenli MySQL Kurulumu

Bu, MySQL sunucusunu kurduktan sonra veritabanı sunucusunun güvenliğini sağlamaya yönelik önerilen ilk adımdır. Bu komut dosyası sizden şunları yapmanızı isteyerek MySQL sunucunuzun güvenliğini artırmanıza yardımcı olur:

  • Kurulum sırasında ayarlamadıysanız, kök hesap için bir şifre belirleyin.
  • Yerel ana bilgisayarın dışından erişilebilen kök hesapları kaldırarak uzaktan kök kullanıcı oturum açma işlemini devre dışı bırakın.
  • anonim kullanıcı hesaplarını kaldırın ve varsayılan olarak tüm kullanıcılar, hatta anonim kullanıcılar tarafından erişilebilen veritabanını test edin.
mysql_secure_installation

Çalıştırdıktan sonra root şifresini belirleyin ve [Evet/Y] yazıp [Enter] tuşuna basarak bir dizi soruyu yanıtlayın.

2. Veritabanı Sunucusunu Geri Döngü Adresine Bağlayın

Bu yapılandırma uzak makinelerden erişimi kısıtlayacak ve MySQL sunucusuna yalnızca localhost içinden gelen bağlantıları kabul etmesini söyleyecektir. Bunu ana yapılandırma dosyasında ayarlayabilirsiniz.

vi /etc/my.cnf	                   [RHEL/CentOS]	
vi /etc/mysql/my.conf                    [Debian/Ubuntu] 
OR
vi /etc/mysql/mysql.conf.d/mysqld.cnf    [Debian/Ubuntu] 

Aşağıdaki satırı [mysqld] bölümünün altına ekleyin.

bind-address = 127.0.0.1

3. MySQL'de LOCAL INFILE'ı devre dışı bırakın

Güvenliği güçlendirmenin bir parçası olarak, [mysqld] bölümü altındaki aşağıdaki yönergeyi kullanarak MySQL içinden temel dosya sistemine erişimi engellemek için local_infile'ı devre dışı bırakmanız gerekir.

local-infile=0

4. MYSQL Varsayılan Bağlantı Noktasını Değiştirin

Port değişkeni, TCP/IP bağlantılarını dinlemek için kullanılacak MySQL bağlantı noktası numarasını ayarlar. Varsayılan bağlantı noktası numarası 3306'dır ancak bunu gösterildiği gibi [mysqld] bölümünden değiştirebilirsiniz.

Port=5000

5. MySQL Günlüğünü Etkinleştirin

Günlükler, bir sunucuda ne olduğunu anlamanın en iyi yollarından biridir; herhangi bir saldırı durumunda, izinsiz girişle ilgili etkinlikleri günlük dosyalarından kolayca görebilirsiniz. [mysqld] bölümünün altına aşağıdaki değişkeni ekleyerek MySQL günlük kaydını etkinleştirebilirsiniz.

log=/var/log/mysql.log

6. MySQL Dosyalarında Uygun İzinleri Ayarlayın

Tüm mysql sunucu dosyaları ve veri dizinleri için uygun izinlere sahip olduğunuzdan emin olun. /etc/my.conf dosyası yalnızca root'a yazılabilir olmalıdır. Bu, diğer kullanıcıların veritabanı sunucusu yapılandırmalarını değiştirmesini engeller.

chmod 644 /etc/my.cnf

7. MySQL Kabuk Geçmişini Sil

MySQL kabuğunda çalıştırdığınız tüm komutlar, mysql istemcisi tarafından bir geçmiş dosyasında saklanır: ~/.mysql_history. Bu tehlikeli olabilir çünkü oluşturacağınız her türlü kullanıcı hesabı için, kabukta yazdığınız tüm kullanıcı adları ve şifreler geçmiş dosyasına kaydedilecektir.

cat /dev/null > ~/.mysql_history

8. MySQL Komutlarını Komut Satırından Çalıştırmayın

Bildiğiniz gibi terminalde yazdığınız tüm komutlar kullandığınız kabuğa bağlı olarak bir geçmiş dosyasında saklanır (örneğin bash için ~/.bash_history). Bu geçmiş dosyasına erişmeyi başaran bir saldırgan, burada kayıtlı olan tüm şifreleri kolaylıkla görebilir.

Komut satırına aşağıdaki gibi şifre yazmanız kesinlikle önerilmez:

mysql -u root -ppassword_

Komut geçmişi dosyasının son bölümünü kontrol ettiğinizde yukarıda yazdığınız şifreyi göreceksiniz.

history 

MySQL'e bağlanmanın uygun yolu şudur.

mysql -u root -p
Enter password:

9. Uygulamaya Özel Veritabanı Kullanıcılarını Tanımlayın

Sunucuda çalışan her uygulama için yalnızca belirli bir uygulamanın veritabanından sorumlu olan kullanıcıya erişim verin. Örneğin bir wordpress siteniz varsa aşağıdaki gibi wordpress site veritabanı için spesifik bir kullanıcı oluşturun.

mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

ve artık sunucudaki herhangi bir uygulama veritabanını yönetmeyen kullanıcı hesaplarını her zaman kaldırmayı unutmayın.

10. Ek Güvenlik Eklentileri ve Kitaplıkları Kullanın

MySQL aşağıdakiler için bir dizi güvenlik eklentisi içerir: istemcilerin MySQL sunucusuna bağlanma girişimlerini doğrulamak, parola doğrulamak ve hassas bilgiler için depolamayı güvence altına almak; bunların tümü ücretsiz sürümde mevcuttur.

Daha fazlasını burada bulabilirsiniz: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. MySQL Şifrelerini Düzenli Olarak Değiştirin

Bu, genel bir bilgi/uygulama/sistem güvenliği tavsiyesidir. Bunu ne sıklıkla yapacağınız tamamen iç güvenlik politikanıza bağlı olacaktır. Ancak uzun süredir faaliyetlerinizi takip eden "bilgisayarların" MySQL sunucunuza erişmesini engelleyebilir.

MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

12. MySQL Sunucu Paketini Düzenli Olarak Güncelleyin

Güvenlik güncellemelerini ve hata düzeltmelerini takip etmek için satıcının deposundan mysql/mariadb paketlerini düzenli olarak yükseltmeniz önemle tavsiye edilir. Normalde varsayılan işletim sistemi depolarındaki paketler güncel değildir.

yum update
apt update

MySQL/mariadb sunucusunda herhangi bir değişiklik yaptıktan sonra hizmeti her zaman yeniden başlatın.

systemctl restart mariadb		#RHEL/CentOS
systemctl restart mysql		#Debian/Ubuntu

Ayrıca Okuyun: 15 Faydalı MySQL/MariaDB Performans Ayarlama ve Optimizasyon İpucu

Bu kadar! Aşağıdaki yorum formu aracılığıyla sizden haber almayı çok isteriz. Yukarıdaki listede eksik olan MySQL/MariaDB güvenlik ipuçlarını bizimle paylaşın.