Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

12 Phương pháp Tốt nhất về Bảo mật MySQL / MariaDB cho Linux

MySQL là hệ thống cơ sở dữ liệu nguồn mở phổ biến nhất trên thế giới và MariaDB (một nhánh của MySQL) là hệ thống cơ sở dữ liệu nguồn mở phát triển nhanh nhất thế giới. Sau khi cài đặt máy chủ MySQL, nó không an toàn trong cấu hình mặc định của nó và bảo mật nó là một trong những nhiệm vụ thiết yếu trong quản lý cơ sở dữ liệu nói chung.

Điều này sẽ góp phần củng cố và tăng cường bảo mật máy chủ Linux tổng thể, vì những kẻ tấn công luôn quét các lỗ hổng trong bất kỳ phần nào của hệ thống và cơ sở dữ liệu trước đây là khu vực mục tiêu chính. Một ví dụ phổ biến là cưỡng bức mật khẩu gốc cho cơ sở dữ liệu MySQL.

Trong hướng dẫn này, chúng tôi sẽ giải thích MySQL / MariaDB hữu ích thực tiễn tốt nhất về bảo mật cho Linux.

1. Cài đặt MySQL an toàn

Đây là bước được khuyến nghị đầu tiên sau khi cài đặt máy chủ MySQL, hướng tới việc bảo mật máy chủ cơ sở dữ liệu. Tập lệnh này tạo điều kiện cải thiện bảo mật cho máy chủ MySQL của bạn bằng cách yêu cầu bạn:

  • đặt mật khẩu cho tài khoản gốc, nếu bạn chưa đặt mật khẩu trong quá trình cài đặt.
  • vô hiệu hóa đăng nhập của người dùng root từ xa bằng cách xóa các tài khoản root có thể truy cập được từ bên ngoài máy chủ cục bộ.
  • xóa các tài khoản người dùng ẩn danh và kiểm tra cơ sở dữ liệu mà theo mặc định, tất cả người dùng, ngay cả người dùng ẩn danh đều có thể truy cập.
# mysql_secure_installation

Sau khi chạy nó, hãy đặt mật khẩu gốc và trả lời một loạt câu hỏi bằng cách nhập [ Có / Y ] và nhấn [Enter] .

2. Liên kết máy chủ cơ sở dữ liệu với địa chỉ lặp lại

Cấu hình này sẽ hạn chế quyền truy cập từ các máy từ xa, nó yêu cầu máy chủ MySQL chỉ chấp nhận các kết nối từ bên trong localhost. Bạn có thể đặt nó trong tệp cấu hình chính.

# vi /etc/my.cnf	                   [RHEL/CentOS]	
# vi /etc/mysql/my.conf                    [Debian/Ubuntu] 
OR
# vi /etc/mysql/mysql.conf.d/mysqld.cnf    [Debian/Ubuntu] 

Thêm dòng sau vào bên dưới [mysqld] phần.

bind-address = 127.0.0.1

3. Tắt thông tin địa phương trong MySQL

Là một phần của quá trình tăng cường bảo mật, bạn cần tắt local_infile để ngăn truy cập vào hệ thống tệp cơ bản từ bên trong MySQL bằng cách sử dụng lệnh sau trong [mysqld] phần.

local-infile=0

4. Thay đổi cổng mặc định MYSQL

Cổng biến đặt số cổng MySQL sẽ được sử dụng để lắng nghe trên các kết nối TCP / IP. Số cổng mặc định là 3306 nhưng bạn có thể thay đổi nó trong [mysqld] phần như hình.

Port=5000

5. Bật tính năng ghi nhật ký MySQL

Nhật ký là một trong những cách tốt nhất để hiểu những gì xảy ra trên máy chủ, trong trường hợp có bất kỳ cuộc tấn công nào, bạn có thể dễ dàng xem bất kỳ hoạt động nào liên quan đến xâm nhập từ tệp nhật ký. Bạn có thể bật ghi nhật ký MySQL bằng cách thêm biến sau vào [mysqld] phần.

log=/var/log/mysql.log

6. Đặt quyền thích hợp trên tệp MySQL

Đảm bảo rằng bạn đã đặt các quyền thích hợp cho tất cả các tệp máy chủ mysql và thư mục dữ liệu. /etc/my.conf tệp chỉ nên được ghi vào gốc. Điều này chặn người dùng khác thay đổi cấu hình máy chủ cơ sở dữ liệu.

