本文會引導您開始使用 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 套件會安裝不含 SELinux 政策的 SQL Server,而 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 並建立資料庫