ウェブサイト検索

FreeIPAサーバーとSudoersを統合する方法


FreeIPAサーバーとSudoersを統合する方法

このページで

  1. 前提条件
  2. FreeIPAユーザーがsudoを完全に実行できるようにします

    1. FreeIPAユーザーと接続を確認する
    2. SSSDサービスでSudo機能を有効にする
    3. Sudoルールの設定
    4. FreeIPAとのSudoers統合を確認する
  3. 特定のコマンドに対してFreeIPAユーザーがSudoを実行できるようにします

    1. FreeIPAユーザーおよびグループの作成
    2. ホストグループの作成
    3. HBAC(ホストベースのアクセス制御)ルールの作成
    4. sudoルールを作成する
    5. Sudoコマンドグループの作成
    6. FreeIPAとのSudoers統合を確認する
  4. 結論

Sudoは、LinuxおよびUnixオペレーティングシステムでルートまたは管理者権限を取得することを可能にするアプリケーションです。SudoはほとんどのLinuxディストリビューションにデフォルトでインストールされており、/etc/sudoersファイルを介してユーザー認証を設定し、特定のコマンドをルートユーザーとして非特権ユーザーが実行できるようにすることができます。

sudoは複数の方法で設定できます。ローカルコンピュータやサーバーにsudoを設定することも、サードパーティのソフトウェアを介して集中管理されたsudoを設定することもできます。この例では、FreeIPAサーバーを使用して集中管理されたsudoの展開を設定します。

FreeIPAは管理者の作業を簡素化する複数のツールを備えており、sudo統合も含まれています。FreeIPAユーザーの完全なsudoアクセスを設定でき、特定のコマンドに対してsudoを設定することができます。これにはHBAC(ホストベースのアクセス制御)ルールやSudoコマンドグループも含まれています。

このチュートリアルでは、SudoersとFreeIPAを2つのシナリオで統合する方法を学びます。また、ユーザー、ユーザーグループ、ホストグループ、Sudoルール、HBACルール、Sudoコマンドグループを管理するための『ipa』コマンドユーティリティの基本的な使い方も学びます。さらに、クライアントマシンでSudoとFreeIPAとSSSDサービスをセットアップし、統合する方法についても説明します。

前提条件

このチュートリアルを完了するには、FreeIPAサーバーがインストールされ、完全に設定されている必要があります。Debian、Ubuntu、および Rocky Linux のチュートリアルはこちらにあります:

  • https://linux-console.net/how-to-add-ubuntu-system-to-freeipa-server/
  • ロッキーLinux 9にFreeIPAをインストールする方法
  • https://linux-console.net/how-to-install-freeipa-server-with-docker-on-debian/

FreeIPAユーザーとFreeIPAクライアントとして設定されたクライアントマシンも必要です。それに加えて、FreeIPAサーバーとクライアントの両方でsudo/root管理者権限を持つ非rootユーザーも必要です。

この例では、次の詳細を持つ2台のRocky Linuxサーバーを使用しています:

Hostname            IP Address      Used as
--------------------------------------------------
ipa.hwdomain.lan    192.168.5.20    FreeIPA Server
client.hwdomain.lan 192.168.5.75    FreeIPA Client

これらの上記要件が整ったら、SudoersのFreeIPAとの統合を開始します。

FreeIPAユーザーがsudoを完全に実行できるようにします

まず、特定のSudoルールを作成することで、SudoersをFreeIPAサーバーと統合する方法を学びます。この例では、既存のFreeIPAユーザー「rocky」がすべてのクライアントマシンで「sudo」コマンドを実行し、管理者権限を取得できるように設定します。

以下は、SudoersをFreeIPAサーバーと統合するために実行する必要がある手順です:

  • ユーザーと接続を確認する
  • SSSDサービスでSudo機能を有効にします(クライアントマシンで)
  • Sudoルールの設定
  • Sudoers統合の検証

さあ、始めましょう。

FreeIPAユーザーと接続を確認する

このセクションでは、FreeIPAユーザー「rocky」がFreeIPAサーバーに存在することを確認し、ユーザーがクライアントマシン「client.hwdomain.lan」に接続できることを確認します。

