sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLおよびTimescaleDB用にSELinuxを構成する方法

    データは企業にとって最も重要な資産であるため、データベースでセキュリティに関するすべての考慮事項を考慮して、データを可能な限り安全に保つ必要があります。 RedHatベースのオペレーティングシステムの重要なセキュリティ機能の1つは、SELinuxです。このブログでは、この機能とは何か、PostgreSQLおよびTimescaleDBデータベース用に構成する方法について説明します。

    SELinuxとは何ですか?

    Security-Enhanced Linux(SELinux)は、管理者がシステムにアクセスできるユーザーをより詳細に制御できるLinuxシステムのセキュリティアーキテクチャです。これは、セキュリティポリシーを使用して、システム上のアプリケーション、プロセス、およびファイルのアクセス制御を定義します。セキュリティポリシーは、SELinuxにアクセスできるものを指示する一連のルールです。

    サブジェクトと呼ばれるアプリケーションまたはプロセスがファイルなどのオブジェクトへのアクセスを要求すると、SELinuxはアクセスベクターキャッシュ(AVC)をチェックします。ここで、サブジェクトとオブジェクトのアクセス許可がキャッシュされます。 。 SELinuxがキャッシュされたパーミッションに基づいてアクセスを決定できない場合、SELinuxはリクエストをセキュリティサーバーに送信します。セキュリティサーバーは、アプリまたはプロセスのセキュリティコンテキストとファイルをチェックします。セキュリティコンテキストはSELinuxポリシーデータベースから適用され、アクセス許可が付与または拒否されます。

    設定にはさまざまな方法があります。 / etc / selinux / configにあるメインのSELinux構成ファイルを見て、現在どのように構成されているかを確認できます。

    $ cat /etc/selinux/config
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of these three values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes are protected.
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted

    このファイルには2つのディレクティブがあります。 SELINUXディレクティブは、SELinuxモードを指定し、Enforcing、Permissive、Disabledの3つの可能な値を持つことができます。

    • 強制(デフォルト):システムでSELinuxセキュリティポリシーを有効にして強制し、不正アクセスの試行を拒否しますユーザーとプロセスによる。

    • 許容:これを使用すると、SELinuxが有効になりますが、セキュリティポリシーは適用されません。すべてのポリシー違反は監査ログに記録されます。実施する前にSELinuxをテストするのに良い方法です。

    • 無効:SELinuxがオフになっています。

    SELINUXTYPEディレクティブは、使用するポリシーを指定します。デフォルト値が対象であり、このポリシーにより、SELinuxではアクセス制御権限をカスタマイズおよび微調整できます。

    Enforcingモードがデフォルトのモードである場合でも、SELinuxを無効にすることは、それに対処するよりも簡単であるため、一般的な方法になっています。もちろん、これはお勧めできません。少なくとも許容モードで構成し、ログを定期的にチェックして異常な動作を探す必要があります。

    SELinuxを設定する方法

    SELinuxがご使用の環境で無効になっている場合は、/ etc / selinux / config構成ファイルを編集し、SELINUX=permissiveまたはSELINUX=enforcingを設定することで有効にできます。

    SELinuxを使用したことがない場合、SELinuxを構成する最良の方法は、最初にPermissiveモードを使用し、メッセージログファイルで拒否されたメッセージを探してログをチェックし、必要に応じて修正することです。

    $ grep "SELinux" /var/log/messages

    すべてが確認され、安全に続行できるようになったら、次のコマンドを使用して、前の方法を使用するか、再起動せずに強制するようにSELinuxを構成できます。

    $ setenforce 1

    ロールバックする必要がある場合は、次を実行します:

    $ setenforce 0

    このコマンドを使用して、強制モードと許容モードをオンザフライで切り替えることができますが、システムを再起動しても、これらの変更は持続しません。値を永続化するには、構成ファイルで値を構成する必要があります。

    getenforceコマンドを使用して現在のSELinuxステータスを確認できます:

    $ getenforce
    Enforcing

    または、より詳細な情報については、代わりにsestatusを使用できます:

    $ 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

    PostgreSQLおよびTimescaleDB用にSELinuxを構成する方法

    デフォルトの構成とデフォルトのデータディレクトリを使用してPostgreSQL/TimescaleDBをインストールし、SELinuxもデフォルトで構成されている場合、おそらく問題は発生しませんが、問題はたとえば、データベースを保存する特定の場所を使用するので、SELinuxを構成してデータベースを機能させる方法を見てみましょう。この例では、CentOS8にPostgreSQL13をインストールし、データディレクトリとして/ pgsql /data/を使用します。

    まず、postgresqlモジュールを有効にします。

    $ dnf module enable postgresql:13
    対応するPostgreSQL13パッケージをインストールします:

    $ dnf -y install postgresql-server postgresql-contrib postgresql-libs

    サービスを有効にする:

    $ systemctl enable postgresql.service

    PostgreSQLデータベースを初期化します:

    $ postgresql-setup --initdb

    これで、データディレクトリなど、何も変更せずにサービスを開始すると、正常に開始されます。それ以外の場合は、次のようなエラーが表示されます。

    Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal postmaster[29116]: postmaster: could not access the server configuration file "/pgsql/data/postgresql.conf": Permission denied
    
    Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal systemd[1]: postgresql.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
    
    Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal systemd[1]: postgresql.service: Failed with result 'exit-code'.

    では、修正方法を見てみましょう。まず、PostgreSQL構成ファイルとサービスのデータディレクトリを変更します。このためには、PostgreSQLサービスファイルを編集し、PGDATAの場所を変更します。

    $ vi /etc/systemd/system/multi-user.target.wants/postgresql.service
    Environment=PGDATA=/pgsql/data

    PostgreSQL bashプロファイルファイルを編集し、PGDATAの場所を変更します:

    $ vi /var/lib/pgsql/.bash_profile
    PGDATA=/pgsql/data
    変更を読む:

    $ systemctl daemon-reload
    新しいPostgreSQLデータベースを初期化します:

    $ postgresql-setup --initdb
     * Initializing database in '/pgsql/data'
     * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

    以前に構成ファイルで行ったように、新しいデータディレクトリの場所を指定する必要はありません。ここで、開始する前に、SELinuxラベルを変更する必要があります:

    $ chcon -Rt postgresql_db_t /pgsql/data

    このコマンドは、SELinuxセキュリティコンテキストを変更します。フラグは次のとおりです。

    • -R、--recursive:ファイルとディレクトリを再帰的に操作します

    • -t、-type =TYPE:ターゲットセキュリティコンテキストでタイプTYPEを設定します

    次に、PostgreSQLサービスを開始します:

    $ systemctl start postgresql.service

    データベースは現在実行中です:

    $ ps aux |grep postgres |head -1
    postgres   28566  0.0  3.0 497152 25312 ?        Ss   21:16   0:00 /usr/bin/postmaster -D /pgsql/data

    これは、PostgreSQL/TimescaleDB用にSELinuxを構成する方法の基本的な例にすぎません。さまざまな制限やツールを使用してこれを行うには、さまざまな方法があります。最適なSELinuxの実装または構成は、ビジネス要件によって異なります。

    ClusterControlおよびSELinuxでPostgreSQLおよびTimescaleDBを使用する方法

    ClusterControlは、SELinuxのようなLinuxカーネルセキュリティモジュールを管理しません。 ClusterControlを使用してPostgreSQLまたはTimescaleDBクラスターをデプロイする場合、エラーのリスクを減らすために、デプロイプロセス中にClusterControlでSELinuxを無効にするかどうかを指定できます。

    無効にしたくない場合は、Permissiveを使用できますサーバーのログをモード化して監視し、SELinux構成が正しいことを確認します。その後、上記の手順に従って強制に変更できます。

    SELinux構成の詳細については、RedHatまたはCentOSの公式サイトを参照してください。


    1. SQL Serverの左パディング– 3 LPAD()相当

    2. RETURNING from INSERT ...ONCONFLICTに除外された行を含める方法

    3. Windows10ProfessionalへのOracle12cStandardEditionのインストール

    4. System.Data.OracleClientには、Oracleクライアントソフトウェアバージョン8.1.7以降が必要です。