本文将指导你开始使用 SQL Server 作为基于 Red Hat Enterprise Linux(RHEL)的 Security-Enhanced Linux(SELinux)分发版上的 限制服务。
什么是 Security-Enhanced Linux?
Security-Enhanced Linux(SELinux)是 Linux 系统的安全体系结构。 它有助于为系统上的应用程序、进程和文件定义访问控制。 SELinux 使用一组规则(或 安全策略)来定义可以访问或无法访问的内容。 SELinux 为管理员可以更好地控制谁可以访问系统。 有关详细信息,请参阅 什么是 SELinux(Security-Enhanced Linux)。
有关如何为 Red Hat 系统启用 SELinux 的详细信息,请参阅 SELinux 体系结构。 你也可以免费地开始使用启用了 SELinux 的操作系统。
Linux 上的 SQL Server 2022 已正式获得 RHEL 9(截至 2024 年 7 月)的认证,现已正式在 Red Hat 生态系统目录上正式发布。
SQL Server 和 SELinux
使用 SELinux 的受限服务意味着它受到 SELinux 策略中明确定义的安全规则的限制。 对于 SQL Server,SELinux 自定义策略在 mssql-server-selinux 包中定义。
先决条件
SELinux 应启用并处于
enforcing模式下。 可以通过运行命令sestatus来检查 SELinux 状态。sestatus下面是预期的输出。
SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Memory protection checking: actual (secure) Max kernel policy version: 33安装定义所需自定义策略的
mssql-server-selinux包。
注意
如果未满足任何先决条件,SQL Server 将作为 不受限制的服务运行。
将 SQL Server 安装为受限服务
默认情况下,mssql-server 包安装 SQL Server 时不包含 SELinux 策略,SQL Server 作为无约束的服务运行。
mssql-server 包安装会自动启用 selinux_execmode 布尔值。 可以使用以下命令验证 SQL Server 是否正在未受限制地运行:
ps -eZ | grep sqlservr
下面是预期的输出。
system_u:system_r:unconfined_service_t:s0 48265 ? 00:00:02 sqlservr
安装 mssql-server-selinux 包后,它将启用限制 sqlservr 进程的自定义 SELinux 策略。 安装此策略时,将重置 selinuxuser_execmod 布尔值,并替换为名为 mssql的策略,该策略将 sqlservr 进程限制在新 mssql_server_t 域中。
ps -eZ | grep sqlservr
下面是预期的输出。
system_u:system_r:mssql_server_t:s0 48941 ? 00:00:02 sqlservr
SQL Server 和 SELinux 类型
当可选的 SELinux 策略随 mssql-server-selinux 包一起安装时,将定义一些新类型:
| SELinux 策略 | 描述 |
|---|---|
mssql_opt_t |
将 mssql-server 的文件安装到 /opt/mssql |
mssql_server_exec_t |
/opt/mssql/bin/ 中的可执行文件 |
mssql_paldumper_exec_t |
需要特殊权限来管理核心转储的可执行文件和脚本 |
mssql_conf_exec_t |
/opt/mssql/bin/mssql-conf 中的管理工具 |
mssql_var_t |
/var/opt/mssql 中的文件的标签 |
mssql_db_t |
/var/opt/mssql/data 中的数据库文件的标签 |
例子
以下示例演示如何在 SQL Server 作为受限服务运行时更改数据库位置。
创建所需的目录并将其标记为
mssql_db_t。sudo mkdir -p /opt/mydb/ sudo chown mssql:mssql /opt/mydb sudo semanage fcontext -a -t mssql_db_t "/opt/mydb(/.*)?" sudo restorecon -R -v /opt/mydb命令
semanage fcontext管理 SELinux 文件上下文映射。-a参数会添加新的文件上下文规则,-t参数定义要应用的 SELinux 类型,在本例中为 SQL Server 数据库文件mssql_db_t。 最后,指定路径模式,此示例中/opt/mydb路径模式,以及其中的所有文件和子目录。使用 mssql-conf设置默认数据库位置,并运行安装程序。
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data sudo systemctl restart mssql-server使用 Transact-SQL 创建新数据库进行验证:
CREATE DATABASE TestDatabase; GO验证是否已使用相应的标签创建新数据库。
sudo ls -lZ /opt/mydb/data/下面是预期的输出。
total 16384 -rw-rw----. 1 mssql mssql system_u:object_r:mssql_db_t:s0 8388608 Aug 2 14:27 TestDatabase_log.ldf -rw-rw----. 1 mssql mssql system_u:object_r:mssql_db_t:s0 8388608 Aug 2 14:27 TestDatabase.mdf在前面的示例中,你可以看到该文件具有与创建的新文件关联的
mssql_db_t(类型)。
相关内容
- Linux 上 SQL Server 的安全限制
- Linux 上 SQL Server 的安全功能演练
- 快速入门:在 Red Hat 上安装 SQL Server 并创建数据库