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

Bảo mật máy chủ MySQL

MySQL

MySQL là một hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở. Hướng dẫn này sẽ chỉ cho bạn cách bảo mật và kiểm tra máy chủ MySQL. Tên là sự kết hợp của “My”, tên của con gái đồng sáng lập Michael Widenius và “SQL”, chữ viết tắt của Structured Query Language.

Trước khi bạn bắt đầu

  1. Đảm bảo rằng bạn đã làm theo hướng dẫn Bắt đầu và Bảo mật Máy chủ của bạn. Đảm bảo rằng tên máy chủ của Linode đã được đặt.

    Kiểm tra tên máy chủ Linode của bạn. Lệnh đầu tiên sẽ hiển thị tên máy chủ rút gọn của bạn và lệnh thứ hai sẽ hiển thị tên miền đủ điều kiện (FQDN) của bạn.

    hostname
    hostname -f
    
    Lưu ý Nếu bạn có một tên miền đã đăng ký cho trang web của mình, hãy cập nhật miền tới máy chủ Linode mà bạn định cài đặt ngăn xếp LAMP. Nếu bạn chưa có tên miền đã đăng ký, hãy thay thế example.com với địa chỉ IP của máy chủ Linode theo hướng dẫn sau.
  2. Cập nhật hệ thống của bạn:

    sudo yum update
    
    Lưu ý Hướng dẫn này được viết cho người dùng không phải root. Các lệnh yêu cầu đặc quyền nâng cao có tiền tố là sudo . Nếu bạn không quen với sudo lệnh, bạn có thể xem hướng dẫn Người dùng và Nhóm của chúng tôi.
  3. Để bảo mật và kiểm tra MySQL, bạn cần có một máy chủ Linux với MySQL Server dịch vụ đang chạy. Để biết thông tin về cài đặt MySQL, vui lòng xem Cài đặt MySQL

    Lưu ý Các hướng dẫn trong hướng dẫn này dựa trên Ubuntu 18.04, mặc dù tất cả các bước là bất khả tri về phân phối, ngoại trừ tên gói và trình quản lý gói.

Sử dụng Trình cài đặt MySQL Bảo mật

Gói máy chủ mysql được cấu hình sẵn với một tiện ích có tên là mysql_secure_installation được sử dụng để thiết lập điểm khởi đầu an toàn cho máy chủ MySQL, bằng cách xóa người dùng ẩn danh và cho phép bạn chỉ định chính sách độ mạnh mật khẩu mong muốn.

mysql_secure_installation là một tập lệnh shell có sẵn trên các hệ thống Unix và cho phép bạn bảo mật cài đặt MySQL bằng cách cho phép bạn:

  • đặt mật khẩu cho tài khoản gốc
  • xóa các tài khoản gốc có thể truy cập được từ bên ngoài máy chủ lưu trữ cục bộ
  • xóa các tài khoản người dùng ẩn danh
  • xóa cơ sở dữ liệu thử nghiệm, theo mặc định, người dùng ẩn danh có thể truy cập vào cơ sở dữ liệu này

