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

Cách cấu hình SELinux cho PostgreSQL và TimescaleDB

Dữ liệu là tài sản quan trọng nhất trong một công ty, vì vậy bạn nên tính đến tất cả các cân nhắc bảo mật trong cơ sở dữ liệu của mình để giữ an toàn nhất có thể. Một tính năng bảo mật quan trọng trên Hệ điều hành dựa trên RedHat là SELinux. Trong blog này, chúng ta sẽ xem tính năng này là gì và cách định cấu hình nó cho cơ sở dữ liệu PostgreSQL và TimescaleDB.

SELinux là gì?

Security-Enhanced Linux (SELinux) là một kiến ​​trúc bảo mật dành cho các hệ thống Linux cho phép quản trị viên có nhiều quyền kiểm soát hơn đối với những người có thể truy cập vào hệ thống. Nó xác định các điều khiển truy cập cho các ứng dụng, quy trình và tệp trên hệ thống bằng cách sử dụng các chính sách bảo mật, là một tập hợp các quy tắc cho SELinux biết những gì có thể được truy cập.

Khi một ứng dụng hoặc quy trình, được gọi là chủ đề, đưa ra yêu cầu truy cập một đối tượng, chẳng hạn như tệp, SELinux sẽ kiểm tra bằng bộ đệm véc tơ truy cập (AVC), nơi các quyền được lưu vào bộ nhớ đệm cho các chủ thể và đối tượng . Nếu SELinux không thể đưa ra quyết định về quyền truy cập dựa trên các quyền được lưu trong bộ nhớ cache, nó sẽ gửi yêu cầu đến máy chủ bảo mật. Máy chủ bảo mật kiểm tra ngữ cảnh bảo mật của ứng dụng hoặc quy trình và tệp. Bối cảnh bảo mật được áp dụng từ cơ sở dữ liệu chính sách SELinux và quyền được cấp hoặc từ chối.

Có nhiều cách khác nhau để định cấu hình nó. Bạn có thể xem tệp cấu hình SELinux chính trong / etc / selinux / config để xem nó hiện được cấu hình như thế nào.

$ cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Có hai lệnh trong tệp này. Lệnh SELINUX chỉ định chế độ SELinux và nó có thể có ba giá trị có thể có:Bắt buộc, Cho phép hoặc Vô hiệu hóa.

  • Thực thi (Mặc định):Nó sẽ kích hoạt và thực thi chính sách bảo mật SELinux trên hệ thống, từ chối các nỗ lực truy cập trái phép bởi người dùng và quy trình.

  • Cho phép:Sử dụng nó, SELinux được bật nhưng sẽ không thực thi chính sách bảo mật. Tất cả các vi phạm chính sách đều được ghi vào nhật ký kiểm toán. Đó là một cách tốt để kiểm tra SELinux trước khi thực thi nó.

  • Đã tắt:SELinux đã bị tắt.

Lệnh SELINUXTYPE chỉ định chính sách sẽ được sử dụng. Giá trị mặc định được nhắm mục tiêu và với chính sách này, SELinux cho phép bạn tùy chỉnh và tinh chỉnh các quyền kiểm soát truy cập.

Ngay cả khi chế độ Bắt buộc là chế độ mặc định, việc tắt SELinux đã trở thành một thực tế phổ biến vì nó dễ dàng hơn so với việc đối phó với nó. Tất nhiên, điều này không được khuyến khích và bạn nên định cấu hình nó ít nhất ở chế độ Cho phép và kiểm tra nhật ký định kỳ để tìm hành vi bất thường.

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

Nếu SELinux bị tắt trong môi trường của bạn, bạn có thể bật SELinux bằng cách chỉnh sửa tệp cấu hình / etc / selinux / config và đặt SELINUX =permissive hoặc SELINUX =thi hành.

Nếu bạn chưa bao giờ sử dụng SELinux, cách tốt nhất để định cấu hình nó là sử dụng Chế độ cho phép trước, kiểm tra nhật ký tìm kiếm các thông báo bị từ chối trong tệp nhật ký thông báo và sửa nó nếu cần:

$ grep "SELinux" /var/log/messages

Sau khi mọi thứ đã được xem xét và tiến hành an toàn, bạn có thể định cấu hình SELinux để thực thi bằng phương pháp trước đó hoặc không cần khởi động lại bằng lệnh sau:

$ setenforce 1

Nếu bạn cần khôi phục, hãy chạy:

$ setenforce 0

Lệnh này có thể được sử dụng để chuyển đổi nhanh chóng giữa chế độ Cưỡng chế và Cho phép nhưng những thay đổi này sẽ không tồn tại nếu bạn khởi động lại hệ thống. Bạn sẽ cần định cấu hình giá trị trong tệp cấu hình để làm cho nó hoạt động bền bỉ.

Bạn có thể kiểm tra trạng thái SELinux hiện tại bằng lệnh getenforce:

$ getenforce
Enforcing

