MySQL Internet üzerindeki en popülerveritabanlarından biridir ve sıklıkla PHP ile birlikte kullanılır.Yüksek performansına oranla kolay kullanımı gibi bir çok avantajı biryana, MySQL basit fakat çok etkili bir güvenlik mekanizmasısunmaktadır.
MySQL Internet üzerindeki en popüler veritabanlarından biridir vesıklıkla PHP ile birlikte kullanılır. Yüksek performansına oranla kolaykullanımı gibi bir çok avantajı bir yana, MySQL basit fakat çok etkilibir güvenlik mekanizması sunmaktadır. Ne yazık ki, MySql'in defaultkurulumu, şifresiz root yetkisi sağlaması ve hafıza taşması ataklarıiçin potansiyel güvelik açıkları bulundurması bu veritabanınısaldırılar için kolay hedef haline getirmektedir. Bu makale, lokal veuzak saldırılara karşı MySql'in nasıl güvenli hale getirilebileceğinintemel adımların tarif etmektedir.
Fonksiyonellik
Makalemizde bir önceki Apache ile ilgili makalemizde belirtilenlereuygun olarak üzerinde PHP kurulmuş Apache sunucumuz olduğunuvarsayacağız ve bu da /chroot/httpd dizininde bulunacak.
Yukarıdakilerden farklı olarak, aşağıda belirtilenlerinvarolduğunu kabul edeceğiz: MySQL veritabanı sadece PHP uygulamalarıiçin kullanılacak, aynı host üzerinde kurulu olacak;
Mysqladmin, mysql, mysqldump gibi default yönetim araçları veritabanı yönetimi için kullanılacaktır;
Uzaktan veri yedeklemesi SSH protokolü kullanılarak gerçekleşecektir.
Güvenlik Gereklilikleri
Yüksek güvenlik seviyesi sağlamak için, MYSQL'in kurulumu vekonfigürasyonu, aşağıda belirtilen güvenlik gerekliliklerigerçekleştirilmelidir:
MySQL veritabanı chroot edilmiş ortamda uygulanacaktır;
MySQL işlemleri tek bir UID/GID altında çalışacak ve bu başka bir sistem işlemi için kullanılmayacaktır;
MYSQL'e sadece lokal erişime izin verilecektir;
MySQL root hesabı tahmini zor bir şifre ile korunacaktır;
Yönetici hesabı ismi değiştirilecektir;
Veritabanına Anonim erişim ( Nobody hesabı ile) engellenecektir;
Tüm örnek veritabanları ve tablolar silinecektir.
MySQL Kurulumu
MySQL güvenliğine başlamadan önce, sunucu üzerine yazılımıyüklemeliyiz. Daha önceki makalelerde olduğu gibi, kuruluma, işletimsistemi üzerinde MySQL veritabanı için kullanılacak tek ve düzgün grupve kullanıcı hesabı yaratmakla başlayacağız:
pw groupadd mysql
pw useradd mysql -c "MySQL Server" -d /dev/null -g mysql -s /sbin/nologin
MySQL'i Derlemek
MYSQL yazılımını /usr/local/mysql dizini içinde derleyip kuracağız:
configure --prefix=/usr/local/mysql --with-mysqld-user=mysql--with-unix-socket-path=/tmp/mysql.sock--with-mysqld-ldflags=-all-static
make
su
make install
strip /usr/local/mysql/libexec/mysqld
scripts/mysql_install_db
chown -R root /usr/local/mysql
chown -R mysql /usr/local/mysql/var
chgrp -R mysql /usr/local/mysql
Genellikle, sunucu üzerinde kuurlum işlemleri daima MySQLmanuelinde tarif edildiği gibidir.Tek değişiklik ise ./configuresatırında belirtilmiş birkaç ilgili parametrenin kullanımıdır. Enönemli farklılık ise MySQL'in statik linklenmesine etki eden--with-mysqld-ldflags=-all-static parametresinin kullanımıdır. Bu, 3.bölümde de tarif edildiği gibi, önemli bir değerde sunucu chrootayarlama işlemlerini basite indirger. Diğer parametreleri de dikkatealırsak, bunlar da programa /usr/local/mysql dizinine yazılımıyüklemesi emrini verir, mysql account yetkisinde MySQL Daemon'uçalıştırır ve /tmp dizininde mysql.sock socket'i oluşturur.
Konfigürasyon Dosyasının Kopyalanması
Yukarıdaki komutlar uygulandıktan sonra, veritabanının muhtemelboyutuna göre (küçük, orta, büyük, çok büyük) default konfigürasyondosyasını kopyalamalıyız. Örneğin:
cp support-files/my-medium.cnf /etc/my.cnf
chown root:sys /etc/my.cnf
chmod 644 /etc/my.cnf
Sunucunun Çalıştırılması
Bu noktada MySQL tamamı ile yüklenmiş ve çalışmaya hazırdır.Aşağıdaki komutu kullanarak MySQL'i çalıştırabiliriz:
/usr/local/mysql/bin/mysqld_safe &
Bağlantı Testi
Aşağıdaki şekilde veritabanı ile bağlantı kurmaya çalışın:
/usr/local/mysql/bin/mysql -u root mysql
Welcome to MySQL Monitor. Commands end with ; or \g. Your MySQLconnection id is 2 to server version: 4.0.13-log Type 'help;' or '\h'for help. Type '\c' to clear the buffer.
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)
mysql> quit;
Birkez bağlantı başarılı olarak sağlandığında, veritabanını kapatabiliriz:
/usr/local/mysql/bin/mysqladmin -u root shutdown
ve yazılımın güvenliğine başlayabiliriz. Aksi halde, the/usr/local/mysql/var/`hostname`.err log dosyasını analiz etmeli ve bazısorunları elimine etmeliyiz.
Sunucu Chroot Ayarları
MySQL güvenliğindeki ilk adım, MySQL sunucunun çalışacağı chrootedilmiş bir alan hazırlanmasıdır. Chroot tekniği "' Adım adım ApacheGüvenliği"' makalemizde ayrıntılı olarak tarif edilmişti, bu sebepleeğer bu teknik hakkında bilginiz yoksa ya da neden gerekli olduğunuöğrenmek istiyorsanız, bahse konu makaleyi okumanızı tavsiye ederim.