Wednesday, September 18, 2013

Chroot 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
http://www.symantec.com/connect/articles/securing-mysql-step-step

Related Posts:

  • Lệnh dd -dd dùng để copy các phân vùng và đĩa cứng… dd đọc theo từng block, theo mật định là 512 bytes.Dạng sử dụng:dd if="source" of="target" bs="byte size" conv="conversion" Sử dụng dd -copy đĩa cứng:# dd if=/dev/hda of=/dev/hdc… Read More
  • Các lệnh thông dụng xem thông tin phần cứng trên HĐH Linux Đầu tiên là lệnh xem RAM [root@localhost ~]#top Tasks: 508 total, 1 running, 507 sleeping, 0 stopped, 0 zombie Cpu(s): 4.7%us, 0.3%sy, 0.0%ni, 94.6%id, 0.4%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 8289408k total, 3601696k used, 46877… Read More
  • Hiển thị tiến trình trong hệ thống Linux Một trong những công việc cần thiết khi quản trị hệ thống Linux đó là kiểm soát các tiến trình hiện đang chạy. Khi đã biết được những tiến trình nào đang chạy bạn có thể tắt những tiến trình gây giảm tốc độ của hệ thống. Ng… Read More
  • File Permission trong Linux Một trong những thành phần chính của hệ điều hành Linux là hệ thống quyền hạn truy cập (permission) áp dụng cho mọi đối tượng (file, thư mục, link…). Hệ thống này đóng 1 vai trò quan trọng trong việc đem lại mức an ninh cao … Read More
  • Kiểm tra I/O của VPS/Server Linux I/O Speed (tốc độ đọc, ghi) của một máy chủ rất quan trọng. Với một máy chủ ảo VPS, bạn cần đạt tầm 60MB/s trở lên. Còn với dedicated bạn cần đạt tầm 120-130MB/sChạy lần lượt các lệnh sau để xem tốc độ I/O của mình. Chú… Read More