SEPostgreSQLv8.4
什么是 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_connect 和 sepgsql_regression_test_mode 已打开。
- mcstrans 守护进程已停止。
补丁列表
PostgreSQL v8.4.0 (2009-07-01)
- http://sepgsql.googlecode.com/files/sepgsql-00-full-8.4.0-r2096.patch.gz
- SHA1: 393e268906df53120ff5077d8f91ebf6cf32d3e9
- 变更日志
- 将基础版本升级到 v8.4.0
PostgreSQL v8.4rc2 (2009-06-22)
- http://sepgsql.googlecode.com/files/sepgsql-00-full-8.4rc2-r2070.patch.gz
- SHA1: 0d794ee9e092d3a8f216662445b590c01bb30eae
- 变更日志
- 将基础版本升级到 v8.4rc2
PostgreSQL v8.4rc1 (2009-06-19)
- http://sepgsql.googlecode.com/files/sepgsql-00-full-8.4rc1-r2047.patch.gz
- SHA1: e777701dfad57654af8063e6b11c21a205bb365d
- 变更日志
- 将基础版本升级到 v8.4rc1
- 添加对孤儿 pg_security 条目的支持
- 添加 sepostgresql_mcstrans GUC 选项
- 为模式/序列添加 SECURITY_LABEL='xxx'
- 一些错误修复
PostgreSQL v8.4beta2 (2009-05-20)
- http://sepgsql.googlecode.com/files/sepgsql-00-full-8.4beta2-r1911.patch.gz
- SHA1: 270629882007965a742da4ba02d2ced751c07069
- 变更日志
- 将基础版本升级到 v8.4beta2