Bắt đầu quá trình bảo mật bằng cách chạy tiện ích này ngay sau khi cài đặt máy chủ mysql.

  1. Gọi tiện ích bằng cách chạy lệnh sau:

     sudo mysql_secure_installation
    
  2. Quá trình thiết lập bắt đầu và tiện ích sẽ nhắc bạn chỉ định xem bạn có muốn bật plugin xác thực mật khẩu được sử dụng để kiểm tra mật khẩu và cải thiện bảo mật hay không. Chúng tôi khuyên bạn nên bật tính năng này.

    Securing the MySQL server deployment.
    
    Connecting to MySQL using a blank password.
    
    VALIDATE PASSWORD PLUGIN can be used to test passwords
    and improve security. It checks the strength of password
    and allows the users to set only those passwords which are
    secure enough. Would you like to setup VALIDATE PASSWORD plugin?
    
    Press y|Y for Yes, any other key for No: y

  3. Sau khi bạn bật plugin mật khẩu, hãy chỉ định chính sách xác thực mật khẩu của bạn dựa trên mức độ mạnh của mật khẩu mong muốn.

    There are three levels of password validation policy:
    
    LOW    Length >= 8
    MEDIUM Length >= 8, numeric, mixed case, and special characters
    STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
    
    Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
    Please set the password for root here.
    
    New password:
    
    Re-enter new password:
    
    Estimated strength of the password: 100
    Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

  4. Xóa người dùng ẩn danh. Đây là một tùy chọn bảo mật quan trọng vì những kẻ tấn công có thể tận dụng người dùng ẩn danh để truy cập vào máy chủ cơ sở dữ liệu.

    By default, a MySQL installation has an anonymous user,
    allowing anyone to log into MySQL without having to have
    a user account created for them. This is intended only for
    testing, and to make the installation go a bit smoother.
    You should remove them before moving into a production
    environment.
    
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

  5. Vô hiệu hóa đăng nhập root từ xa, đây là cấu hình bảo mật cực kỳ quan trọng vì nó ngăn những kẻ tấn công xác thực từ xa đến máy chủ MySQL với tư cách là root hoặc thực hiện các cuộc tấn công brute-force bằng mật khẩu. Xác thực từ xa cũng có thể bị vô hiệu hóa hoàn toàn, chúng ta sẽ xem xét cách thực hiện điều đó trong phần tiếp theo.

    Normally, root should only be allowed to connect from
    'localhost'. This ensures that someone cannot guess at
    the root password from the network.
    
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

  6. Xóa cơ sở dữ liệu thử nghiệm được tạo trong quá trình cài đặt mysql-server, cơ sở dữ liệu này được tạo cho mục đích thử nghiệm, như một thực tiễn tốt, bạn nên xóa cơ sở dữ liệu này.

    By default, MySQL comes with a database named 'test' that
    anyone can access. This is also intended only for testing,
    and should be removed before moving into a production
    environment.
    
    
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

  7. Tải lại các bảng đặc quyền để đảm bảo rằng tất cả các thay đổi được áp dụng và có hiệu lực.

    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
    Success.
    
    All done!
    Giờ đây, bạn có một cơ sở bảo mật để làm việc, trong phần tiếp theo, hãy tìm hướng dẫn để thay đổi root mặc định tên người dùng và mật khẩu.

Sửa đổi người dùng "root"

Theo mặc định, máy chủ MySQL được xác định trước với superuser/admin tài khoản có quyền truy cập vào tất cả các đặc quyền và chức năng của cơ sở dữ liệu và người dùng cơ sở dữ liệu. Với khả năng kiểm soát và truy cập vô song này, điều quan trọng là phải khóa và bảo mật tài khoản gốc vì những kẻ tấn công thường nhắm mục tiêu vào tài khoản gốc trên máy chủ MySQL vì nó có khả năng cung cấp quyền truy cập đầy đủ vào cơ sở dữ liệu và người dùng cơ sở dữ liệu.

Bước đầu tiên trong việc bảo mật người dùng "root" là thay đổi tên người dùng từ root đối với một thứ gì đó kiên cường hơn, mục tiêu là làm cho tên người dùng gốc trở nên khó đoán hoặc bạo lực đối với những kẻ tấn công. Sau đó, bạn cũng nên thay đổi root mật khẩu tài khoản thường xuyên như một phương pháp hay.

  1. Đăng nhập vào máy chủ MySQL bằng lệnh sau:

     sudo mysql -u root
    
  2. Thay đổi tên người dùng tài khoản "gốc" bằng cách chạy truy vấn sau:

     rename user 'root'@'localhost' to '<new-username>'@'localhost';
    
  3. Thay đổi root mật khẩu tài khoản mạnh và khó đoán, bạn nên sử dụng trình tạo mật khẩu. Nếu bạn đã bật plugin xác minh mật khẩu trong quá trình cài đặt an toàn, bạn cần cung cấp mật khẩu đáp ứng các yêu cầu chính sách về độ mạnh.

     ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
    
  4. Tải lại bảng đặc quyền để đảm bảo rằng tất cả các thay đổi được lưu và kích hoạt bằng cách chạy lệnh sau:

     flush privileges;
    
  5. Để xác nhận xem root tên người dùng và mật khẩu được thay đổi, hãy chạy truy vấn sau:

     use mysql;
     select user,host,authentication_string from mysql.user;
    

Điều này hiển thị các bảng người dùng được lưu trữ trong cơ sở dữ liệu mysql và phải phản ánh những thay đổi đã thực hiện.

+------------------+-----------+-------------------------------------------+
| user             | host      | authentication_string                     |
+------------------+-----------+-------------------------------------------+
| example_user     | localhost | *A2550B00C6DF81DACE33551E8293462F6CAE33DA |
| mysql.session    | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys        | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *241DC5A20F017D55EE82E46E7996784ED4A5CD8A |
+------------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

Tạo người dùng mới

