Extending Failover Manager permissions¶
</ div>
Failover Managerのインストール中に、インストーラはefm名前付けのユーザを作成します。 efmには、通常データベース所有者またはオペレーティングシステムのスーパーユーザに制限されている管理機能を実行するための十分な権限がありません。
データベーススーパーユーザ権限を必要とする管理機能を実行すると、efmは
efm_db_functionsスクリプトを呼び出します。オペレーティングシステムのスーパーユーザ権限を必要とする管理機能を実行する場合、efmは
efm_root_functionsスクリプトを呼び出します。仮想IPアドレスの割り当てまたは解放時に、efmは
efm_addressスクリプトを呼び出します。Pgpool統合を有効にすると、efmは
efm_pgpool_functionsスクリプトを呼び出します。
efm_db_functionsまたはefm_root_functionsスクリプトは、efmユーザに代わって管理機能を実行します。
sudoersファイルには、ユーザefmがpostgresまたはenterprisedbが所有するクラスターのFailover
Managerサービスを制御できるエントリが含まれています。
sudoersファイルのコピーを変更して、他のユーザーが所有するPostgresクラスターを管理するパーミッションをefmに付与できます。
efm-42ファイルは/etc/sudoers.dにあり、次のエントリが含まれています。
# Copyright EnterpriseDB Corporation, 2014-2021. All Rights Reserved.
#
# Do not edit this file. Changes to the file may be overwritten
# during an upgrade.
#
# This file assumes you are running your efm cluster as user 'efm'. If not,
# then you will need to copy this file.
# Allow user 'efm' to sudo efm_db_functions as either 'postgres' or 'enterprisedb'.
# If you run your db service under a non-default account, you will need to copy
# this file to grant the proper permissions and specify the account in your efm
# cluster properties file by changing the 'db.service.owner' property.
efm ALL=(postgres) NOPASSWD: /usr/edb/efm-4.4/bin/efm_db_functions
efm ALL=(enterprisedb) NOPASSWD: /usr/edb/efm-4.4/bin/efm_db_functions
# Allow user 'efm' to sudo efm_root_functions as 'root' to write/delete the PID file,
# validate the db.service.owner property, etc.
efm ALL=(ALL) NOPASSWD: /usr/edb/efm-4.4/bin/efm_root_functions
# Allow user 'efm' to sudo efm_address as root for VIP tasks.
efm ALL=(ALL) NOPASSWD: /usr/edb/efm-4.4/bin/efm_address
# Allow user 'efm' to sudo efm_pgpool_functions as root for pgpool tasks.
efm ALL=(ALL) NOPASSWD: /usr/edb/efm-4.4/bin/efm_pgpool_functions
# relax tty requirement for user 'efm'
Defaults:efm !requiretty
フェールオーバーマネージャーを使用してpostgresまたはenterprisedb以外のユーザーが所有するクラスターをモニタしている場合は、efm-42ファイルのコピーをmakeし、ユーザがefm_functionsスクリプトにアクセスしてクラスターを管理できるようにコンテンツを変更します。
パーミッションの問題のmakeにエージェントをスタートできない場合は、デフォルトの/etc/sudoersファイルのファイルの最後に次の行が含まれていることを確認してください。
## Read drop-in files from /etc/sudoers.d (the # here does not # mean a comment)
# includedir /etc/sudoers.d
</ div>
sudoなしでフェールオーバーマネージャーを実行する¶
デフォルトでは、Failover Managerはsudoを使用してシステム機能へのアクセスを安全に管理します。 sudoアクセスなしで実行するようにフェールオーバーマネージャーを構成することを選択した場合、ルートアクセスは引き続き必要です。
Failover Manager RPMをインストールします。
フェールオーバーマネージャーのセットアップタスクを実行します。
sudoなしでFailover Managerを実行するには、Failover Managerに代わって管理機能を実行する権限を持つデータベースプロセス所有者を選択する必要があります。ユーザは、デフォルトデータベーススーパーユーザ(enterprisedbやpostgres例)または別の特権ユーザになります。ユーザを選択した後:
1.次のコマンドを使用して、ユーザをefmグループに追加します。
* usermod -a -G efm enterprisedb
このコマンドにより、ユーザは
/var/run/efm-4.<x>および/var/lock/efm-4.<x>に書き込むことができます。
2.クラスター名前を再利用する場合は、以前に作成したログファイルを削除します。新しいユーザは、デフォルトまたは他の所有者が作成したログファイルに書き込むことができません。
3.クラスタープロパティテンプレートファイルとノードテンプレートファイルをコピーします。
* su - enterprisedb
* cp /etc/edb/efm-4.4/efm.properties.in <directory/cluster_name>.properties
* cp /etc/edb/efm-4.4/efm.nodes.in <directory>/<cluster_name>.nodes
次に、クラスタープロパティファイルを変更し、db.service.ownerプロパティでユーザの名前を指定します。また、db.service.nameプロパティが空白であるmakeも確認してください。
sudoがないと、ルートアクセスなしでサービスを実行できません。
構成を変更した後、新しいユーザは次のコマンドでフェールオーバーマネージャーを制御できます。
/usr/edb/efm-4.4/bin/runefm.sh start|stop <directory/cluster_name>.properties
ここで、<directory/cluster_name.properties>はクラスタープロパティファイルのフルパスを指定します。デフォルト以外のユーザがエージェントを制御しているとき、またはefmスクリプトを使用しているときはいつでも、ユーザはプロパティファイルへのフルパスを提供します。
新しいユーザがFailover Managerをサービスとして管理できるようにするには、カスタムスクリプトまたはユニットファイルを提供します。
Failover
Managerは、/usr/edb/efm-4.<x>/bin/secure/にあるmanage-vip名前付けのバイナリを使用して、
sudo権限なしでVIP管理操作を実行します。このスクリプトは、setuidを使用して、仮想IPアドレスの管理に必要な特権を取得します。
このディレクトリには、 ルートとefmグループのユーザーのみがアクセスできます。
バイナリは、 ルートおよびefmグループによってのみ実行可能です。
セキュリティ上の理由から、/usr/edb/efm-4.<x>/bin/secure/ディレクトリまたはmanage-vipスクリプトのアクセス権限を変更しないことをお勧めします。
sudoなしでFailover Managerを使用する方法の詳細については、次を参照してください。
https://www.enterprisedb.com/blog/running-edb-postgres-failover-manager-without-sudo