mariadb-secure-installation, yeni kurulmuş bir MariaDB sunucusunda dört temel güvenlik işini etkileşimli olarak yapan bir kabuk betiğidir: root hesapları için parola belirlemek, yerel makine dışından erişilebilen root hesaplarını silmek, anonim kullanıcıları kaldırmak ve varsayılan olarak anonim kullanıcıların erişebildiği test veritabanını silmek. Betiği argümansız çalıştırırsınız, o da her adımda size evet ya da hayır diye sorar.

Önemli bir not: Resmî belgeler, bu betiğin var olma nedenlerinin pek çoğunun artık geçerli olmadığını açıkça yazar. MariaDB'nin güncel kimlik doğrulama modelinde root@localhost hesabı varsayılan olarak unix_socket ile korunur ve çoğu zaman root parolası oluşturmaya gerek yoktur. Bu yazıda betiğin her adımının ne işe yaradığını, hangi adımların bugün hâlâ anlamlı olduğunu, seçeneklerini ve Galera kümesindeki sınırını belgelere dayanarak anlatıyoruz.

Betik ne zaman gerekli, ne zaman gereksiz?

Betik ne zaman gerekli, ne zaman gereksiz? Root parolası belirleme, Uzak root hesaplarını silme, Anonim kullanıcıları silme, Test veritabanını silme

Eski kurulum rehberlerinin neredeyse hepsi "kurulumdan hemen sonra root parolası belirleyin" der. Bunun nedeni, eski sürümlerde root hesabının parolasız ve herkese açık gelmesiydi. Belgelerdeki Authentication sayfasına göre artık herkese açık, her şeye yetkili bir root hesabı yoktur ve kurulum betikleri root parolası sormaz; çünkü hesap otomatik olarak güvenli biçimde oluşturulur. Varsayılan iki tam yetkili hesap, root@localhost ve veri dizininin sahibi olan sistem kullanıcısıyla aynı adlı hesaptır (çoğunlukla mysql@localhost).

sql
CREATE USER root@localhost IDENTIFIED VIA unix_socket
    OR mysql_native_password USING 'invalid'
CREATE USER mysql@localhost IDENTIFIED VIA unix_socket
    OR mysql_native_password USING 'invalid'

Bu tanımın anlamı şudur: İşletim sisteminde root kullanıcısıysanız Unix soket dosyası üzerinden MariaDB'ye root olarak parolasız girersiniz. Parola yöntemi ikinci seçenek olarak tanımlıdır, ama "invalid" geçerli bir parola özeti olmadığı için başlangıçta kapalıdır. Belgeler bu yaklaşımın gerekçesini de verir: sistem root kullanıcısı zaten bütün veri dosyalarına ve süreç belleğine erişebildiği için ondan ayrıca parola istemek ek güvenlik getirmez; parola olmadığında unutulacak ya da bir betikte düz metin olarak saklanacak bir parola da olmaz.

Buna rağmen betiğin bazı adımları hâlâ işe yarar. Anonim kullanıcı ve test veritabanı, kurulumun nasıl yapıldığına bağlı olarak bulunabilir. mariadb-install-db sayfasına göre bu araç çalıştığında veri dizininde test adlı bir klasör oluşturur; --skip-test-db seçeneği verilirse ne test veritabanı ne de anonim kullanıcı oluşturulur. Paketinizin hangi seçenekle kurulduğunu bilmiyorsanız betiği çalıştırmak ya da aşağıdaki sorgularla elle kontrol etmek en kolay yoldur.

Betiğin adımıNeyi değiştirirGüncel modelde gerekli mi?
Root parolası belirlemeroot hesaplarına parola atarGenellikle hayır; unix_socket ile sudo mariadb yeterli
Uzak root hesaplarını silmelocalhost dışındaki root hesaplarını kaldırırBöyle bir hesap varsa evet
Anonim kullanıcıları silmekullanıcı adı boş hesapları kaldırırVarsa evet
Test veritabanını silmetest veritabanını ve ona ait yetkileri kaldırırVarsa evet
Yetki tablolarını yeniden yüklemedeğişikliklerin hemen geçerli olmasını sağlarBetik değişiklik yaptıysa evet

Betiği çalıştırmak

