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

Cách cấu hình SELinux cho các hệ thống dựa trên MySQL (MySQL / MariaDB Replication + Galera)

Trong thời đại mà chúng ta đang sống hiện nay, bất cứ thứ gì có môi trường kém an toàn đều dễ dàng trở thành mục tiêu cho một cuộc tấn công và trở thành tiền thưởng cho những kẻ tấn công. So với 20 năm trước, tin tặc ngày nay đã tiến bộ hơn không chỉ về kỹ năng mà còn cả những công cụ mà họ đang sử dụng. Không có gì ngạc nhiên khi một số công ty khổng lồ bị tấn công và dữ liệu quý giá của họ bị rò rỉ.

Chỉ trong năm 2021, đã có hơn 10 sự cố liên quan đến vi phạm dữ liệu. Sự cố gần đây nhất được BOSE, một hãng sản xuất âm thanh nổi tiếng cho biết xảy ra vào tháng 5 vừa qua. BOSE đã phát hiện ra rằng một số thông tin cá nhân của nhân viên hiện tại và trước đây của họ đã bị những kẻ tấn công truy cập. Thông tin cá nhân bị lộ trong cuộc tấn công bao gồm tên, Số An sinh Xã hội, thông tin bồi thường và các thông tin khác liên quan đến nhân sự.

Bạn nghĩ mục đích của kiểu tấn công này là gì và động cơ nào khiến hacker làm như vậy? Đó rõ ràng là tất cả về tiền. Vì dữ liệu bị đánh cắp cũng thường được bán, bằng cách tấn công các công ty lớn, tin tặc có thể kiếm được tiền. Không chỉ những dữ liệu quan trọng có thể bị bán cho các đối thủ của doanh nghiệp mà tin tặc còn có thể đòi một khoản tiền chuộc khổng lồ cùng lúc.

Vậy làm thế nào chúng ta có thể liên hệ điều này với cơ sở dữ liệu? Vì cơ sở dữ liệu là một trong những tài sản lớn của công ty, chúng tôi khuyên bạn nên chăm sóc nó với tính bảo mật nâng cao để dữ liệu quý giá của chúng ta được bảo vệ hầu hết thời gian. Trong bài đăng trên blog cuối cùng của tôi, chúng ta đã xem qua một số giới thiệu về SELinux, cách kích hoạt nó, loại chế độ SELinux có và cách cấu hình nó cho MongoDB. Hôm nay, chúng ta sẽ xem xét cách định cấu hình SELinux cho các hệ thống dựa trên MySQL.

5 lợi ích hàng đầu của SELinux

Trước khi đi xa hơn, có lẽ một số bạn đang tự hỏi liệu SELinux có cung cấp bất kỳ lợi ích tích cực nào không vì việc kích hoạt nó hơi phức tạp. Dưới đây là 5 lợi ích hàng đầu của SELinux mà bạn không muốn bỏ lỡ và nên cân nhắc:

  • Tăng cường bảo mật và toàn vẹn dữ liệu đồng thời bảo vệ các quy trình

  • Khả năng giới hạn các dịch vụ và daemon để dễ dự đoán hơn

  • Giảm nguy cơ tấn công leo thang đặc quyền

  • Chính sách được thực thi trên toàn hệ thống, không được người dùng quyết định và xác định về mặt quản trị

  • Cung cấp kiểm soát truy cập chi tiết

Trước khi chúng ta bắt đầu định cấu hình SELinux cho các phiên bản MySQL của mình, tại sao không xem qua cách kích hoạt SELinux với ClusterControl cho tất cả các triển khai dựa trên MySQL. Mặc dù bước này giống nhau đối với tất cả các hệ thống quản lý cơ sở dữ liệu, nhưng chúng tôi nghĩ rằng bạn nên bao gồm một số ảnh chụp màn hình để bạn tham khảo.

Các bước để kích hoạt SELinux cho MySQL Replication

Trong phần này, chúng ta sẽ triển khai MySQL Replication với ClusterControl 1.8.2. Các bước giống nhau đối với MariaDB, Galera Cluster hoặc MySQL:giả sử tất cả các nút đã sẵn sàng và SSH không cần mật khẩu được định cấu hình, hãy bắt đầu triển khai. Để bật SELinux cho quá trình thiết lập của mình, chúng ta cần bỏ chọn “Disable AppArmor / SELinux” có nghĩa là SELinux sẽ được đặt là “cho phép” cho tất cả các nút.

Tiếp theo, chúng tôi sẽ chọn Percona làm nhà cung cấp (bạn cũng có thể chọn MariaDB , Oracle hoặc MySQL 8), sau đó chỉ định mật khẩu "gốc". Bạn có thể sử dụng vị trí mặc định hoặc các thư mục khác tùy thuộc vào thiết lập của bạn.

Khi tất cả các máy chủ đã được thêm, chúng tôi có thể bắt đầu triển khai và kết thúc trước khi chúng ta có thể bắt đầu với cấu hình SELinux.

Các bước để bật SELinux cho MariaDB Replication

Trong phần này, chúng ta sẽ triển khai MariaDB Replication với ClusterControl 1.8.2.

Chúng tôi sẽ chọn MariaDB làm nhà cung cấp và phiên bản 10.5 cũng như chỉ định Mật khẩu "gốc". Bạn có thể sử dụng vị trí mặc định hoặc các thư mục khác tùy thuộc vào thiết lập của bạn.

Sau khi tất cả các máy chủ đã được thêm, chúng tôi có thể bắt đầu triển khai và hoàn thành trước khi chúng tôi có thể tiếp tục với cấu hình SELinux.

Các bước để bật SELinux cho Galera Cluster

Trong phần này, chúng ta sẽ triển khai Galera Cluster với ClusterControl 1.8.2. Một lần nữa, bỏ chọn “Disable AppArmor / SELinux” có nghĩa là SELinux sẽ được đặt là “cho phép” cho tất cả các nút:

Tiếp theo, chúng tôi sẽ chọn Percona làm nhà cung cấp và MySQL 8 cũng như chỉ định mật khẩu "gốc". Bạn có thể sử dụng một vị trí mặc định hoặc các thư mục khác tùy thuộc vào thiết lập của bạn. Sau khi tất cả các máy chủ đã được thêm, chúng tôi có thể bắt đầu triển khai và để nó kết thúc.


Như thường lệ, chúng tôi có thể theo dõi trạng thái triển khai trong phần "Hoạt động" của giao diện người dùng.

Cách định cấu hình SELinux cho MySQL

Xem xét tất cả các cụm của chúng tôi đều dựa trên MySQL, các bước để cấu hình SELinux cũng giống nhau. Trước khi chúng tôi bắt đầu thiết lập và vì đây là môi trường mới thiết lập, chúng tôi khuyên bạn nên tắt chế độ tự động khôi phục cho cả cụm và nút như theo ảnh chụp màn hình bên dưới. Bằng cách làm này, chúng tôi có thể tránh cụm chạy chuyển đổi dự phòng trong khi chúng tôi đang thực hiện kiểm tra hoặc khởi động lại dịch vụ:

Trước tiên, hãy xem ngữ cảnh của “mysql” là gì. Hãy tiếp tục và chạy lệnh sau để xem ngữ cảnh:

$ ps -eZ | grep mysqld_t

Và ví dụ về kết quả như sau:

system_u:system_r:mysqld_t:s0       845 ?        00:00:01 mysqld

Định nghĩa cho đầu ra ở trên là:

  • system_u - Người dùng

  • system_r - Vai trò

  • mysqld_t - Loại

  • s0 845 - Mức độ nhạy

Nếu bạn kiểm tra trạng thái SELinux, bạn có thể thấy trạng thái là "cho phép" chưa được bật hoàn toàn. Chúng tôi cần thay đổi chế độ thành “thực thi” và để đạt được điều đó, chúng tôi phải chỉnh sửa tệp cấu hình SELinux để làm cho nó tồn tại vĩnh viễn.

