Menu Close
Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
21.4. 設定の例
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 パッケージがインストールされていることを前提としています。
postgresql
のデフォルトのデータベースの場所の SELinux コンテキストを表示します。~]# ls -lZ /var/lib/pgsql drwx------. 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 ユーザーおよびグループがアクセスできるようにします。これにより、SELinux が引き続き監視する従来の Unix パーミッションが設定されます。
~]# chown -R postgres:postgres /opt/postgresql
- テキストエディターで
/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
- 新しい場所でデータベースを初期化します。
~]$ su - postgres -c "initdb -D /opt/postgresql/data"
- データベースの場所を変更すると、この時点でサービスの起動に失敗します。
~]# systemctl start postgresql.service Job 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 /opt drwxr-xr-x. root root system_u:object_r:postgresql_db_t:s0 postgresql
- ps コマンドで、postgresql
プロセスに
新しい場所が表示されることを確認します。~]# 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/
- 場所が変更され、ラベル付けされ、postgresql
が正常に
開始しました。この時点では、通常の操作を確認するには、実行中のサービスをすべてテストする必要があります。