PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara mengonfigurasi AppArmor untuk PostgreSQL dan TimescaleDB

Keamanan adalah suatu keharusan bagi semua sistem untuk melindungi data Anda sebanyak mungkin. Bahkan ketika selalu ada risiko untuk diretas, dengan mengikuti daftar periksa keamanan akan mengurangi risiko ini secara signifikan. Daftar periksa keamanan dasar mencakup konfigurasi firewall, enkripsi data, kebijakan otentikasi, dll. Alat penting lainnya untuk melindungi data Anda pada sistem operasi Berbasis Debian adalah AppArmor. Di blog ini, kita akan melihat apa itu dan bagaimana mengkonfigurasinya untuk database PostgreSQL dan TimescaleDB.

Apa itu AppArmor?

AppArmor, disertakan secara default dalam sistem operasi Ubuntu dan Debian (antara lain), adalah sistem Kontrol Akses Wajib (MAC) untuk membatasi program ke sumber daya yang terbatas. Ia bekerja menggunakan profil yang dimuat ke dalam kernel. Profil ini dapat dikonfigurasi dalam dua mode:

  • Penegakan:Profil yang dimuat dalam mode ini akan menerapkan kebijakan yang ditentukan dalam profil serta melaporkan pelanggaran kebijakan upaya.

  • Keluhan:Profil dalam mode ini tidak akan menerapkan kebijakan tetapi melaporkan upaya pelanggaran kebijakan.

Selain itu, AppArmor memungkinkan pencampuran profil mode penegakan dan keluhan.

Cara Mengonfigurasi AppArmor

Profil AppArmor ada di /etc/apparmor.d/. Anda dapat membuat profil Anda sendiri dan memindahkannya ke sana atau memeriksa repositori AppArmor. Mari kita lihat cara membuat profil AppArmor baru.

Pertama, mari kita instal paket yang diperlukan untuk menangani ini:

$ apt install apparmor-profiles apparmor-utils

Dan lihat apakah AppArmor diaktifkan:

$ systemctl status apparmor.service

atau

$ 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
  ...

Jika Anda memeriksa jalur yang disebutkan /etc/apparmor.d/, Anda akan melihat beberapa profil dasar seperti usr.sbin.tcpdump, atau usr.sbin.traceroute. Sekarang, mari buat profil baru untuk PostgreSQL atau TimescaleDB. Untuk ini, Anda dapat menggunakan profil ini sebagai contoh. Berdasarkan profil tersebut, kami akan mengganti versi PostgreSQL menjadi lebih spesifik. Dalam hal ini, kita akan menggunakan 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,
}

Simpan di /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres. Kemudian, muat profil baru menggunakan apparmor_parser -a:

$ cat /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres | sudo apparmor_parser -a

Jika Anda ingin mengubah sesuatu di profil ini, Anda perlu memuat ulang:

$ apparmor_parser -r /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres

Anda dapat menetapkan mode Keluhan ke profil dengan menggunakan perintah berikut:

$ aa-complain /usr/lib/postgresql/13/bin/postgres

Kemudian, Anda dapat memeriksa file syslog di /var/log untuk melihat apakah konfigurasi AppArmor sudah benar, atau Anda perlu mengubah sesuatu. Jika sudah aman, Anda dapat mengubah mode ke Enforce dengan menjalankan:

$ aa-enforce /usr/lib/postgresql/13/bin/postgres

Anda dapat memfilter log untuk mencari tindakan yang DIPERBOLEHKAN atau DITOLAK:

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

Anda juga dapat menonaktifkan profil dengan cara ini:

$ aa-disable /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres

Dan Anda perlu memuat ulang layanan:

$ systemctl reload apparmor.service

Jika Anda memilih untuk menonaktifkan AppArmor, Anda dapat menjalankan:

$ systemctl stop apparmor
$ systemctl disable apparmor

Tentu saja, ini tidak disarankan untuk lingkungan produksi, dan Anda harus tetap menjalankannya, setidaknya, menggunakan mode Keluhan di semua profil, sehingga Anda dapat memeriksa log untuk mencari perilaku yang tidak diharapkan.

Cara menggunakan PostgreSQL dan TimescaleDB dengan ClusterControl dan AppArmor

ClusterControl tidak mengelola modul keamanan kernel Linux seperti AppArmor. Saat menerapkan cluster PostgreSQL atau TimescaleDB dengan menggunakan ClusterControl, Anda dapat menentukan apakah Anda ingin ClusterControl menonaktifkan AppArmor untuk Anda selama proses penerapan untuk mengurangi risiko kesalahan:

Jika Anda tidak ingin menonaktifkannya, yang disarankan untuk produksi lingkungan, Anda dapat menggunakan mode Keluhan dan memantau log di server Anda untuk memastikan bahwa Anda memiliki konfigurasi AppArmor yang benar. Setelah itu, Anda dapat mengubahnya menjadi Enforce dengan mengikuti petunjuk yang disebutkan di atas.

Anda dapat menemukan informasi lebih lanjut tentang konfigurasi AppArmor di situs resmi Ubuntu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengonversi bilangan bulat menjadi string sebagai bagian dari kueri PostgreSQL?

  2. Kueri PostgreSQL berjalan lebih cepat dengan pemindaian indeks, tetapi mesin memilih hash join

  3. Postgres:Bagaimana cara melakukan kunci Komposit?

  4. Apa format untuk string / URL koneksi PostgreSQL?

  5. Menggabungkan String dan Angka di PostgreSQL