Betik Unix sistemlerde bulunur ve argümansız çağrılır. Root hesabına unix_socket ile bağlanabilmesi için hızlı başlangıç rehberindeki gibi sudo ile çalıştırın:

bash
sudo mariadb-secure-installation

Eski adı mysql_secure_installation idi; belgelere göre Linux'ta bir sembolik bağlantı üzerinden bu adla da çağrılabilir. Betik açıldığında sırasıyla aşağıdaki soruları sorar. Açıklamalar belgelerdeki örnek oturuma dayanır; kullandığınız sürüme göre soruların metni ve sırası biraz farklı olabilir, bu yüzden her soruyu okuyarak cevaplayın.

1. Mevcut root parolası

Betik, sunucuya bağlanmak için root parolasını ister. Belgelerdeki örnekte, yeni kurulmuş ve parola atanmamış bir sunucuda Enter'a basmanız gerektiği yazılıdır. sudo ile çalıştırdığınızda bağlantı Unix soketi üzerinden kurulur ve root hesabı işletim sistemi kimliğinizle doğrulanır.

2. Root parolasını değiştirme

Root için parola belirlemek, birinin uygun yetki olmadan MariaDB root kullanıcısıyla giriş yapmasını engeller. Ancak güncel modelde root zaten Unix soketi ile korunduğu için bu adımı atlamak çoğu kurulum için uygundur. Parola belirlerseniz sudo mariadb ile parolasız erişim de korunur; çünkü iki yöntem birlikte tanımlıdır. Parola yöntemleri ve ed25519 gibi daha güvenli eklentiler için kimlik doğrulama yazısına bakın.

3. Anonim kullanıcıları kaldırma

Anonim kullanıcı, kullanıcı adı boş olan hesaptır ve herhangi bir kullanıcı adıyla yapılan giriş denemesiyle eşleşebilir. Belgeler bunun yalnızca test ve kolay kurulum için düşünüldüğünü, üretime geçmeden önce kaldırılması gerektiğini söyler. Bu adım "evet" ile geçilmelidir. Anonim kullanıcının bir başka tuhaf yan etkisi de vardır: 'ali'@'%' gibi bir hesap açtığınızda, ''@'localhost' hesabı daha belirli bir host eşleşmesi olduğu için yerel bağlantılarda önceliği alabilir ve "Access denied" hatası görürsünüz.

4. Root'un uzaktan girişini engelleme

Root normalde yalnızca localhost üzerinden bağlanabilmelidir; böylece kimse ağ üzerinden root parolasını tahmin etmeye çalışamaz. Bu adım "evet" ile geçilmelidir. Uzaktan yönetim gerekiyorsa root'u açmak yerine sınırlı yetkili ayrı bir hesap oluşturun; nasıl yapılacağı uzaktan bağlantı yazısında anlatılıyor.

5. Test veritabanını kaldırma

MariaDB varsayılan olarak herkesin erişebildiği test adlı bir veritabanıyla gelebilir. Bu da test amaçlıdır ve üretimden önce kaldırılmalıdır. Betik hem veritabanını siler hem de ona ait yetkileri temizler.

6. Yetki tablolarını yeniden yükleme

Son soru, yapılan değişikliklerin hemen geçerli olması için yetki tablolarının yeniden yüklenmesidir. "Evet" demeniz yeterlidir.

Belgelerdeki örnek oturumdan kısa bir kesit, soruların nasıl göründüğünü gösterir:

text
Change the root password? [Y/n] n
 ... skipping.
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
 ... Success!

Elle kontrol: betik olmadan aynı denetimi yapmak

Betiğin yaptığı işleri anlamak ya da otomasyonda tekrarlanabilir hale getirmek için önce mevcut durumu sorgulamak işe yarar. Hesapların listesini mysql.user görünümünden alabilirsiniz. Authentication sayfasına göre mysql.user artık mysql.global_priv tablosuna dayanan bir görünümdür; okuyabilirsiniz ama güncelleyemezsiniz.

sql
SELECT user, host FROM mysql.user;
SHOW DATABASES;

