Show Table of Contents
21.4. 設定例
21.4.1. PostgreSQL のデータベース格納場所を変更する
Red Hat Enterprise Linux を使用する場合、PostgreSQL のデフォルトのデータベース格納場所は
/var/lib/pgsql/data/ になります。SELinux はこの場所にこのデータベースがデフォルトで配置されることを予期しているので、この領域にはすでに postgresql_db_t タイプを使った適切なラベル付けが行われています。
データベースを格納する場所は、個別の環境要件や設定に応じて変更することもできますが、適切にラベル付けを行い、SELinux が変更後の新しい場所を認識することが重要となります。以下の例では、PostgreSQL データベースの格納場所を変更する方法、また この新しい格納場所にラベルをつけて SELinux がコンテンツに基づいて保護メカニズムを適用できるようにする方法を説明します。
以下に示す例は、PostgreSQL に対してどのように SELinux が影響を与えることができるのかを示す一例に過ぎません。PostgreSQL に関する総合的な説明は本ガイドの対象外となります。詳細については、公式の PostgreSQL ドキュメント を参照してください。ここでは、postgresql-server パッケージがインストールされていることを前提としています。
postgresqlのデフォルトのデータベース格納場所の SELinux コンテキストを表示します。~]#
ls -lZ /var/lib/pgsqldrwx------. postgres postgres system_u:object_r:postgresql_db_t:s0 dataデータベースファイルの格納場所にデフォルトで付けられるコンテキスト要素であるpostgresql_db_tが表示されています。この例で使用する新しいデータベース格納場所が期待通り正常に動作するよう、このコンテキストをその新しい場所に手作業で適用する必要があります。- データベース格納場所となるディレクトリーを新規作成します。この例では
/opt/postgresql/data/を使用します。別の場所を使用する場合は、以下のコマンドでその場所に置き換えます。~]#
mkdir -p /opt/postgresql/data - 新規作成したディレクトリーを表示します。このディレクトリーの初期コンテキストは
usr_tになっている点に注意してください。このコンテキストは、SELinux が PostgreSQL に保護メカニズムを提供するには不十分です。コンテキストを変更すると、新規作成のディレクトリーが新しい領域で適切に動作することができるようになります。~]#
ls -lZ /opt/postgresql/drwxr-xr-x. root root unconfined_u:object_r:usr_t:s0 data - postgres ユーザーおよび postgres グループによるアクセスを許可するため所有権を変更します。これは従来の Unix パーミッションを設定するのもので、SELinux はこれを順守します。
~]#
chown -R postgres:postgres /opt/postgresql - テキストエディターで PostgreSQL の初期設定ファイル
/etc/rc.d/init.d/postgresqlを開き、新しい場所をポイントするようPGDATAとPGLOG変数を変更します。~]#
vi /etc/rc.d/init.d/postgresqlPGDATA=/opt/postgresql/data PGLOG=/opt/postgresql/data/pgstartup.logファイルを保存して、テキストエディターを終了します。 - 新しい場所にあるデータベースを初期化します。
~]$
su - postgres -c "initdb -D /opt/postgresql/data" - データベースの場所を変更したことで、この時点ではサービスの起動に失敗します。
~]#
systemctl start postgresql.serviceJob for postgresql.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.サービスが起動しない原因は SELinux にあります。新しい場所に適切なラベル付けが行われていないためです。以下の手順で、新しい場所 (/opt/postgresql/) にラベルを付け、postgresql サービスを正常に起動させます。 semanageユーティリティーを使用して、/opt/postgresql/およびその配下にあるすべてのディレクトリーとファイルに対するコンテキストマッピングを追加します。~]#
semanage fcontext -a -t postgresql_db_t "/opt/postgresql(/.*)?"- このマッピングは
/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 restoreconユーティリティーを使ってこのコンテキストマッピングを稼働中のシステムに適用します。~]#
restorecon -R -v /opt/postgresql- これで
/opt/postgresql/の場所に PostgreSQL 用の正しいコンテキストがラベル付けされたので、postgresqlサービスが正常に起動するようになります。~]#
systemctl start postgresql.service /opt/postgresql/のコンテキストが正しくなっていることを確認します。~]$
ls -lZ /optdrwxr-xr-x. root root system_u:object_r:postgresql_db_t:s0 postgresqlpsコマンドを使って、postgresqlプロセスで新しい場所が表示されるか確認します。~]#
ps aux | grep -i postmasterpostgres 21564 0.3 0.3 42308 4032 ? S 10:13 0:00 /usr/bin/postmaster -p 5432 -D /opt/postgresql/data/- データ格納場所が変更され、ラベル付けが適切に行われたため、
postgresqlが正常に起動するようになりました。この時点で、実行中の全サービスが正常に動作しているかテストしてください。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.