この記事では、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 パッケージで定義されます。
[前提条件]
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-serverTransact-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(型) がファイルに含まれていることがわかります。