# chmod 644 /etc/my.cnf

7. Xóa lịch sử MySQL Shell

Tất cả các lệnh bạn thực thi trên MySQL shell được máy khách mysql lưu trữ trong tệp lịch sử: ~ / .mysql_history . Điều này có thể nguy hiểm vì đối với bất kỳ tài khoản người dùng nào mà bạn sẽ tạo, tất cả tên người dùng và mật khẩu được nhập trên shell sẽ được ghi lại trong tệp lịch sử.

# cat /dev/null > ~/.mysql_history

8. Không chạy lệnh MySQL từ Dòng lệnh

Như bạn đã biết, tất cả các lệnh bạn nhập trên thiết bị đầu cuối được lưu trữ trong tệp lịch sử, tùy thuộc vào trình bao bạn đang sử dụng (ví dụ: ~ / .bash_history cho bash). Kẻ tấn công có quyền truy cập vào tệp lịch sử này có thể dễ dàng xem bất kỳ mật khẩu nào được ghi ở đó.

Chúng tôi đặc biệt không nên nhập mật khẩu trên dòng lệnh, như thế này:

# mysql -u root -ppassword_

Khi bạn kiểm tra phần cuối cùng của tệp lịch sử lệnh, bạn sẽ thấy mật khẩu được nhập ở trên.

# history 

Cách thích hợp để kết nối MySQL là.

# mysql -u root -p
Enter password:

9. Xác định người dùng cơ sở dữ liệu dành riêng cho ứng dụng

Đối với mỗi ứng dụng đang chạy trên máy chủ, chỉ cấp quyền truy cập cho người dùng phụ trách cơ sở dữ liệu cho một ứng dụng nhất định. Ví dụ:nếu bạn có một trang web wordpress, hãy tạo một người dùng cụ thể cho cơ sở dữ liệu trang wordpress như sau.

# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY '[email protected]%!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

và nhớ luôn xóa các tài khoản người dùng không còn quản lý bất kỳ cơ sở dữ liệu ứng dụng nào trên máy chủ.

10. Sử dụng Thư viện và Plugin bảo mật bổ sung

MySQL bao gồm một số plugin bảo mật để:xác thực nỗ lực của khách hàng để kết nối với máy chủ mysql, xác thực mật khẩu và bảo mật lưu trữ thông tin nhạy cảm, tất cả đều có sẵn trong phiên bản miễn phí.

Bạn có thể tìm thêm tại đây:https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Thay đổi mật khẩu MySQL thường xuyên

Đây là một phần thông tin / ứng dụng / lời khuyên bảo mật hệ thống phổ biến. Tần suất bạn làm điều này sẽ hoàn toàn phụ thuộc vào chính sách bảo mật nội bộ của bạn. Tuy nhiên, nó có thể ngăn những “kẻ rình mò” có thể đã theo dõi hoạt động của bạn trong một thời gian dài, truy cập vào máy chủ mysql của bạn.

MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

12. Cập nhật gói máy chủ MySQL thường xuyên

Bạn nên nâng cấp các gói mysql / mariadb thường xuyên để cập nhật các bản cập nhật bảo mật và sửa lỗi từ kho lưu trữ của nhà cung cấp. Thông thường, các gói trong kho hệ điều hành mặc định đã lỗi thời.

# yum update
# apt update

Sau khi thực hiện bất kỳ thay đổi nào đối với máy chủ mysql / mariadb, hãy luôn khởi động lại dịch vụ.

# systemctl restart mariadb		#RHEL/CentOS
# systemctl restart mysql		#Debian/Ubuntu

Đó là tất cả! Chúng tôi muốn nghe ý kiến ​​từ bạn qua biểu mẫu bình luận bên dưới. Chia sẻ với chúng tôi bất kỳ mẹo bảo mật MySQL / MariaDB nào bị thiếu trong danh sách trên.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ YEARWEEK () - MySQL

  2. Quy trình đã lưu trữ Tự động xóa các hàng cũ hơn 7 ngày trong MYSQL

  3. MySQL DROP CONSTRAINT DUY NHẤT

  4. Mất kết nối với máy chủ MySQL lúc 'đang đọc gói giao tiếp ban đầu', lỗi hệ thống:0

  5. Quản lý MySQL bằng phpMyAdmin trên Debian 5 (Lenny)