Komutları üretim sunucusunda çalıştırmadan önce yedek alın ve mümkünse bir test ortamında deneyin. Yönetim erişiminizi (SSH, panel) kaybetmemek için ayar değişikliklerinde açık bir ikinci oturum bulundurun.
Bu rehberde ne yapacağız?
Bu rehberde MariaDB'yi Linux sunucuya kurup güvenli şekilde yapılandıracaksınız: güvenlik betiğinin çalıştırılması, yalnızca yerelde dinleme, uygulama için en az yetkili kullanıcı ve veritabanı oluşturma, yedekleme alışkanlığı. Hosting ve sunucu yöneticileri için hazırlanmıştır; yaklaşık 30-40 dakika sürer.
Veritabanı sunucuları saldırganların birincil hedefidir. Varsayılan ayarlar kurulum için kolaylık sağlar ama üretimde sıkılaştırma gerekir. Doğru yapılandırılmış bir MariaDB, uygulamanıza yalnızca ihtiyacı olan yetkiyi verir ve ağa gereksiz açılmaz.
Gereksinimler
- Debian/Ubuntu veya AlmaLinux/Rocky Linux sunucu ve sudo yetkisi
- Uygulamanın veritabanına hangi adresten bağlanacağının bilgisi
- Mevcut bir veritabanı varsa tam yedek: kurulum veya yapılandırma değişikliğinden önce veriyi yedekleyin
- Güvenlik duvarı düzenleme yetkisi
Adım adım MariaDB kurulumu ve güvenliği
1. MariaDB'yi kurun
Debian/Ubuntu için:
sudo apt update
sudo apt install mariadb-server
sudo systemctl enable --now mariadbAlmaLinux/Rocky için:
sudo dnf install mariadb-server
sudo systemctl enable --now mariadb2. Güvenlik betiğini çalıştırın
Betik, anonim kullanıcıları, test veritabanını ve uzaktan root girişini ele alır. Yeni sürümlerde komut adı mariadb-secure-installation, eski sürümlerde mysql_secure_installation'dır. Soruları dikkatlice okuyup yanıtlayın. MariaDB 10.4 ve sonrasında root hesabı kurulumda zaten unix_socket ile korunur; betik de bunu belirterek unix_socket'e geçiş ve root parolası sorularına “n” yanıtının güvenli olduğunu söyler. Daha eski sürümlerde (örneğin AlmaLinux/Rocky 8'in varsayılan akışı 10.3) root parolası boş gelebilir; bu durumda güçlü bir root parolası belirleyin. Anonim kullanıcıların silinmesi, uzaktan root girişinin kapatılması ve test veritabanının kaldırılması her durumda önerilir.
sudo mariadb-secure-installation3. Dinleme adresini sınırlayın
Uygulama aynı sunucudaysa MariaDB'nin yalnızca yerelde dinlemesi yeterlidir. Yapılandırma dosyası Debian/Ubuntu'da genellikle /etc/mysql/mariadb.conf.d/50-server.cnf, AlmaLinux/Rocky'de /etc/my.cnf.d/mariadb-server.cnf konumundadır. Dosyayı düzenlemeden önce yedekleyin ve [mysqld] bölümüne ekleyin.
[mysqld]
bind-address = 127.0.0.1
skip-name-resolve
local_infile = 0Uzak uygulama sunucusu gerekiyorsa bind-address değerini yalnızca özel ağ IP'sine ayarlayın ve güvenlik duvarında 3306 portunu yalnızca o sunucuya açın. Genel IP üzerinde dinletmeyin. skip-name-resolve kullanırsanız yetkilendirmelerde host adı yerine IP kullanmanız gerekir.
sudo systemctl restart mariadb4. Uygulama için veritabanı ve kullanıcı oluşturun
Uygulamaya root yetkisi vermeyin. Her uygulama için ayrı veritabanı ve yalnızca o veritabanında gerekli yetkilere sahip ayrı kullanıcı tanımlayın. Parolayı rastgele üretin (openssl rand -base64 24).
Eski sürümlerde mariadb istemci adı bulunmayabilir; o durumda sudo mysql kullanın.
sudo mariadbCREATE DATABASE uygulamadb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'uygulama'@'localhost' IDENTIFIED BY 'BURAYA_GUCLU_PAROLA';
GRANT SELECT, INSERT, UPDATE, DELETE ON uygulamadb.* TO 'uygulama'@'localhost';
FLUSH PRIVILEGES;Uygulama şema değişikliği (migration) yapıyorsa geçici olarak CREATE, ALTER, INDEX gibi yetkilere ihtiyaç duyabilir; bunları gerektiği kadar verin ve işlem bitince geri alın. Uzak bağlantı için kullanıcıyı 'uygulama'@'10.10.20.%' gibi dar bir adres aralığıyla tanımlayın.
5. Yetkileri gözden geçirin
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 'uygulama'@'localhost';Beklenmeyen kullanıcıları ve boş parolalıları kaldırın (DROP USER).
6. Düzenli yedek alın
Mantıksal yedek için mysqldump kullanabilirsiniz. --single-transaction, InnoDB tablolarında kilitlemeden tutarlı yedek verir. Yedek dosyası hassas veri içerir; izinlerini kısıtlayın ve sunucu dışına kopyalayın. Yeni MariaDB sürümlerinde aracın asıl adı mariadb-dump'tır; mysqldump adı uyumluluk için korunur.
umask 077
sudo mysqldump --single-transaction --routines --events uygulamadb > uygulamadb-$(date +%F).sqlÖnemli: Yedeğin işe yaradığını düzenli olarak bir test ortamında geri yükleyerek doğrulayın.
Doğrulama
Servis durumunu, dinleme adresini ve kullanıcı bağlantısını kontrol edin.
sudo systemctl status mariadb
sudo ss -tlnp | grep 3306
mariadb -u uygulama -p uygulamadb -e 'SELECT 1;'ss çıktısında 3306'nın yalnızca 127.0.0.1 (veya belirttiğiniz özel IP) üzerinde dinlediğini görmelisiniz. Son komutta parola sorulur ve sorgu 1 döndürmelidir. Uygulama kullanıcısı ile başka bir veritabanına erişmeye çalıştığınızda Access denied almanız gerekir.
Sık karşılaşılan sorunlar
- Access denied for user: kullanıcı, parola veya host eşleşmesi hatalıdır.
'kullanici'@'localhost'ile'kullanici'@'%'farklı hesaplardır. - Can't connect to MySQL server: servis çalışmıyor veya bind-address istemcinin geldiği arayüzü içermiyor.
journalctl -u mariadbile bakın. - root ile parola girişi çalışmıyor: root hesabı unix_socket ile doğrulanır;
sudo mariadbkullanın. - Servis yapılandırma sonrası açılmıyor: yazım hatası olabilir; yedek dosyaya dönüp günlükleri inceleyin.
- Disk doluyor: ikili günlüklerin (binlog) saklama süresini ve yedek dosyalarını kontrol edin.
Güvenlik ve bakım notları
- 3306 portunu internete açmayın; uzak erişim gerekiyorsa VPN veya özel ağ ve güvenlik duvarı kısıtı kullanın.
- Uygulamalara root veya GRANT ALL yetkisi vermeyin.
- MariaDB sürümünü destekli ve güncel tutun; güvenlik güncellemelerini uygulayın.
- Parolaları uzun ve benzersiz seçin, uygulama yapılandırma dosyalarının izinlerini kısıtlayın.
- Düzenli yedek alın ve geri yükleme testi yapın.
- Yavaş sorgu ve hata günlüklerini izleyin.
Sık sorulan sorular
MariaDB ile MySQL arasında fark var mı?
MariaDB, MySQL'den ayrılmış bir projedir ve büyük ölçüde uyumludur; ancak bazı özellik ve komut adları zamanla ayrışmıştır. Bu rehberdeki temel işlemler her ikisi için benzerdir.
Uzaktan bağlantıyı güvenle nasıl açarım?
Yalnızca özel ağ arayüzünde dinletin, güvenlik duvarında yalnızca uygulama sunucusunun IP'sine izin verin ve mümkünse TLS ile şifreleyin. Genel internete açmayın.
Root parolasını belirlemem gerekir mi?
Modern kurulumlarda root, sunucudaki root kullanıcısına bağlı unix_socket ile doğrulanır; ağ üzerinden parola ile root girişi gerekmiyorsa bu daha güvenlidir. Uzaktan root girişi kapalı kalmalıdır.
İlgili sözlük terimleri
Bu kategorideki diğer rehberler
- Postfix ile giden e-posta yönlendirme (smarthost) ve temel güvenlikPostfix ile giden e-postaları kimlik doğrulamalı SMTP röle (smarthost) üzerinden TLS ile gönderme, yalnızca yerel kullanım için güvenli yapılandırma ve açık röle kontrolü rehberi.
- logrotate yapılandırması: günlük döndürme, sıkıştırma ve saklamalogrotate ile günlük dosyalarını döndürme, sıkıştırma ve saklama süresini ayarlama; özel uygulama günlükleri için yapılandırma yazma, test etme ve sık hataları çözme rehberi.
- GoAccess ile Nginx/Apache web log analiziGoAccess ile Nginx ve Apache erişim günlüklerini terminalde ve HTML rapor olarak analiz etme, log formatı seçimi, gz arşivlerini okuma, zamanlanmış rapor ve erişim koruması rehberi.
- Memcached kurulumu ve güvenliğiMemcached önbellek sunucusunu Debian ve RHEL tabanlı sistemlere kurma, UDP kapatma, bind adresi ve güvenlik duvarıyla erişimi kısıtlama ve SASL notlarını içeren güvenli kurulum rehberi.