D rootアクセスなしでのクラスタレポートの実行 #
すべてのクラスタノードはSSHによって互いにアクセスできる必要があります。crm report (トラブルシューティング用)などのツールおよびHawk2のは、ノード間でパスワード不要のSSHアクセスを必要とします。それがない場合、現在のノードからしかデータを収集できません。
パスワード不要のSSH rootアクセスが規定要件を順守しない場合は、次善策を使用してクラスタレポートを実行できます。これは次の基本手順で構成されます。
専用のローカルユーザアカウント(
crm report実行用)を作成する。できれば標準以外のSSHポートを使用して、そのユーザアカウントにパスワード不要のSSHアクセスを設定する。
そのユーザに
sudoを設定する。そのユーザとして
crm reportを実行する。
デフォルトでは、crm reportを実行すると、まずrootとしてリモートノードへのログインを試行し、続いてユーザhaclusterとしてログインを試行します。ただし、ローカルセキュリティポリシーによってSSHを使用したrootログインが禁止されている場合、スクリプトの実行はすべてのリモートノードで失敗します。ユーザhaclusterとしてスクリプトを実行しようとしても失敗します。これはサービスアカウントであり、そのシェルはログインが禁止されている/bin/falseに設定されているためです。High Availabilityクラスタのすべてのノードでcrm reportスクリプトを正常に実行する唯一のオプションは、専用のローカルユーザを作成することだけです。
D1 ローカルユーザアカウントの作成 #
次の例では、コマンドラインからhareportという名前のローカルユーザを作成します。パスワードは、セキュリティ要件を満たしていれば何でも構いません。または、YaSTでユーザアカウントを作成してパスワードを設定することもできます。
シェルを起動し、ホームディレクトリ
/home/hareportを持つユーザhareportを作成します。root #useradd-m -d /home/hareport -c "HA Report" hareportユーザのパスワードを設定します。
root #passwd hareportプロンプトが表示されたら、ユーザのパスワードを入力し、確認のために再度入力します。
すべてのノードで同じユーザアカウントを作成するため、各ノードで上の手順を繰り返してください。
D2 パスワード不要のSSHアカウントの設定 #
デフォルトでは、SSHデーモンおよびSSHクライアントはポート22で通信およびリスンします。ネットワークセキュリティガイドラインによって、デフォルトのSSHポートを大きい番号の別のポートに変更することが要求されている場合は、デーモンの設定ファイル/etc/ssh/sshd_configを変更する必要があります。
デフォルトポートを変更するには、ファイルで
Port行を検索してコメント解除し、目的に応じて編集します。たとえば、次のように設定します。Port 5022
組織において
rootユーザが他のサーバにアクセスすることが許可されていない場合、このファイルでPermitRootLoginエントリを検索してコメント解除し、noに設定します。PermitRootLogin no
または、次のコマンドを実行して、各行をファイルの末尾に追加します。
root #echo “PermitRootLogin no” >> /etc/ssh/sshd_configroot #echo “Port 5022” >> /etc/ssh/sshd_config/etc/ssh/sshd_configを変更したら、SSHデーモンを再起動して新しい設定を有効にします。root #systemctl restart sshd
各クラスタノードで、このSSHデーモンの設定を繰り返してください。
クラスタ内のすべてのノードでSSHポートを変更する場合、SSH設定ファイル/etc/ssh/sshd_configを変更するのが便利です。
デフォルトポートを変更するには、ファイルで
Port行を検索してコメント解除し、目的に応じて編集します。たとえば、次のように設定します。Port 5022
または、次のコマンドを実行して、各行をファイルの末尾に追加します。
root #echo “Port 5022” >> /etc/ssh/ssh_config
このSSHクライアントの設定は、クラスタレポートを実行するノードでのみ必要です。
または、-Xオプションを使用してカスタムSSHポートでcrm reportを実行することも、crm reportがデフォルトでカスタムSSHポートを使用するように設定することもできます。詳細については、手順D5「カスタムSSHポートを使用したクラスタレポートの生成」を参照してください。
パスワードを要求されずに、SSHを使用して他のサーバにアクセスできます。これは一見、安全ではないように見えますが、ユーザは自身の公開鍵が共有されているサーバにしかアクセスできないため、実際は非常に安全なアクセス方法です。共有鍵は、その鍵を使用するユーザとして作成する必要があります。
クラスタレポートの実行用に作成したユーザアカウントでノードの1つにログインします(上の例では、このユーザアカウントは
hareportです)。新しい鍵を生成します。
hareport >ssh-keygen –t rsaこのコマンドは、デフォルトで2,048ビットの鍵を生成します。鍵のデフォルトの場所は
~/.ssh/です。鍵にパスフレーズを設定するよう求められます。ただし、パスワードなしでログインする場合は、鍵にパスフレーズがあってはならないため、パスフレーズを入力しないでください。鍵が生成されたら、公開鍵を他の「それぞれの」ノードにコピーします(鍵を作成したノードを「含む」)。
hareport >ssh-copy-id -i ~/.ssh/id_rsa.pub HOSTNAME_OR_IPこのコマンドでは、各サーバのDNS名、エイリアス、またはIPアドレスを使用できます。コピー中に、各ノードのホスト鍵を受諾するよう求められるので、
hareportユーザアカウントのパスワードを入力する必要があります(パスワードを入力する必要があるのは、ここだけです)。鍵をすべてのクラスタノードと共有したら、パスワード不要のSSHを使用して、ユーザ
hareportとして他のノードにログインできるかどうかをテストします。hareport >ssh HOSTNAME_OR_IP証明書の受諾やパスワードの入力を要求されることなく、自動的にリモートサーバに接続されます。
毎回同じノードからクラスタレポートを実行する場合は、上の手順は、このノードでのみ実行すれば十分です。そうでない場合は、各ノードでこの手順を繰り返します。
D3 sudoの設定 #
sudoコマンドは、通常のユーザを素早くrootにしてコマンドを発行できるようにします。パスワードの入力は、必要な場合と不要な場合があります。すべてのルートレベルのコマンドにsudoアクセスを付与することも、特定のコマンドにのみ付与することもできます。一般的には、sudoはエイリアスを使用してコマンド文字列全体を定義します。
sudoを設定するには、visudo (viでは「ありません」)またはYaSTを使用します。
コマンドラインからsudoを設定するには、visudoを使用して、rootとしてsudoersファイルを編集する必要があります。他のエディタを使用すると、構文エラーやファイルパーミッションエラーが発生し、sudoを実行できないことがあります。
rootとしてログインします。/etc/sudoersファイルを開くため、「visudo」と入力します。カテゴリ
Host alias specification、User alias specification、Cmnd alias specification、およびRunas alias specificationを探します。次のエントリを
/etc/sudoers内のそれぞれのカテゴリに追加します。Host_Alias CLUSTER = alice,bob,charlie 1 User_Alias HA = hareport 2 Cmnd_Alias HA_ALLOWED = /bin/su, /usr/sbin/crm report *3 Runas_Alias R = root 4
ホストエイリアスは、sudoユーザがコマンド発行権利を持つサーバ(またはサーバの範囲)を定義します。ホストエイリアスでは、DNS名またはIPアドレスを使用するか、ネットワーク範囲全体を指定できます(例:
172.17.12.0/24)。アクセスの範囲を制限するには、クラスタノードのホスト名のみを指定する必要があります。ユーザエイリアスでは、複数のローカルユーザアカウントを1つのエイリアスに追加できます。ただし、この場合、使用するアカウントは1つだけであるため、エイリアスの作成を避けることができます。上の例では、クラスタレポート実行用に作成した
hareportユーザを追加しています。コマンドエイリアスは、ユーザが実行できるコマンドを定義します。これは、非ルートユーザが
sudoを使用する際にアクセスできるコマンドを制限する場合に便利です。この場合、hareportユーザアカウントには、コマンドcrm reportおよびsuに対するアクセスが必要です。runasエイリアスは、コマンドの実行に使用するアカウントを指定します。この例では、次のようになりますroot.次の2行を検索します。
Defaults targetpw ALL ALL=(ALL) ALL
これらは、作成したい設定と衝突するため、無効にします。
#Defaults targetpw #ALL ALL=(ALL) ALL
User privilege specificationを探します。上のエイリアスを定義したら、そこに次のルールを追加できます。
HA CLUSTER = (R) NOPASSWD:HA_ALLOWED
NOPASSWORDオプションは、ユーザhareportがパスワードを入力せずにクラスタレポートを実行できるようにします。
クラスタ内のすべてのノードでこのsudo設定を行う必要があります。sudoに他の変更は必要なく、再起動が必要なサービスもありません。
D4 クラスタレポートの生成 #
上で行った設定でクラスタレポートを実行するには、ノードの1つにユーザhareportとしてログインする必要があります。クラスタレポートを起動するには、crm reportコマンドを使用します。例:
root #crm report-f 0:00 -n "alice bob charlie"
このコマンドは、指定したノード上の午前0時以降の情報をすべて抽出し、現在のディレクトリにpcmk-DATE.tar.bz2という名前の*.tar.bz2アーカイブを作成します。
カスタムSSHポートを使用する場合、
crm reportで-Xを使用して、クライアントのSSHポートを変更します。たとえば、カスタムSSHポートが5022の場合、次のコマンドを使用します。root #crm report -X "-p 5022" [...]crm reportのカスタムSSHポートを永続的に設定するには、crm対話型シェルを開始します。crm options
次のように入力します。
crm(live)options#set core.report_tool_options "-X -oPort=5022"