通过遵循安全检查表将显着降低这种风安全性是所有系统都必须尽可能保护您的数据的必要条件。即使总是存在被黑客入侵的风险,险。基本的安全检查表包括防火墙配置、数据加密、身份验证策略等。在基于 Debian 的操作系统上保护数据的另一个重要工具是 AppArmor。在这篇文章中,我们将看到什么是以及如何为PostgreSQL和TimescaleDB数据库配置它。
什么是 AppArmor?
AppArmor 默认包含在 Ubuntu 和 Debian(以及其他)操作系统中,是一种强制访问控制 (MAC) 系统,用于将程序限制在一组有限的资源中。它使用加载到内核中的配置文件工作。这些配置文件可以在两种模式下配置:
- 强制执行:在此模式下加载的配置文件将强制执行配置文件中定义的策略并报告策略违规尝试。
- 投诉:此模式下的配置文件不会强制执行策略,而是报告策略违规尝试。
此外,AppArmor 允许混合执行和投诉模式配置文件。
如何配置 AppArmor
AppArmor 配置文件位于 /etc/apparmor.d/ 中。您可以创建自己的配置文件并将它们移动到那里或检查AppArmor 存储库。让我们看看如何创建一个新的 AppArmor 配置文件。
首先,让我们安装必要的软件包来处理这个问题:
$ apt install apparmor-profiles apparmor-utils
并查看是否启用了 AppArmor:
$ systemctl status apparmor.service
要么
$ 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 ...
如果检查提到的路径 /etc/apparmor.d/,将看到一些基本配置文件,例如 usr.sbin.tcpdump 或 usr.sbin.traceroute。现在,让我们为 PostgreSQL 或 TimescaleDB 创建一个新的配置文件。为此,可以使用此配置文件作为示例。基于该配置文件,我们将更具体地替换 PostgreSQL 版本。在这种情况下,我们将使用 PostgreSQL 13。
# Author: Felix Geyer <debfx@ubuntu.com> #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, }
将其存储在 /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres 中。然后,使用 apparmor_parser -a 加载新配置文件:
$ cat /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres | sudo apparmor_parser -a
如果想更改此配置文件中的某些内容,则需要重新加载它:
$ apparmor_parser -r /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres
可以使用以下命令为配置文件分配投诉模式:
$ aa-complain /usr/lib/postgresql/13/bin/postgres
然后,可以查看/var/log 中的syslog 文件,查看AppArmor 配置是否正确,或者需要修改一些内容。在安全的情况下,可以通过运行以下命令将模式更改为强制执行:
$ aa-enforce /usr/lib/postgresql/13/bin/postgres
可以过滤日志以查找 ALLOWED 或 DENIED 操作:
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
还可以通过这种方式禁用配置文件:
$ aa-disable /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres
将需要重新加载服务:
$ systemctl reload apparmor.service
如果更喜欢禁用 AppArmor,可以运行:
$ systemctl stop apparmor $ systemctl disable apparmor
当然,不建议在生产环境中使用这种方式,应该保持它运行,至少在所有配置文件中使用 Complain 模式,以便检查日志以查找意外行为。
如何在 ClusterControl 和 AppArmor 中使用 PostgreSQL 和 TimescaleDB
ClusterControl不管理任何 Linux 内核安全模块,如 AppArmor。使用 ClusterControl部署PostgreSQL或TimescaleDB集群时,可以指定是否希望ClusterControl在部署过程中为禁用 AppArmor 以降低出错风险:
如果不想禁用它(推荐用于生产环境),可以使用 Complain 模式并监控服务器中的日志,以确保拥有正确的 AppArmor 配置。之后,可以按照上述说明将其更改为强制执行。
原文链接:https://severalnines.com/database-blog/how-configure-apparmor-postgresql-and-timescaledb