共用方式為


開始使用 SELinux 上的 SQL Server

本文會引導您開始使用 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 套件中。

先決條件

  1. 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
    
  2. 安裝定義必要自定義原則的 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 以限制服務的形式執行時,變更資料庫位置。

  1. 建立所需的目錄,並將其標示為 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,以及其中的所有檔案和子目錄。

  2. 使用 mssql-conf設定預設資料庫位置,然後執行安裝程式。

    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data
    sudo systemctl restart mssql-server
    
  3. 使用 Transact-SQL 建立新的資料庫來驗證:

    CREATE DATABASE TestDatabase;
    GO
    
  4. 確認已使用適當的標籤建立新的資料庫。

    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(類型),這是與新建立的檔案相關聯的標記。