$ vi /etc/selinux/config
SELINUX=enforcing

Tiến hành khởi động lại hệ thống sau khi thay đổi. Vì chúng tôi đang thay đổi chế độ từ "cho phép" thành "thực thi", chúng tôi cần phải gắn nhãn lại hệ thống tệp. Thông thường, bạn có thể chọn gắn nhãn lại toàn bộ hệ thống tệp hay chỉ cho một ứng dụng. Lý do tại sao cần phải gắn nhãn lại là do chế độ "thực thi" cần nhãn hoặc chức năng chính xác để chạy chính xác. Trong một số trường hợp, các nhãn đó bị thay đổi trong chế độ "cho phép" hoặc "vô hiệu hóa".

Đối với ví dụ này, chúng tôi sẽ chỉ gắn nhãn lại một ứng dụng (MySQL) bằng lệnh sau:

$ fixfiles -R mysqld restore

Đối với hệ thống đã được sử dụng khá lâu, bạn nên gắn nhãn lại toàn bộ hệ thống tệp. Lệnh sau sẽ thực hiện công việc mà không cần khởi động lại và quá trình này có thể mất một lúc tùy thuộc vào hệ thống của bạn:

$ fixfiles -f -F relabel

Giống như nhiều cơ sở dữ liệu khác, MySQL cũng yêu cầu đọc và ghi rất nhiều tệp. Nếu không có ngữ cảnh SELinux chính xác cho các tệp đó, quyền truy cập sẽ bị từ chối một cách chắc chắn. Để định cấu hình chính sách cho SELinux, cần có "semanage". “Semanage” cũng cho phép bất kỳ cấu hình nào mà không cần biên dịch lại các nguồn chính sách. Đối với phần lớn các hệ thống Linux, công cụ này đã được cài đặt theo mặc định. Đối với trường hợp của chúng tôi, nó đã được cài đặt với phiên bản sau:

$ rpm -qa |grep semanage
python3-libsemanage-2.9-3.el8.x86_64
libsemanage-2.9-3.el8.x86_64

Đối với hệ thống chưa cài đặt nó, lệnh sau sẽ giúp bạn cài đặt nó:

$ yum install -y policycoreutils-python-utils

Bây giờ, hãy xem ngữ cảnh tệp MySQL là gì:

$ semanage fcontext -l | grep -i mysql

Như bạn có thể nhận thấy, có một loạt tệp được kết nối với MySQL khi lệnh trên được thực thi. Nếu bạn nhớ lại lúc đầu, chúng tôi đang sử dụng “Thư mục dữ liệu máy chủ” mặc định. Nếu cài đặt của bạn đang sử dụng vị trí thư mục dữ liệu khác, bạn cần cập nhật ngữ cảnh cho “mysql_db_t” đề cập đến / var / lib / mysql /

Bước đầu tiên là thay đổi ngữ cảnh SELinux bằng cách sử dụng bất kỳ tùy chọn nào sau đây:

$ semanage fcontext -a -t mysqld_db_t /var/lib/yourcustomdirectory
$ semanage fcontext -a -e /var/lib/mysql /var/lib/yourcustomdirectory

After the step above, run the following command:

$ restorecon -Rv /var/lib/yourcustomdirectory

Và cuối cùng, hãy khởi động lại dịch vụ:

$ systemctl restart mysql

Trong một số thiết lập, có thể một vị trí nhật ký khác được yêu cầu cho bất kỳ mục đích nào. Đối với tình huống này, “mysqld_log_t” cũng cần được cập nhật. “Mysqld_log_t” là ngữ cảnh cho vị trí mặc định /var/log/mysqld.log và có thể thực hiện các bước bên dưới để cập nhật nó:

$ semanage fcontext -a -t mysqld_log_t "/your/custom/error.log"
$ restorecon -Rv /path/to/my/custom/error.log
$ systemctl restart mysql

Sẽ có một tình huống khi cổng mặc định được định cấu hình bằng một cổng khác không phải là 3306. Ví dụ:nếu bạn đang sử dụng cổng 3303 cho MySQL, bạn cần xác định ngữ cảnh SELinux bằng lệnh sau :

