Yêu cầu phần cứng và môi trường hệ thống
Để đảm bảo PostgreSQL hoạt động ổn định khi kích hoạt Transparent Data Encryption (TDE) và Audit, máy chủ vật lý hoặc VM cần đáp ứng các thông số tối thiểu sau.
TDE sử dụng CPU để mã hóa/giải mã dữ liệu trong bộ nhớ và khi ghi đĩa, do đó cần CPU có hỗ trợ tập lệnh AES-NI. Nếu CPU không hỗ trợ, hiệu năng sẽ giảm đáng kể (lên tới 70%).
Yêu cầu RAM tối thiểu là 4GB để chứa buffer cache và bộ nhớ cho các tiến trình mã hóa. Với Audit, log được ghi liên tục, cần dung lượng Disk tối thiểu 50GB trống ngoài dữ liệu DB, ưu tiên loại SSD NVMe để giảm độ trễ I/O.
Hệ điều hành yêu cầu Linux Kernel phiên bản 5.4 trở lên để hỗ trợ các tính năng bảo mật mới của OpenSSL và auditd.
Verify yêu cầu phần cứng
Chạy lệnh kiểm tra xem CPU có hỗ trợ AES-NI hay không và kiểm tra RAM hiện tại.
grep -o 'aesni' /proc/cpuinfo | head -n 1 && free -h
Kết quả mong đợi: Lệnh đầu tiên trả về "aesni" và lệnh thứ hai hiển thị tổng RAM >= 4GB.
Verify hệ điều hành
Kiểm tra phiên bản Kernel và phát hành của Linux (Ubuntu/Debian).
uname -r && cat /etc/os-release | grep PRETTY_NAME
Kết quả mong đợi: Phiên bản kernel >= 5.4 và dòng hệ điều hành là Ubuntu 20.04/22.04 hoặc Debian 11/12.
Cài đặt PostgreSQL 14+ trên Linux
Chúng ta sẽ sử dụng nguồn repo chính thức của PostgreSQL để đảm bảo có phiên bản mới nhất (14 trở lên) và các gói mở rộng cần thiết cho TDE (pgcrypto).
Việc cài đặt qua apt mặc định của Ubuntu thường chỉ có phiên bản cũ, không hỗ trợ đầy đủ các tính năng bảo mật mới.
Thêm kho lưu trữ PostgreSQL chính thức
Cập nhật hệ thống và cài đặt các công cụ cần thiết để xử lý key GPG và curl.
sudo apt update && sudo apt install -y curl gnupg lsb-release
Kết quả mong đợi: Các gói công cụ được cài đặt thành công, không có lỗi.
Tải key GPG của PostgreSQL và lưu vào thư mục apt key.
curl --fail --location --silent https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/postgresql.gpg > /dev/null
Kết quả mong đợi: Key được lưu thành công, không có output lỗi.
Thêm file nguồn (sources.list) cho PostgreSQL 14. Thay thế "jammy" bằng codename của OS nếu không phải Ubuntu 22.04 (ví dụ: "focal" cho 20.04, "bookworm" cho Debian 12).
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list
Kết quả mong đợi: File cấu hình nguồn được tạo tại /etc/apt/sources.list.d/.
Cài đặt PostgreSQL và các gói mở rộng
Cập nhật lại danh sách gói và cài đặt PostgreSQL 14 cùng với gói pgcrypto (bắt buộc cho TDE) và các công cụ quản lý.
sudo apt update && sudo apt install -y postgresql-14 postgresql-contrib-14 postgresql-server-dev-14
Kết quả mong đợi: PostgreSQL 14 được cài đặt, dịch vụ tự động khởi động.
Verify phiên bản PostgreSQL
Chạy lệnh kiểm tra phiên bản để đảm bảo đúng yêu cầu >= 14.
sudo -u postgres psql --version
Kết quả mong đợi: Output hiển thị "psql (PostgreSQL) 14.x".
Cấu hình OpenSSL và quyền truy cập an toàn
TDE trên PostgreSQL phụ thuộc hoàn toàn vào thư viện OpenSSL của hệ điều hành để thực hiện các thuật toán mã hóa. Chúng ta cần đảm bảo OpenSSL được cài đặt và cấu hình đúng chuẩn bảo mật.
Đồng thời, cần hạn chế quyền truy cập vào các file cấu hình của OpenSSL và PostgreSQL để ngăn chặn rủi ro bị đánh cắp key hoặc config file.
Cài đặt OpenSSL và xác minh phiên bản
Cài đặt gói openssl và libssl-dev (cần thiết để compile các extension sau này).
sudo apt install -y openssl libssl-dev
Kết quả mong đợi: Các gói thư viện mã hóa được cài đặt thành công.
Kiểm tra phiên bản OpenSSL. Để sử dụng TDE an toàn, nên sử dụng OpenSSL 1.1.1 hoặc 3.0.x trở lên.
openssl version -a
Kết quả mong đợi: Dòng đầu tiên hiển thị phiên bản OpenSSL >= 1.1.1f.
Cấu hình file default OpenSSL
Chúng ta sẽ chỉnh sửa file cấu hình mặc định của OpenSSL để đảm bảo các thuật toán mã hóa mạnh được ưu tiên và loại bỏ các giao thức cũ không an toàn.
File cấu hình mặc định nằm tại /etc/ssl/openssl.cnf. Tuy nhiên, để tránh xung đột khi upgrade, chúng ta sẽ tạo file override trong thư mục /etc/ssl/openssl.cnf.d/ (nếu có) hoặc chỉnh sửa trực tiếp phần [system_default_sect] trong file chính.
Tạo file cấu hình an toàn để đặt thuật toán mặc định là AES-256-GCM.
sudo mkdir -p /etc/ssl/openssl.cnf.d
cat
Kết quả mong đợi: File cấu hình mới được tạo, không có lỗi cú pháp.
Chạy lệnh kiểm tra xem OpenSSL đã đọc đúng cấu hình mới chưa.
openssl enc -list -ciphers | grep -i aes256-gcm
Kết quả mong đợi: Danh sách cipher hiển thị "AES256-GCM" và nó nằm ở đầu danh sách ưu tiên.
Thiết lập quyền truy cập an toàn (File Permissions)
Các file cấu hình của PostgreSQL và thư viện OpenSSL chứa thông tin nhạy cảm hoặc key. Chúng ta cần khóa chặt quyền truy cập.
Đổi quyền sở hữu của thư mục dữ liệu PostgreSQL (data directory) về user postgres.
sudo chown -R postgres:postgres /var/lib/postgresql/14/main
Kết quả mong đợi: Không có output lỗi, quyền sở hữu đã chuyển sang postgres.
Đặt quyền đọc ghi chỉ dành cho owner (700) đối với thư mục data để ngăn user khác đọc dữ liệu thô.
sudo chmod 700 /var/lib/postgresql/14/main
Kết quả mong đợi: Thư mục data chỉ có quyền 700.
Đặt quyền an toàn cho file cấu hình PostgreSQL (postgresql.conf và pg_hba.conf). Chỉ owner được đọc/ghi, group và others không được phép truy cập.
sudo chmod 600 /etc/postgresql/14/main/postgresql.conf
sudo chmod 600 /etc/postgresql/14/main/pg_hba.conf
Kết quả mong đợi: Các file config có quyền 600.
Đặt quyền an toàn cho thư mục và file cấu hình của OpenSSL. Chỉ root được truy cập.
sudo chmod 700 /etc/ssl/private
sudo chmod 600 /etc/ssl/openssl.cnf
Kết quả mong đợi: Thư mục private và file config của OpenSSL được khóa chặt.
Verify quyền truy cập
Dùng lệnh ls để kiểm tra lại quyền hạn của các file và thư mục quan trọng.
ls -ld /var/lib/postgresql/14/main /etc/postgresql/14/main/postgresql.conf /etc/ssl/openssl.cnf
Kết quả mong đợi:
- /var/lib/postgresql/14/main: drwx------ postgres postgres
- postgresql.conf: -rw------- postgres postgres
- openssl.cnf: -rw------- root root
Nếu quyền hiển thị đúng như trên, môi trường đã sẵn sàng cho các bước cấu hình Audit và TDE trong phần tiếp theo.
Điều hướng series:
Mục lục: Series: Triển khai Database an toàn với Transparent Data Encryption và Audit trên Linux
Phần 2: Cấu hình cơ bản cho Audit trên Linux »