この例では、FreeIPAユーザー'rocky'を使用しています。ユーザー'rocky'がFreeIPAサーバーで利用可能であることを確認するには、次の'ipa'コマンドを入力してください。

ipa user-find rocky

出力'1人のユーザーが一致しました'は、ユーザー'rocky'がFreeIPAサーバーで利用可能であることを確認します。

次に、ユーザー「rocky」を使用してFreeIPAクライアントマシンにログインするために、次のコマンドを入力します。これにより、ユーザーがFreeIPAクライアントマシンに接続できることが保証されます。この例では、「client.hwdomain.lan」と呼ばれるサーバーがFreeIPAクライアントマシンとして使用されます。

ssh [email 

ユーザー 'rocky' のパスワードを入力してください。クライアントマシンにログインしたら、次のコマンドを入力して現在のユーザーを特定します。

whoami
id

次のように「sudo su」コマンドを入力して、ルートアクセスまたは特権を取得します。パスワードを入力すると、「rockyはsudoersファイルにありません。このインシデントは報告されます。」のようなエラーが表示されるはずです。

sudo su

SSSDサービスでSudo機能を有効にする

FreeIPAでSudoersを設定する前に、クライアントマシンのSSSDサービスで「with-sudo」機能を有効にする必要があります。このセクションでは、「authselect」ユーティリティを介してSSSDの「sudo」機能を有効にします。したがって、これらのコマンドをクライアントマシン「client.hwdomain.lan」で実行することを確認してください。

以下のコマンド「authselect」を入力して、SSSDサービスで「sudo」を有効にしてください。FreeIPAユーザーがクライアントマシンで「sudo」コマンドを実行できるように、SSSDで「sudo」機能を有効にする必要があります。

sudo authselect enable-feature with-sudo

次に、次のsystemctlコマンドユーティリティを使用してSSSDサービスを再起動します。その後、SSSDサービスを確認して、サービスが実行されていることを確認してください。

sudo systemctl restart sssd
sudo systemctl status sssd

出力「アクティブ(実行中)」は、SSSDサービスがクライアントマシンで実行中であることを確認します。

最後に、現在の認証ソースで有効な機能のリストを表示するために、次のコマンドを入力してください。FreeIPAクライアントマシンでは、SSSDはデフォルトで認証ソースとして有効になっています。

authselect current

「有効な機能」セクションの下に「with-sudo」というパラメータが表示されるべきです。これは「sudo」機能がSSSD認証プロファイルで有効になっていることを確認します。

Sudoルールの設定

Sudoは、コマンドをrootユーザーとして実行できるアプリケーションであり、それを使用してrootユーザーにアクセスすることもできます。デフォルトでは、FreeIPAはSudoをサポートしており、SudoをFreeIPAサーバーと統合するためのコマンドラインユーティリティを提供しています。

このセクションでは、Sudoルールを作成することでSudoとFreeIPAを統合します。まずユーザーグループを設定し、その後、特定のグループ内のユーザーがSudoにアクセスして実行できるようにするSudoルールを設定します。

FreeIPAサーバーで、新しいグループ<em>sysadmin</em>を作成するために、次のコマンドを入力します。そして、<em>sysadmin</em>グループの詳細を確認します。

ipa group-add --desc='Sysadmin Team' sysadmin
ipa group-find sysadmin

出力の 'グループ "sysadmin" が追加されました' は、新しいグループがFreeIPAサーバーに作成されたことを確認します。コマンド 'ipa group-find' を実行すると、出力として '1つのグループが一致しました' のようなメッセージが表示されるはずで、これはグループ 'sysadmin' が追加され、利用可能であることを意味します。

次に、sysadmin_sudoという新しいSudoルールを作成するために、以下のコマンドを入力します。ipa sudorule-addは、FreeIPAサーバにsudoルールを追加するために使用できるユーティリティです。また、--hostcat=all --runasusercat=all --runasgroupcat=all --cmdcat=allというパラメータで新しいsudoルールを作成しています。このルールにより、すべてのクライアントマシンでsudoを実行でき、sysadmin_sudoルールの一部となる任意のユーザーまたはグループが許可されます。

ipa sudorule-add sysadmin_sudo \
    --hostcat=all --runasusercat=all --runasgroupcat=all --cmdcat=all

出力「sudoルール「sysadmin_sudo」を追加しました」は、新しいsudoルールが作成されたことを確認します。

次に、グループ 'sysadmin' を sudo ルール 'sysadmin_sudo' に追加する以下のコマンドを入力します。これにより、'sysadmin' グループ内のすべての FreeIPA ユーザーが、すべての FreeIPA クライアントマシンで sudo コマンドを実行できるようになります。

ipa sudorule-add-user sysadmin_sudo --group sysadmin

以下のコマンドを使用して、sudoルール「sysadmin_sudo」の詳細を確認してください。「ユーザーグループ」セクションには、「sysadmin」グループが追加され、「sysadmin_sudo」に利用可能であることが表示されるはずです。

ipa sudorule-show sysadmin_sudo

最後に、以下のコマンドを入力して、FreeIPAユーザー「rocky」をグループ「sysadmin」に追加します。その後、「sysadmin」グループの詳細を確認して、ユーザーが追加されていることを確認してください。

ipa group-add-member --user=rocky sysadmin
ipa group-show sysadmin

「sysadmin」グループの詳細を見ると、ユーザー「rocky」が追加されており、このグループは「sysadmin_sudo」というsudoルールの一部でもあります。

この時点で、あなたはグループ「sysadmin」とSudoルール「sysadmin_sudo」を介してユーザー「rocky」を設定し、全てのクライアントマシンでSudoを実行することを許可しました。次のステップでは、SudoとFreeIPAサーバーの統合を確認します。

FreeIPAとのSudoers統合を確認する

このセクションでは、SudoとFreeIPAの統合が機能していることを確認します。これは、ユーザー「rocky」としてクライアントマシンにログインし、ルート特権を取得するために「sudo」コマンドを実行することで達成できます。

次のコマンドを入力して、ユーザー「rocky」を使用してFreeIPAクライアントマシン「client.hwdomain.lan」に接続します。プロンプトが表示されたら、ユーザー「rocky」のパスワードを入力してください。

ssh [email 

クライアントマシンにログインしたら、現在のユーザーを特定するために次のコマンドを実行してください。'rocky'というユーザーとしてログインしていることがわかるはずです。

id
whoami

次に、以下に 'sudo' コマンドを入力して、FreeIPA ユーザー 'rocky' の 'sudo' ルート権限を確認してください。プロンプトが表示されたら、ユーザー 'rocky' のパスワードを入力してください。

sudo id
sudo su

操作が成功すると、シェルプロンプトがroot@hostname ...に変わるのが見えるはずです。これにより、あなたがroot権限を与えられ、ユーザーrootとしてログインしていることが確認されます。

以下のコマンドを使用して、現在のユーザーを特定してください。現在、ユーザー「root」としてログインしていることが確認できるはずです。

id
whoami

これを念頭に置いて、あなたは現在、SudoersをFreeIPAサーバーと統合することに成功しました。'sysadmin'グループ内のユーザーは誰でも、'sudo'コマンドを実行し、すべてのクライアントマシンでルート権限を取得できます。

特定のコマンドに対してFreeIPAユーザーがSudoを実行できるようにします

このシナリオでは、クライアントマシンにログインし、特定のコマンドに対してSudoを実行できる新しいFreeIPAユーザーを設定します。

この例では、SSHを介してクライアントマシン「client.hwdomain.lan」にログインし、LEMPスタックを管理するための一部のコマンドに対してSudoを実行できる新しいユーザー「max」を設定します。

これを達成するためには、以下のステップを行う必要があります。

  • FreeIPAユーザーおよびグループの作成
  • ホストグループの作成
  • HBAC(ホストベースのアクセス制御)ルールの作成
  • sudoルールを作成する
  • Sudoコマンドグループの作成
  • FreeIPAとのSudo統合を確認する

さあ、始めましょう。

FreeIPAユーザーおよびグループの作成

最初に、特定のユーザーとグループを作成して定義する必要があります。この例では、新しいユーザー'max'とユーザーグループ'systemadmin'をFreeIPAサーバー上に作成します。また、新しいユーザー'max'がクライアントマシン'client.hwdomain.lan'にアクセスしてログインできることを確認します。

以下の 'ipa user-add' コマンドを入力して、'max' という新しい FreeIPA ユーザーを作成します。プロンプトが表示されたら、新しいユーザーのパスワードを入力し、繰り返します。

ipa user-add max --first=Max --last=Rods --password

次に、次のコマンドを使用してユーザー「max」の詳細を確認してください。「max」のデフォルトの詳細設定を見ることができるはずです。

ipa user-find max

次に、以下のコマンドを入力して新しいグループ「systemadmin」を追加します。その後、ユーザー「max」をグループ「sysadmin」に追加します。

ipa group-add --desc='System Admin Team' systemadmin
ipa group-add-member --user=max systemadmin

次のコマンドを使用して、グループ'systemadmin'の詳細な設定を確認してください。ユーザー'max'が追加され、グループ'systemdadmin'に利用可能であることがわかります。

ipa group-show systemadmin

新しいユーザーがクライアントマシンにログインできるようにするため、以下のsshコマンドを入力します。この例では、ユーザー「max」がクライアントマシン「client.hwdomain.lan」にログインします。

ssh [email 

プロンプトが表示されたら、パスワードを入力してください。次に、デフォルトのパスワードを変更するように求められます。現在のパスワードを入力し、新しいパスワードを入力して繰り返してください。

ログイン後、次のコマンドを使用して現在のユーザーを特定してください。

id
whoami

あなたは、ユーザー 'max' として 'client.hwdomain.lan' にログインしていることを確認するべきです。

ホストグループの作成

ユーザーとグループを作成したら、次にFreeIPAでホストグループを作成および設定します。'appserver'という新しいホストグループを作成し、このグループのメンバーは'client.hwdomain.lan'になります。

次のコマンドを使用してFreeIPA上の利用可能なホストのリストを確認してください。これによりFreeIPAで利用可能なマシンのリストが表示されます。この例では、二つのホスト『ipa.hwdomain.lan』と『client.hwdomain.lan』がFreeIPAサーバーに利用可能です。

ipa host-find

新しいホストグループ「appserver」を作成します。次に、ホスト「client.hwdomain.lan」をホストグループ「appserver」に追加します。

ipa hostgroup-add appserver
ipa hostgroup-add-member appserver --hosts=client.hwdomain.lan

以下のコマンドを使用して、詳細なホストグループ「appserver」を確認してください。「client.hwdomain.lan」というホストが追加され、「appserver」ホストグループで使用可能になっていることが確認できるはずです。

ipa hostgroup-show appserver

HBAC(ホストベースのアクセス制御)ルールの作成

ホストグループ「appserver」が作成されたので、次にFreeIPAサーバーでHBAC(ホストベースのアクセス制御)ルールを設定します。HBACルールを使用すると、ログインを試みるユーザーおよびそのユーザーのグループ、アクセスしようとするホスト(またはそのホストグループ)、および(オプションで)アクセスされるサービスに基づいて、ホストやサービスへのアクセスを制限するポリシーを設定および定義できます。

このセクションでは、デフォルトのHBACルールを無効にし、ユーザー「max」またはグループ「systemadmin」がホストグループ「appserver」内のすべてのホストをSSH経由で管理できる「operation_admin」というカスタムHBACルールを設定します。また、このユーザーまたはグループは「sudo」と「sudo -l」コマンドを実行できるようになります。

デフォルトの HBAC ルール '<em>allow_all</em>' を無効にするには、次のコマンドを入力してください。その後、HBAC ルール '<em>allow_all</em>' の詳細を確認してください。

ipa hbacrule-disable allow_all
ipa hbacrule-show allow_all

出力「無効なHBACルール「allow_all」が確認されましたルールは無効です。また、有効のセクションでは、値がfalseに変更されているはずです。

デフォルトのHBACルール'allow_all'が無効にされているため、どのユーザーもクライアントマシンにログインできません。

次に、以下の 'ipa hbacrule-add' コマンドを使用して、'operation_admin' という新しいカスタム HBAC ルールを作成します。

ipa hbacrule-add operation_admin

今、コマンド「ipa hbacrule-add-host」を使用してホストグループ「appserver」を追加し、コマンド「ipa hbacrule-add-user」を使用してユーザーグループ「sysadmin」をHBACルール「operation_admin」に追加します。

ipa hbacrule-add-host operation_admin --hostgroup appserver
ipa hbacrule-add-user operation_admin --group systemadmin

次に、'operation_admin'というHBACルールに、'sshd'、'sudo'、'su'のようなサービスを追加します。'operation_admin'のHBACルール内にあるホストまたはホストグループは影響を受け、これらのコマンドにアクセスしたり実行したりできるようになります。

ipa hbacrule-add-service operation_admin --hbacsvcs=sshd
ipa hbacrule-add-service operation_admin --hbacsvcs=sudo --hbacsvcs=su-l

以下のコマンドを使用して、HBACルール「operation_admin」の詳細を確認してください。 「sshd」、「sudo」、および「su-l」の3つのサービスが追加され、operation_adminで利用可能であることが確認できるはずです。

ipa hbacrule-show operation_admin

この時点で、ルール「operation_admin」に属するユーザー/グループのみがクライアントマシンにログインできるようになります。ユーザー「rocky」はクライアントマシン「client.hwdomain.lan」にログインできませんが、ユーザー「max」は「client.hwdomain.lan」にログインできます。これは、ユーザー「max」がHBACルール「operation_admin」に適用されているグループ「systemadmin」の一部であるためです。

ユーザーとしてログインすると、'rocky' はクライアントマシンによって定義されます。

ssh [email 

'max'としてログインすることは許可されています。これは'systemadmin'グループの一部だからです。

ssh [email 

sudoルールを作成する

このセクションでは、FreeIPAで新しいSudoルールを作成して設定します。その後、このSudoルールを特定のグループ「systemadmin」およびホストグループ「appserver」に割り当てます。

新しいSudoルール「systemadmin_sudo」を追加するために、以下のコマンドを入力します。この例では、--runasusercat=all --runasgroupcat=allというパラメータを持つユーザーとグループにのみ適用される新しいsudoルールを作成しています。これにより、すべてのコマンドをsudoまたはrootとして実行できるわけではなく、このルールは特定のクライアントまたはホストに適用できます。

ipa sudorule-add systemadmin_sudo \
    --runasusercat=all --runasgroupcat=all

以下のコマンドを入力して、ユーザーグループ「systemdadmin」とホストグループ「appserver」をsudoルール「systemadmin_sudo」に追加してください。これにより、「systemadmin_sudo」は「systemadmin」グループに属するユーザーおよび「appserver」に属するホスト/クライアントにのみ適用されます。

ipa sudorule-add-user systemadmin_sudo --group systemadmin
ipa sudorule-add-host systemadmin_sudo --hostgroup appserver

Sudoコマンドグループの作成

Sudoルールが作成された後、FreeIPAでSudoコマンドグループを設定し定義します。これにより、特定のSudoコマンドグループに複数のコマンドをバインドでき、その後、特定のSudoルールに対してSudoコマンドグループを適用できます。

この例では、LEMPスタックサービスを開始および再起動するためにFreeIPAでいくつかのコマンドを定義します。その後、'systemadmin_cmds'という新しいSudoコマンドグループを作成し、その中にコマンドを追加します。最後に、Sudoルール'systemadmin_sudo'にSudoコマンドグループ'systemadmin_cmds'を割り当てます。

以下のコマンドを入力して、FreeIPAサーバーに新しいコマンドを追加します。この例では、LEMPスタックを管理するために使用できるコマンドを追加します。Nginx、MariaDB、およびPHP-FPMサービスを起動および再起動できます。

ipa sudocmd-add "/usr/bin/systemctl start nginx"
ipa sudocmd-add "/usr/bin/systemctl restart nginx"
ipa sudocmd-add "/usr/bin/systemctl start php-fpm"
ipa sudocmd-add "/usr/bin/systemctl restart php-fpm"
ipa sudocmd-add "/usr/bin/systemctl start mariadb"
ipa sudocmd-add "/usr/bin/systemctl restart mariadb"

次に、'systemadmin_cmds'という新しいsudoコマンドグループを追加します。それから、LEMPスタックの管理に使用するすべてのコマンドをsudoコマンドグループ'systemadmin_cmds'に追加します。

ipa sudocmdgroup-add systemadmin_cmds
ipa sudocmdgroup-add-member systemadmin_cmds \
    --sudocmds "/usr/bin/systemctl start nginx" \
    --sudocmds "/usr/bin/systemctl restart nginx" \
    --sudocmds "/usr/bin/systemctl start php-fpm" \
    --sudocmds "/usr/bin/systemctl restart php-fpm" \
    --sudocmds "/usr/bin/systemctl start mariadb" \
    --sudocmds "/usr/bin/systemctl restart mariadb"

出力「新しいsudoコマンドグループ「systemdadmin_cmds」を追加しました」は、新しいsudoコマンドグループが作成されたことを確認します。また、出力「追加されたメンバーの数6」は、あなたが「systemdadmin_cmds」sudoコマンドグループに6つのコマンドを追加したことを確認します。

最後に、次のコマンドを入力して、sudoルール「systemadmin_sudo」にsudoコマンドグループ「systemadmin_cmds」を追加します。これにより、sudoルール「systemadmin_sudo」内のユーザーは、「systemadmin_cmds」sudoコマンドグループで利用可能な6つのsudoコマンドを実行できるようになります。

ipa sudorule-add-allow-command systemadmin_sudo --sudocmdgroups systemadmin_cmds

FreeIPAとのSudoers統合を確認する

このシナリオでは、Sudoの実装とFreeIPAとの統合を確認するために、新しいユーザー「max」を使って「client.hwdomain.lan」にログインします。そして、LEMPスタックサービスを管理するために使用されるいくつかのコマンドを実行します。

client.hwdomain.lanにユーザー'max'でログインするには、以下のsshコマンドを使用してください。パスワードを入力するよう求められたら入力してください。

ssh [email 

ログイン後、次のコマンドを入力して現在のユーザーを特定します。あなたがユーザー「max」としてログインしていることがわかるでしょう。

id
whoami

次に、LEMPスタックサービスを再起動するために以下のコマンドを入力してください。プロンプトが表示されたら、ユーザー「max」のパスワードを入力します。この操作は、ユーザー「max」が「sudo」としてこれらのコマンドを実行することが許可されているため、成功するはずです。

sudo /usr/bin/systemctl restart nginx
sudo /usr/bin/systemctl restart php-fpm
sudo /usr/bin/systemctl restart mariadb

さて、もし'systemctl stop'コマンドを試すと、操作は失敗し、次のようなエラーが表示されるはずです:'申し訳ありませんが、ユーザーmaxはクライアント.hwdomain.lanでrootとして実行することは許可されていません'。

sudo /usr/bin/systemctl stop nginx
sudo /usr/bin/systemctl stop php-fpm
sudo /usr/bin/systemctl stop mariadb

これで、特定のコマンドをsudoまたはrootとして実行できるようにするために、FreeIPAサーバーでSudoersの設定が完了しました。

結論

このチュートリアルでは、SudoersをFreeIPAサーバーと統合する方法を学びました。また、ユーザー、グループ、ホストグループ、sudoルール、HBAC(ホストベースのアクセス制御)ルール、sudoコマンドグループを管理するための「ipa」ユーティリティの基本的なコマンドも学びました。すべてのコマンドとホストでユーザーがsudoを実行できるようにするシナリオと、特定のホスト/クライアント上でのみ特定のコマンドをsudoで実行できるようにするシナリオの2つの異なるシナリオを通じて、FreeIPAサーバーとのSudoersの基本的な統合を学びました。

その上、あなたはSSSDサービスの基本的な設定を学び、FreeIPAサーバーを通じてSudoと統合することもしました。

このSudoの実装を使用することで、展開サーバー上でこれらの2つのシナリオを実装できます。詳細を知るには、FreeIPAおよびSudoerの公式ドキュメントを訪れてください。

関連記事: