次の方法で共有


SELinux で SQL Server を始める

この記事では、Red Hat Enterprise Linux (RHEL) に基づく Security-Enhanced Linux (SELinux) ディストリビューションでの 限定されたサービス としての SQL Server の概要について説明します。

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 (型) がファイルに含まれていることがわかります。