$ semanage port -a -t mysqld_port_t -p tcp 3303

Và để xác minh rằng cổng đã được cập nhật, bạn có thể sử dụng lệnh sau:

$ semanage port -l | grep mysqld

Sử dụng aud2allow để tạo chính sách

Một cách khác để định cấu hình chính sách là sử dụng “aud2allow” đã được bao gồm trong quá trình cài đặt “semanage” vừa rồi. Những gì công cụ này thực hiện là kéo các sự kiện nhật ký từ Audit.log và sử dụng thông tin đó để tạo chính sách. Đôi khi, MySQL có thể cần một chính sách không chuẩn, vì vậy đây là cách tốt nhất để đạt được điều đó.

Trước tiên, hãy đặt chế độ thành cho phép đối với miền MySQL và xác minh các thay đổi:

$ semanage permissive -a mysqld_t
$ semodule -l | grep permissive
permissive_mysqld_t
permissivedomains

Bước tiếp theo là tạo chính sách bằng lệnh dưới đây:

$ grep mysqld /var/log/audit/audit.log | audit2allow -M {yourpolicyname}
$ grep mysqld /var/log/audit/audit.log | audit2allow -M mysql_new

Bạn sẽ thấy kết quả như sau (sẽ khác nhau tùy thuộc vào tên chính sách mà bạn đã đặt):

******************** QUAN TRỌNG ********************* **

Để làm cho gói chính sách này hoạt động, hãy thực thi:

semodule -i mysql_new.pp

Như đã nêu, chúng ta cần thực thi “semodule -i mysql_new.pp” để kích hoạt chính sách. Hãy tiếp tục và thực hiện nó:

$ semodule -i mysql_new.pp

Bước cuối cùng là đặt miền MySQL trở lại chế độ "thực thi":

$ semanage permissive -d mysqld_t

libsemanage.semanage_direct_remove_key:Đang xóa mô-đun permissive_mysqld_t cuối cùng (không tồn tại mô-đun permissive_mysqld_t khác ở mức ưu tiên khác).

Bạn nên làm gì nếu SELinux không hoạt động?

Rất nhiều lần, cấu hình SELinux yêu cầu quá nhiều thử nghiệm. Một trong những cách tốt nhất để kiểm tra cấu hình là thay đổi chế độ thành "cho phép". Nếu bạn chỉ muốn đặt nó cho miền MySQL, bạn chỉ cần sử dụng lệnh sau. Đây là phương pháp hay để tránh việc định cấu hình toàn bộ hệ thống thành "dễ dãi":

$ semanage permissive -a mysqld_t

Khi mọi thứ đã hoàn tất, bạn có thể thay đổi chế độ trở lại "thực thi":

$ semanage permissive -d mysqld_t

Ngoài ra, /var/log/audit/audit.log cung cấp tất cả nhật ký liên quan đến SELinux. Nhật ký này sẽ giúp bạn rất nhiều trong việc xác định nguyên nhân gốc rễ và lý do. Tất cả những gì bạn phải làm là lọc "bị từ chối" bằng cách sử dụng "grep".

$ more /var/log/audit/audit.log |grep "denied"

Bây giờ chúng ta đã hoàn tất việc định cấu hình chính sách SELinux cho hệ thống dựa trên MySQL. Một điều đáng nói là cần phải thực hiện cùng một cấu hình trên tất cả các nút trong cụm của bạn, bạn có thể cần lặp lại quy trình tương tự cho chúng.


  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ách khắc phục việc xóa dữ liệu ngẫu nhiên trong MySQL &MariaDB

  2. So sánh Amazon RDS Point-in-Time Recovery với ClusterControl

  3. MariaDB ROUND () so với TRUNCATE ()

  4. Cách UNIX_TIMESTAMP () hoạt động trong MariaDB

  5. Các phương pháp hay nhất trong cơ sở dữ liệu chia tỷ lệ:Phần thứ hai