SEPostgreSQLv8.4

来自 PostgreSQL Wiki
跳转到导航跳转到搜索

SepgsqlLogo.png

什么是 SE-PostgreSQL

安全增强 PostgreSQL (SE-PostgreSQL) 是 PostgreSQL 的一个可选访问控制功能,但在 v8.4 系列中尚未上游。本页介绍如何在 PostgreSQL v8.4 系列中设置 SE-PostgreSQL。

它可以对各种数据库对象应用细粒度的强制访问控制策略,并根据远程/本地客户端进程的一致权限和操作系统的集中安全策略做出决策。这意味着我们可以控制对数据库的访问,就像内核使用 SELinux 控制对文件系统的访问一样。我们称之为访问控制中的系统级一致性。

它完全正交于默认的数据库 ACL 机制,这意味着两种访问控制功能都需要允许对所需数据库对象的访问。

SE-PostgreSQL 将帮助保护我们的信息资产免受一些威胁,例如泄露、破坏和毁灭。

请参阅 SE-PostgreSQL 以了解更多详细信息。

安装

需求

SE-PostgreSQL 需要以下软件包才能构建和运行。

  • 启用了 SELinux 的 Linux 内核 (2.6.24 或更高版本)
  • libselinux 和 libselinux-devel (2.0.80 或更高版本)
  • selinux-policy (3.4.2 或更高版本)
  • policycoreutils
  • checkpolicy

编译

首先,您需要获取适合版本的 SE-PostgreSQL 补丁。以下 补丁列表 部分包含指向 SE-PostgreSQL 的任何后续版本的链接。

$ wget ftp://ftp.postgresql.org/pub/source/v8.4/postgresql-8.4.0.tar.gz
$ wget http://sepgsql.googlecode.com/files/sepgsql-00-full-8.4.0-rXXXX.patch.gz

接下来,您需要解压 PostgreSQL 压缩包,然后应用 SE-PostgreSQL 补丁。

$ tar zxvf postgresql-8.4.0.tar.gz
$ cd postgresql-8.4.0
$ gunzip -c ../sepgsql-00-full-8.4.0-rXXXX.patch.gz | patch -p1

在配置脚本中,您需要添加 --enable-selinux 选项以启用 SE-PostgreSQL 功能。

$ ./configure --enable-selinux

默认的 SELinux 策略 (参考策略) 已经为 SE-PostgreSQL 提供了一组基本的规则。此外,我们还提供了一组开发目的策略,存储在 src/backend/security/sepgsql/policy 中。它不会在默认情况下构建,因此您需要在目录中运行 make。

$ make
$ make -C src/backend/security/sepgsql/policy

注意:我们建议安装开发策略,因为默认的 SELinux 策略没有配置为将 PostgreSQL 安装在 /usr/local/pgsql,因此如果未安装开发策略,我们需要手动设置已安装二进制文件的安全上下文。

安装

运行 make install 作为常规情况,并运行 semodule -i 以安装开发目的安全策略模块。

$ su
# make install
# semodule -i src/backend/security/sepgsql/policy/sepostgresql-devel.pp

您需要在已安装的二进制文件上分配正确的安全上下文。restorecon 命令用于重置指定目录下文件的安全上下文。

# restorecon -R /usr/local/pgsql

注意:我们假设 SE-PostgreSQL 作为 sepgsql 用户运行,因此以下示例使用该用户。

您需要为数据库集群创建一个空目录。所有数据库文件都需要标记为 postgresql_t。新创建的文件会继承父目录的安全上下文,您需要在 initdb 之前更改目录的标签。

# mkdir /opt/sepgsql
# chown sepgsql:users /opt/sepgsql
# chcon -t postgresql_db_t /opt/sepgsql

在 initdb 中,您需要添加 --enable-selinux 选项以启用 SE-PostgreSQL 功能。如果您省略它,SE-PostgreSQL 功能将被禁用,并且它将像普通 PostgreSQL 一样执行。

# su - sepgsql
$ export PATH=/usr/local/pgsql/bin:${PATH}
$ initdb --enable-selinux

然后,启动 SE-PostgreSQL

$ pg_ctl start

测试

回归测试

当您尝试在主目录中运行回归测试时,SE-PostgreSQL 会阻止加载标记为 user_home_t 的共享库,因此您需要在回归测试期间禁用此限制。开发目的策略 (sepostgresql-devel.pp) 提供了一个布尔值来关闭该规则。它可以更改如下。

# setsebool -P sepgsql_regression_test_mode on

SE-PostgreSQL 测试

我们还在 src/test/sepgsql 中提供了 SE-PostgreSQL 特定的测试。您可以检查 SE-PostgreSQL 是否按预期执行。

$ createdb test
$ make -C src/test/sepgsql

此测试需要以下项目

  • 当前用户可以以超级用户身份登录 test 数据库。
  • 当前用户至少执行 MCS 类别 s0-s0:c0.c15
  • allow_user_postgresql_connectsepgsql_regression_test_mode 已打开。
  • mcstrans 守护进程已停止。

补丁列表

PostgreSQL v8.4.0 (2009-07-01)

变更日志
  • 将基础版本升级到 v8.4.0

PostgreSQL v8.4rc2 (2009-06-22)

变更日志
  • 将基础版本升级到 v8.4rc2

PostgreSQL v8.4rc1 (2009-06-19)

变更日志
  • 将基础版本升级到 v8.4rc1
  • 添加对孤儿 pg_security 条目的支持
  • 添加 sepostgresql_mcstrans GUC 选项
  • 为模式/序列添加 SECURITY_LABEL='xxx'
  • 一些错误修复

PostgreSQL v8.4beta2 (2009-05-20)

变更日志
  • 将基础版本升级到 v8.4beta2