Hoặc để biết thêm thông tin chi tiết, bạn có thể sử dụng sestatus để thay thế:

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33

Cách định cấu hình SELinux cho PostgreSQL và TimescaleDB

Nếu bạn đang cài đặt PostgreSQL / TimescaleDB bằng cách sử dụng cấu hình mặc định và thư mục dữ liệu mặc định và SELinux cũng được định cấu hình theo mặc định, hầu hết có thể bạn sẽ không gặp vấn đề gì, nhưng vấn đề là nếu bạn muốn chẳng hạn như sử dụng một vị trí cụ thể để lưu trữ cơ sở dữ liệu của bạn, vì vậy hãy xem cách cấu hình SELinux để làm cho nó hoạt động. Đối với ví dụ này, chúng tôi sẽ cài đặt PostgreSQL 13 trên CentOS 8 và sẽ sử dụng / pgsql / data / làm thư mục dữ liệu.

Trước tiên, hãy bật mô-đun postgresql:

$ dnf module enable postgresql:13

Cài đặt gói PostgreSQL 13 tương ứng:

$ dnf -y install postgresql-server postgresql-contrib postgresql-libs

Bật dịch vụ:

$ systemctl enable postgresql.service

Khởi tạo cơ sở dữ liệu PostgreSQL của bạn:

$ postgresql-setup --initdb

Bây giờ, nếu bạn chỉ khởi động dịch vụ mà không thay đổi bất cứ điều gì, chẳng hạn như thư mục dữ liệu, nó sẽ bắt đầu tốt, nếu không, bạn sẽ thấy lỗi như:

Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal postmaster[29116]: postmaster: could not access the server configuration file "/pgsql/data/postgresql.conf": Permission denied

Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal systemd[1]: postgresql.service: Main process exited, code=exited, status=2/INVALIDARGUMENT

Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal systemd[1]: postgresql.service: Failed with result 'exit-code'.

Vì vậy, hãy xem cách khắc phục. Đầu tiên, thay đổi thư mục dữ liệu của bạn trong tệp cấu hình PostgreSQL và dịch vụ của bạn. Đối với điều này, hãy chỉnh sửa tệp dịch vụ PostgreSQL và thay đổi vị trí PGDATA:

$ vi /etc/systemd/system/multi-user.target.wants/postgresql.service
Environment=PGDATA=/pgsql/data

Chỉnh sửa tệp hồ sơ cơ sở PostgreSQL và thay đổi vị trí PGDATA:

$ vi /var/lib/pgsql/.bash_profile
PGDATA=/pgsql/data

Đọc các thay đổi:

$ systemctl daemon-reload

Khởi tạo cơ sở dữ liệu PostgreSQL mới:

$ postgresql-setup --initdb
 * Initializing database in '/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

Không cần thiết phải chỉ định vị trí thư mục dữ liệu mới như bạn đã làm trước đó trong tệp cấu hình. Bây giờ, trước khi bắt đầu, bạn cần thay đổi nhãn SELinux:

$ chcon -Rt postgresql_db_t /pgsql/data

Lệnh này sẽ thay đổi ngữ cảnh bảo mật SELinux và các cờ là:

  • - R, --recursive:Hoạt động trên các tệp và thư mục một cách đệ quy

  • - t, --type =TYPE:Đặt loại TYPE trong ngữ cảnh bảo mật đích

Sau đó, khởi động dịch vụ PostgreSQL:

$ systemctl start postgresql.service

Và cơ sở dữ liệu của bạn hiện đang chạy:

$ ps aux |grep postgres |head -1
postgres   28566  0.0  3.0 497152 25312 ?        Ss   21:16   0:00 /usr/bin/postmaster -D /pgsql/data

Đây chỉ là một ví dụ cơ bản về cách cấu hình SELinux cho PostgreSQL / TimescaleDB. Có nhiều cách khác nhau để thực hiện việc này với các hạn chế hoặc công cụ khác nhau. Việc triển khai hoặc cấu hình SELinux tốt nhất tùy thuộc vào yêu cầu kinh doanh.

Cách sử dụng PostgreSQL và TimescaleDB với ClusterControl và SELinux

ClusterControl không quản lý bất kỳ mô-đun bảo mật nhân Linux nào như SELinux. 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 SELinux 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 nó, bạn có thể sử dụng Permissive và theo dõi nhật ký trong máy chủ của bạn để đảm bảo rằng bạn có cấu hình SELinux chính xác. Sau đó, bạn có thể thay đổi nó thành Enforcing theo hướng dẫn đã đề cập ở trên.

Bạn có thể tìm thêm thông tin về cấu hình SELinux trên các trang web chính thức của RedHat hoặc CentOS.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL không chấp nhận bí danh cột trong mệnh đề WHERE

  2. Cách tính toán trung bình động trong PostgreSQL

  3. pgFincore 1.2, một phần mở rộng PostgreSQL

  4. Câu lệnh Postgresql đơn giản - tên cột không tồn tại

  5. Sự khác biệt của Rails / Postgresql SQL w / Ngày