Bảo mật là yếu tố bắt buộc đối với tất cả các hệ thống để bảo vệ dữ liệu của bạn nhiều nhất có thể. Ngay cả khi luôn có nguy cơ bị tấn công, bằng cách tuân theo danh sách kiểm tra bảo mật sẽ giảm nguy cơ này đáng kể. Danh sách kiểm tra bảo mật cơ bản bao gồm cấu hình tường lửa, mã hóa dữ liệu, chính sách xác thực, v.v. Một công cụ quan trọng khác để bảo vệ dữ liệu của bạn trên hệ điều hành dựa trên Debian là AppArmor. Trong blog này, chúng ta sẽ xem nó là gì và cách cấu hình nó cho cơ sở dữ liệu PostgreSQL và TimescaleDB.
AppArmor là gì?
AppArmor, được bao gồm trong mặc định trong hệ điều hành Ubuntu và Debian (trong số các hệ điều hành khác), là một hệ thống Kiểm soát Truy cập Bắt buộc (MAC) để giới hạn các chương trình trong một nhóm tài nguyên giới hạn. Nó hoạt động bằng cách sử dụng các cấu hình được nạp vào hạt nhân. Các cấu hình này có thể được định cấu hình ở hai chế độ:
-
Thực thi:Các hồ sơ được tải ở chế độ này sẽ thực thi chính sách được xác định trong hồ sơ cũng như báo cáo vi phạm chính sách nỗ lực.
-
Khiếu nại:Các hồ sơ trong chế độ này sẽ không thực thi chính sách mà thay vào đó báo cáo các nỗ lực vi phạm chính sách.
Ngoài ra, AppArmor cho phép trộn các cấu hình chế độ thực thi và khiếu nại.
Cách định cấu hình AppArmor
Cấu hình AppArmor có trong /etc/apparmor.d/. Bạn có thể tạo hồ sơ của riêng mình và di chuyển chúng đến đó hoặc kiểm tra kho AppArmor. Hãy xem cách tạo hồ sơ AppArmor mới.
Trước tiên, hãy cài đặt các gói cần thiết để xử lý việc này:
$ apt install apparmor-profiles apparmor-utils
Và xem AppArmor đã được bật chưa:
$ systemctl status apparmor.service
hoặc
$ aa-status
apparmor module is loaded.
31 profiles are loaded.
29 profiles are in enforce mode.
/snap/snapd/11588/usr/lib/snapd/snap-confine
/snap/snapd/11588/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
...
Nếu bạn kiểm tra đường dẫn được đề cập /etc/apparmor.d/, bạn sẽ thấy một số cấu hình cơ bản như usr.sbin.tcpdump hoặc usr.sbin.traceroute. Bây giờ, hãy tạo một hồ sơ mới cho PostgreSQL hoặc TimescaleDB. Đối với điều này, bạn có thể sử dụng hồ sơ này làm ví dụ. Dựa trên hồ sơ đó, chúng tôi sẽ thay thế phiên bản PostgreSQL để cụ thể hơn. Trong trường hợp này, chúng tôi sẽ sử dụng PostgreSQL 13.
# Author: Felix Geyer <[email protected]>
#include <tunables/global>
/usr/lib/postgresql/13/bin/postgres {
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/ssl_keys>
/etc/postgresql/** r,
/usr/share/postgresql/** r,
/var/lib/postgresql/** rwl,
/{,var/}run/postgresql/** rw,
owner @{PROC}/13/oom_adj rw,
}
Lưu trữ nó trong /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres. Sau đó, tải cấu hình mới bằng apparmor_parser -a:
$ cat /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres | sudo apparmor_parser -a
Nếu bạn muốn thay đổi điều gì đó trên hồ sơ này, bạn cần tải lại hồ sơ đó:
$ apparmor_parser -r /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres
Bạn có thể chỉ định chế độ Khiếu nại cho cấu hình bằng cách sử dụng lệnh sau:
$ aa-complain /usr/lib/postgresql/13/bin/postgres
Sau đó, bạn có thể kiểm tra tệp nhật ký hệ thống trong / var / log để xem cấu hình AppArmor có chính xác hay không hoặc bạn cần sửa đổi điều gì đó. Khi an toàn, bạn có thể thay đổi chế độ thành Thực thi bằng cách chạy:
$ aa-enforce /usr/lib/postgresql/13/bin/postgres
Bạn có thể lọc nhật ký để tìm các hành động ĐƯỢC PHÉP hoặc TỪ CHỐI:
Jun 25 19:48:02 ip-172-31-18-94 kernel: [ 5160.111028] audit: type=1400 audit(1624650482.537:103): apparmor="ALLOWED" operation="open" profile="/usr/lib/postgresql/13/bin/postgres" name="/proc/17405/oom_score_adj" pid=17405 comm="postgres" requested_mask="w" denied_mask="w" fsuid=113 ouid=113
Jun 25 19:48:02 ip-172-31-18-94 kernel: [ 5160.112524] audit: type=1400 audit(1624650482.541:104): apparmor="ALLOWED" operation="open" profile="/usr/lib/postgresql/13/bin/postgres" name="/proc/17404/oom_score_adj" pid=17404 comm="postgres" requested_mask="w" denied_mask="w" fsuid=113 ouid=113
Jun 25 19:50:02 ip-172-31-18-94 kernel: [ 5280.141262] audit: type=1400 audit(1624650602.569:112): apparmor="DENIED" operation="open" profile="/usr/lib/postgresql/13/bin/postgres" name="/proc/17518/oom_score_adj" pid=17518 comm="postgres" requested_mask="w" denied_mask="w" fsuid=113 ouid=113
Bạn cũng có thể tắt cấu hình theo cách này:
$ aa-disable /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres
Và bạn sẽ cần tải lại dịch vụ:
$ systemctl reload apparmor.service
Trong trường hợp bạn muốn tắt AppArmor, bạn có thể chạy:
$ systemctl stop apparmor
$ systemctl disable apparmor
Tất nhiên, điều này không được khuyến nghị cho môi trường sản xuất và bạn nên giữ cho nó chạy, ít nhất, bằng cách sử dụng chế độ Khiếu nại trong tất cả các cấu hình, vì vậy bạn có thể kiểm tra nhật ký để tìm hành vi không mong muốn.
Cách sử dụng PostgreSQL và TimescaleDB với ClusterControl và AppArmor
ClusterControl không quản lý bất kỳ mô-đun bảo mật nhân Linux nào như AppArmor. Khi triển khai một cụm PostgreSQL hoặc TimescaleDB bằng cách sử dụng ClusterControl, bạn có thể chỉ định nếu bạn muốn ClusterControl tắt AppArmor cho bạn trong quá trình triển khai để giảm nguy cơ lỗi:
Nếu bạn không muốn tắt tính năng này, cách này được khuyến nghị cho sản xuất môi trường, bạn có thể sử dụng chế độ Khiếu nại và theo dõi nhật ký trong máy chủ của mình để đảm bảo rằng bạn có cấu hình AppArmor chính xác. Sau đó, bạn có thể thay đổi nó thành Thực thi theo hướng dẫn được đề cập ở trên.
Bạn có thể tìm thêm thông tin về cấu hình AppArmor trên trang web chính thức của Ubuntu.