Cấu hình bảo mật cho mysql
1. Yêu cầu bảo mật
Để 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. Cài đặt MySQL
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 |
2.2 Copy tập tin cấu hình
Mã:
|
#cp support-files/my-medium.cnf /etc/my.cnf
#chown root:sys /etc/my.cnf
#chmod 644 /etc/my.cnf |
2.3 Start Mysql
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; |
2.4 Stop Mysql
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/ |
3.5 Xóa mật khẩu và nhóm không cần thiết
Mã:
|
cd /chroot/mysql/etc
pwd_mkdb -d /chroot/mysql/etc passwords
rm -rf /chroot/mysql/etc/master.passwd |
3.6 Special considerations
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 . |
3.8 Kiểm tra sau khi cấu hình
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 |
4.2 Cải thiện bảo mật Local
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 |
Không cho phép sử dụng: mysqladmin, mysqldump..
Mã:
|
[client] section of /etc/my.cnf:
socket = /chroot/mysql/tmp/mysql.sock |
Khi nào cần sử dụng mysqladmin, mysqldump thì sử dụng lênh sau:
Mã:
|
--socket=/chroot/mysql/tmp/mysql.sock |
4.3 Thay đổi mật khẩu root
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 |
Vậy là chúng ta đã cấu hình bảo mật cở bản cho Mysql rồi đó,
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
.......................