Listede kullanıcı adı boş bir satır görüyorsanız bu anonim hesaptır. Bağlantı sorunları rehberi, yerel anonim hesabın şu komutla kaldırılabileceğini, ancak başka bir yerde bilinçli olarak kullanılıyorsa bunu bozmamaya dikkat etmeniz gerektiğini söyler:

sql
DROP USER ''@'localhost';

test veritabanı listede görünüyorsa ve kullanmıyorsanız silebilirsiniz. Veritabanı silme ve oluşturma komutları veritabanı ve tablo oluşturma yazısında anlatılıyor. Hesap yönetimi komutlarının ayrıntıları ise CREATE USER yazısında.

Seçenekler ve yapılandırma dosyaları

Seçenekler ve yapılandırma dosyaları: --basedir=dir, --no-defaults, --defaults-file=#, --defaults-extra-file=#

Betik az sayıda kendi seçeneğini kabul eder; geri kalan her seçeneği, sunucuya bağlanmak için çalıştırdığı mariadb istemcisine aktarır. Örneğin standart dışı bir soket ya da port kullanıyorsanız --socket veya --port verebilirsiniz.

SeçenekAçıklama
--basedir=dirTemel dizin
--no-defaultsHiçbir yapılandırma dosyasından varsayılan seçenek okumaz
--defaults-file=#Yalnızca verilen dosyadan seçenek okur
--defaults-extra-file=#Genel dosyalardan sonra bu dosyayı da okur
--defaults-group-suffix=#Varsayılan gruplara ek olarak bu son eki taşıyan grupları da okur
bash
sudo mariadb-secure-installation --port=3307

Bu örnekteki port numarası temsilîdir; kendi sunucunuzun dinlediği portu yazın. Yapılandırma dosyalarıyla ilgili seçenekler komut satırında ilk argüman olarak verilmelidir. Betik yapılandırma dosyalarından [client], [client-server] ve [client-mariadb] gruplarını okur; dosyada tanımadığı bir seçenek görürse onu yok sayar.

Bir ayrıntı: betik --print-defaults seçeneğini desteklemez. Hangi seçeneklerin okunacağını görmek için belgeler my_print_defaults aracını önerir:

bash
my_print_defaults client client-server client-mariadb

Grupların ve dosyaların okunma sırası my.cnf yapılandırma dosyaları yazısında anlatılıyor.

Parola mı, unix_socket mi? Karar verirken bilmeniz gerekenler

Betiğin ikinci sorusuna nasıl cevap vereceğiniz, unix_socket eklentisinin nasıl çalıştığını bilmenize bağlıdır. Eklenti sayfasına göre eklenti, soket dosyasına bağlanan sürecin işletim sistemi kullanıcı kimliğini çekirdekten alır ve bağlanan kişiyi aynı adlı MariaDB hesabı olarak doğrular. Güvenliği bir parolanın karmaşıklığına değil, Unix kullanıcısına erişimin ne kadar iyi korunduğuna dayanır.

Belgelerin saydığı güçlü yanlar şunlardır: erişim Unix kullanıcısıyla sınırlıdır, örneğin www-data kullanıcısı bu yolla root hesabına giremez; kaba kuvvetle kırılacak bir parola yoktur; yedeklerde ya da yapılandırma dosyalarında yanlışlıkla açığa çıkacak bir parola da yoktur. Zayıf yanlar ise Unix kullanıcılarının güvenliğiyle ilgilidir: geniş tanımlanmış sudo yetkileri, başka kullanıcıların yazabildiği ve cron ile çalışan betikler, komut enjeksiyonuna açık web sayfaları ya da zayıf sistem parolaları. Sunucunuzda bu risklerden biri varsa root için ayrıca güçlü bir parola tanımlamak bir savunma katmanı ekler; ancak belgeler bunun eklentinin sağladığı avantajları da ortadan kaldırdığını hatırlatır.

Galera Cluster ile kullanım

Betikten sonra ne yapmalı?

Betikten sonra ne yapmalı? Uygulama hesabı, Yönetici hesabı, Ağ erişimi, Şifreli bağlantı

