Để mysql được bảo mật hơn các bạn cần cấu hình theo các yêu cầu sau:
- Cơ sở dữ liệu MySQL phải được chạy trong môi trường Chrooted ;
- Tiến trình(processes) MySQL phải chạy bằng một tài khoản riêng, chuyên dụng (tạo một tải khoản chỉ dùng để chạy mysql)
- Chỉ cho phép truy cập từ localhost (Disabled tính năng cho phép truy cập cơ sở dữ liệu từ xa)
- Đặt password phức tạp cho tài khoản quản trị cao nhất của MySQL (Root)
- Đổi tên tài khoản quản trị Mysql (root)
- Cấm truy cập Nạt danh (Anonymous access) đến cơ sở dữ liệu (tài khoản nobody) phải bị disabled
- Xóa tất cả các cơ sở dữ liệu và tables mẩu được tạo bởi Mysql (như test...)
2.0 Tạo tài khoản để chạy mysql
Mã:
|
pw groupadd mysql pw useradd mysql -c "MySQL Server" -d /dev/null -g mysql -s /sbin/nologin |
2.1 Cài đặt mysql
Mã:
|
#cd /usr/local/mysql #./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 |
Mã:
|
#cp support-files/my-medium.cnf /etc/my.cnf #chown root:sys /etc/my.cnf #chmod 644 /etc/my.cnf |
Mã:
|
/usr/local/mysql/bin/mysqld_safe & |
2.4 Kiểm tra kết nối đến Mysql
Mã:
|
#/usr/local/mysql/bin/mysql -u root mysql -> Enter mysql> show databases; +----------+ | Database | +----------+ | mysql | | test | +----------+ 2 rows in set (0.00 sec) mysql> quit; |
Mã:
|
/usr/local/mysql/bin/mysqladmin -u root shutdown |
3. Chrooting the server
Áp dụng cho hầu hết hệ nên tảng linux, unix..
3.2 Chuẩn bị môi trường chrooted
Mã:
|
mkdir -p /chroot/mysql/dev mkdir -p /chroot/mysql/etc mkdir -p /chroot/mysql/tmp mkdir -p /chroot/mysql/var/tmp mkdir -p /chroot/mysql/usr/local/mysql/libexec mkdir -p /chroot/mysql/usr/local/mysql/share/mysql/english |
3.3 Set quyền
Mã:
|
chown -R root:sys /chroot/mysql chmod -R 755 /chroot/mysql chmod 1777 /chroot/mysql/tmp |
3.4 Tạo cấu trúc thư mục
Mã:
|
cp /usr/local/mysql/libexec/mysqld /chroot/mysql/usr/local/mysql/libexec/ cp /usr/local/mysql/share/mysql/english/errmsg.sys /chroot/mysql/usr/local/mysql/share/mysql/english/ cp /etc/hosts /chroot/mysql/etc/ cp /etc/host.conf /chroot/mysql/etc/ cp /etc/resolv.conf /chroot/mysql/etc/ cp /etc/group /chroot/mysql/etc/ cp /etc/master.passwd /chroot/mysql/etc/passwords cp /etc/my.cnf /chroot/mysql/etc/ |
Mã:
|
cd /chroot/mysql/etc pwd_mkdb -d /chroot/mysql/etc passwords rm -rf /chroot/mysql/etc/master.passwd |
Mã:
|
/dev/null: ls -al /dev/null crw-rw-rw- 1 root sys 2, 2 Jun 21 18:31 /dev/null mknod /chroot/mysql/dev/null c 2 2 chown root:sys /chroot/mysql/dev/null chmod 666 /chroot/mysql/dev/null cp -R /usr/local/mysql/var/ /chroot/mysql/usr/local/mysql/var chown -R mysql:mysql /chroot/mysql/usr/local/mysql/var |
3.7 Cấu hình Charset ngôn ngữ
nếu muốn sử dụng thêm một ngôn ngữ khác ngoài tiếng anh thì chúng ta có thể copy charsets thích hợp vào
Mã:
|
/usr/local/mysql/share/mysql/charsets . |
Mã:
|
/chroot/mysql mysql /usr/local/mysql/libexec/mysqld & |
4 Disable truy cập từ xa (không cho kết nối từ xa vào mysql)
thêm dòng: skip-networking vào trong thẻ [mysqld]
Mã:
|
vi /chroot/mysql/etc/my.cnf skip-networking |
thêm dòng: set-variable=local-infile=0 vào trong thẻ [mysqld]
Mã:
|
/chroot/mysql/etc/my.cnf: set-variable=local-infile=0 |
Mã:
|
[client] section of /etc/my.cnf: socket = /chroot/mysql/tmp/mysql.sock |
Mã:
|
--socket=/chroot/mysql/tmp/mysql.sock |
Mã:
|
chrootuid /chroot/mysql mysql /usr/local/mysql/libexec/mysqld & /usr/local/mysql/bin/mysql -u root mysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password'); |
4.4 Xóa người dùng và cở sở dữ liệu mặc đinh
Mã:
|
mysql> drop database test; mysql> use mysql; mysql> delete from db; mysql> delete from user where not (host="localhost" and user="root"); mysql> flush privileges; |
4.5 Đổi tên tài khoản root
Mã:
|
mysql> update user set user="mydbadmin" where user="root"; mysql> flush privileges; |
4.6 Xóa history
Cuối cùng chúng ta nên xóa nội dung file: history của mysql (~/.mysql_history), tập tin này chủa tất cả các lệnh mà mysql đã thực thi (Đặt biệt mật khẩu được lưu trữ theo dạng Plain Test trong tập tin này
Mã:
|
cat /dev/null > ~/.mysql_history |
chúc các bạn năm mới vui vẽ và thành công
Tham khảo:
Securing MySQL: step-by-step
Securing Apache: Step-by-Step
http://www.symantec.com/connect/articles/securing-mysql-step-step