検索

21.4. 設定の例

download PDF

21.4.1. PostgreSQL データベースの場所の変更

Red Hat Enterprise Linux を使用する場合、PostgreSQL がデータベースを保存するデフォルトの場所は /var/lib/pgsql/data/ です。ここでは、SELinux がデフォルトであると想定している場所であるため、postgresql_db_t タイプを使用して、この領域はすでに適切にラベル付けされています。
データベースの場所は、個々の環境の要件や設定により変更できますが、SELinux は、この新しい場所を認識しており、それに応じてラベルが付けられていることが重要です。この例では、PostgreSQL データベースの場所を変更し、その内容に基づいて SELinux の保護メカニズムを新しい領域に引き続き提供できるように、新しい場所にラベルを付ける方法を説明します。
これは単なる例で、SELinux が PostgreSQL に与える影響を示していることに注意してください。PostgreSQL の包括的なドキュメントは、このドキュメントの範囲外です。詳細は、公式の PostgreSQL のドキュメント を参照してください。この例では、postgresql-server パッケージがインストールされていることを前提としています。
  1. postgresql のデフォルトのデータベースの場所の SELinux コンテキストを表示します。
    ~]# ls -lZ /var/lib/pgsql
    drwx------. postgres postgres system_u:object_r:postgresql_db_t:s0 data
    
    これは、データベースファイルの場所のデフォルトのコンテキスト要素であるpostgresql_db_t を示しています。このコンテキストを適切に機能させるために、この例で使用される新しいデータベースの場所に、手動で適用する必要があります。
  2. データベースの新しい場所に、新しいディレクトリーを作成します。この例では、/opt/postgresql/data/ が使用されています。別の場所を使用する場合は、以下の手順のテキストを、使用している場所に置き換えます。
    ~]# mkdir -p /opt/postgresql/data
  3. 新しい場所のディレクトリーの一覧表示を実行します。新規ディレクトリーの最初のコンテキストはusr_t であることに注意してください。このコンテキストは、SELinux が PostgreSQL にその保護メカニズムを提供するためには不十分です。コンテキストを変更すると、新しいエリアで適切に機能できるようになります。
    ~]# ls -lZ /opt/postgresql/
    drwxr-xr-x. root root unconfined_u:object_r:usr_t:s0   data
    
  4. postgres ユーザーおよびグループによるアクセスを許可するために、新しい場所の所有権を変更します。これにより、SELinux が引き続き監視する従来の Unix パーミッションが設定されます。
    ~]# chown -R postgres:postgres /opt/postgresql
  5. テキストエディターで /etc/systemd/system/postgresql.service ファイルを開き、PGDATA 変数および PGLOG 変数を変更して、新しい場所を指定します。
    ~]# vi /etc/systemd/system/postgresql.service
    PGDATA=/opt/postgresql/data
    PGLOG=/opt/postgresql/data/pgstartup.log
    
    このファイルを保存し、テキストエディターを終了します。
    /etc/systemd/system/postgresql.service ファイルが存在しない場合は作成し、次の内容を挿入します。
    .include /lib/systemd/system/postgresql.service
    [Service]
    
    # Location of database directory
    Environment=PGDATA=/opt/postgresql/data
    Environment=PGLOG=/opt/postgresql/data/pgstartup.log
  6. 新しい場所でデータベースを初期化します。
    ~]$ su - postgres -c "initdb -D /opt/postgresql/data"
  7. データベースの場所を変更すると、この時点でサービスの起動に失敗します。
    ~]# systemctl start postgresql.service
    Job for postgresql.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.
    
    SELinux によりサービスが起動しなくなりました。これは、新しい場所に適切なラベルが付けられていないためです。以下の手順では、新しい場所 (/opt/postgresql/) にラベルを付け、postgresql サービスを適切に起動する方法を説明します。
  8. semanage ユーティリティーを使用して、/opt/postgresql/ およびその中のその他のディレクトリーやファイルに対するコンテキストマッピングを追加します。
    ~]# semanage fcontext -a -t postgresql_db_t "/opt/postgresql(/.*)?"
  9. このマッピングは、/etc/selinux/targeted/contexts/files/file_contexts.local ファイルに書き込まれます。
    ~]# grep -i postgresql /etc/selinux/targeted/contexts/files/file_contexts.local
    
    /opt/postgresql(/.*)?    system_u:object_r:postgresql_db_t:s0
    
  10. これで restorecon ユーティリティーを使用して、このコンテキストマッピングを実行中のシステムに適用します。
    ~]# restorecon -R -v /opt/postgresql
  11. /opt/postgresql/ の場所に、PostgreSQL の正しいコンテキストのラベルが付けられるようになり、postgresql サービスが正常に起動します。
    ~]# systemctl start postgresql.service
  12. /opt/postgresql/ のコンテキストが正しいことを確認します。
    ~]$ ls -lZ /opt
    drwxr-xr-x. root root system_u:object_r:postgresql_db_t:s0 postgresql
    
  13. postgresql 処理で新しい場所が表示されることを、ps コマンドで確認します。
    ~]# ps aux | grep -i postmaster
    
    postgres 21564  0.3  0.3  42308  4032 ?        S    10:13   0:00 /usr/bin/postmaster -p 5432 -D /opt/postgresql/data/
  14. 場所が変更され、ラベルが付けられ、postgresql が正常に起動しました。この時点で、実行中のすべてのサービスをテストして、通常の操作を確認してください。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.