mariadb-secure-installation sunucunun ağ ayarlarına, kullanıcı yetkilerine ya da şifreli bağlantıya dokunmaz. Kurulumu güvenli hale getirmenin devamı şu adımlardır:

  • Uygulama hesabı: Uygulamanız için root yerine yalnızca kendi veritabanına yetkili bir hesap açın. Bkz. CREATE USER ve GRANT ve REVOKE.
  • Yönetici hesabı: Bağlantı sorunları rehberi, sudo mariadb yolunu kalıcı bir çözüm olarak değil, bir kerelik giriş için kullanmanızı ve ardından 'myadmin'@'localhost' gibi ayrı bir yönetici hesabı oluşturmanızı önerir.
  • Ağ erişimi: Sunucunun hangi adreste dinlediğini kontrol edin. Uzak erişim gerekmiyorsa yalnızca yerel bağlantıya izin verin. Bkz. bind-address yazısı.
  • Şifreli bağlantı: Ağ üzerinden bağlanılacaksa TLS kullanın. Bkz. SSL/TLS yazısı.
  • Parola politikası: Parola kullanan hesaplar için doğrulama eklentilerine ve parola süresine root parolası sıfırlama ve parola yönetimi yazısında değiniyoruz.

Sık yapılan hatalar

  • Betiği sudo olmadan çalıştırmak: Normal kullanıcıyla çalıştırdığınızda Unix soketi sizin kullanıcı adınızı bildirir ve root hesabı bu yolla doğrulanmaz. Root parolası hiç atanmamışsa giriş başarısız olur.
  • Eski rehberlere bakıp mutlaka root parolası atamak: Gerekli değildir; belgeler unix_socket yaklaşımının çok güvenli olduğunu ve parolasız çalışmayı denemenizi önerir. Parola atarsanız onu da güvenle saklamanız gerekir.
  • "Disallow root login remotely" sorusuna hayır demek: Uzak yönetim için root'u açmak, parola tahmin saldırılarına kapı açar. Ayrı ve sınırlı bir hesap kullanın.
  • Betiği çalışan bir Galera kümesinde çalıştırmak: Değişiklikler diğer düğümlere geçmez; düğümler arasında farklı hesaplar oluşur.
  • Betiğin uzak erişimi kapattığını sanmak: Betik root hesaplarının host kısmıyla ilgilenir; sunucunun dinlediği adresi değiştirmez.
  • Kurulumdan sonra "Access denied for user 'root'@'localhost'" görüp parolayı sıfırlamaya çalışmak: Çoğu zaman sorun parolada değil, bağlanma biçimindedir; sudo mariadb deneyin. Gerçekten parola sıfırlamanız gerekiyorsa root parolası sıfırlama yazısına bakın.

Sık Sorulan Sorular

mariadb-secure-installation'ı birden fazla kez çalıştırabilir miyim?

Betik her seferinde soruları yeniden sorar. Belgelerdeki örnekte root parolası zaten tanımlı olduğu için betik bu soruya güvenle "n" diyebileceğinizi söyler ve adım atlanır. Yine de her soruyu okuyarak cevaplayın.

Root parolası belirledim, artık sudo mariadb çalışmaz mı?

Çalışır. Varsayılan root hesabı unix_socket ve parola yöntemini birlikte tanımlar; parola atamak yalnızca ikinci yöntemi etkinleştirir. Belgeler, parolayı SET PASSWORD ile atadığınızda sudo üzerinden parolasız erişimin korunduğunu belirtir.

Windows'ta bu betik var mı?

Belgeler betiği Unix sistemlerde bulunan bir kabuk betiği olarak tanımlar ve eski mysql_secure_installation adına Windows'ta alternatif bir ikili dosya üzerinden erişilebildiğini not eder. Windows MSI kurulumunda ise hızlı başlangıç rehberine göre root parolası kurulum sihirbazı sırasında belirlenir.

Betik my.cnf dosyasını değiştirir mi?

Belgelerde betiğin yaptığı işler hesaplar ve test veritabanıyla sınırlı olarak anlatılır; yapılandırma dosyasını düzenlediğine dair bir bilgi yoktur. Ağ, port ve günlük ayarları için yapılandırma dosyasını kendiniz düzenlersiniz. Bkz. my.cnf yazısı.

Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: MariaDB öğrenme rehberi · MariaDB kurulumu · unix_socket ve ed25519 · CREATE USER · root parolası sıfırlama · uzaktan bağlantı