Một thực hành an ninh tốt là khái niệm phân biệt theo nhiệm vụ hoặc vai trò. Điều này có nghĩa là đối với mọi cơ sở dữ liệu hoặc ứng dụng sử dụng cơ sở dữ liệu, hãy tạo một người dùng mới có quyền CRUD cho cơ sở dữ liệu cụ thể đó. Điều này đảm bảo rằng tại bất kỳ thời điểm nào, chỉ một người dùng có quyền truy cập vào một cơ sở dữ liệu tại một thời điểm và người dùng không thể truy cập các cơ sở dữ liệu khác.

  1. Tạo Test cơ sở dữ liệu, bằng cách chạy truy vấn sau trong MYSQL:

     create database Test;
    
  2. Tạo người dùng chịu trách nhiệm quản lý cơ sở dữ liệu Kiểm tra này:

     CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
    
  3. Gán các quyền CRUD thích hợp cho người dùng để Test cơ sở dữ liệu:

     GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
    
  4. Điều quan trọng cần lưu ý là các đặc quyền này chỉ áp dụng cho Test cơ sở dữ liệu, nếu bạn đang tạo người dùng cho một ứng dụng như phpMyAdmin , bạn cần cung cấp cho người dùng root quyền.

  5. Nếu bạn quyết định xóa một người dùng cụ thể, hãy chạy truy vấn sau:

     drop user '<username>'@'localhost';
    
  6. Tải lại bảng đặc quyền để đảm bảo các thay đổi đã thực hiện được áp dụng và kích hoạt bằng cách chạy truy vấn sau:

     flush privileges;
    

Cấu hình MySQL tùy chỉnh

Giờ đây, bạn có thể thiết lập cấu hình tùy chỉnh an toàn cho MySQL cung cấp các tùy chọn cấu hình bảo mật bổ sung.

  1. Tệp cấu hình MySQL toàn cầu nằm trong /etc/mysql/my.cnf , tất cả các cấu hình chung tùy chỉnh sẽ được thiết lập trong tệp cấu hình.

  2. Cấu hình tùy chỉnh cần được chỉ định cho mysqld (MySQL daemon), các tùy chọn hiển thị trong hình ảnh là cấu hình bảo mật tùy chỉnh.

  3. Sau khi thêm các cấu hình tùy chỉnh, bạn cần khởi động lại mysql dịch vụ để đảm bảo tất cả các thay đổi đều được áp dụng.

     systemctl restart mysql
    

Kiểm tra Bảo mật MySQL

Bây giờ bạn có thể kiểm tra tính bảo mật của máy chủ MySQL bằng cách sử dụng một công cụ có tên là MySAT. MySAT thực hiện một số bài kiểm tra để phân tích cấu hình cơ sở dữ liệu và chính sách bảo mật. MySAT giúp đánh giá và do đó để tăng tính bảo mật cho cơ sở dữ liệu MySQL.MySAT là một tập lệnh SQL đơn giản, dễ hiểu và dễ bảo trì. Kết quả MySAT được xuất ở định dạng HTML.

  1. Sao chép kho lưu trữ Github của MySAT bằng cách chạy lệnh sau:

     git clone https://github.com/meob/MySAT.git
    
  2. Sau khi sao chép thư mục, hãy điều hướng đến thư mục MySAT, nơi có mysat.sql tệp được đặt và nó được sử dụng cùng với máy chủ MySQL để xuất kết quả thành MySAT.htm tệp.

  3. Kiểm tra bảo mật bằng cách chạy lệnh sau:

     mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
    
  4. Như đã chỉ ra, MySAT yêu cầu quyền truy cập root vào MySQL để chạy các bài kiểm tra bắt buộc, sau khi chạy lệnh, tệp MySAT.htm được tạo, hãy sao chép tệp MySAT.htm và mysat.css tệp vào máy chủ Apache hoặc NGINX hoặc tải xuống cục bộ bằng scp , để bạn có thể phân tích kết quả của cuộc kiểm tra.

  5. Kết quả được định dạng ở định dạng đơn giản để đọc và hiểu, trong đó các cấu hình được kiểm tra và kết quả được mã hóa màu dựa trên cấu hình hiện tại của chúng và cách nó ảnh hưởng đến bảo mật của máy chủ mysql. Ví dụ:kiểm tra cấu hình không thành công có màu được mã hóa bằng màu cam và kiểm tra đã vượt qua được mã hóa bằng màu xanh lục.

  6. Báo cáo kiểm tra tiết lộ những cấu hình nào cần được thay đổi hoặc sửa đổi và trình bày cho bạn bức tranh cấp cao nhất về bảo mật tổng thể của máy chủ MySQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cơ sở dữ liệu MySQL của tôi bị hỏng ... Tôi phải làm gì bây giờ?

  2. Chạy tập lệnh .sql bằng MySQL với JDBC

  3. MySQLi chuẩn bị báo cáo lỗi báo cáo

  4. Cách thêm Zeros hàng đầu vào một số trong MySQL

  5. Cài đặt MySQL trên máy Mac