Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

13.2.8. サービスの設定: sudo

sudo、LDAP、および SSSD について

sudo ルールは sudoers ファイルで定義されます。これは、一貫性を保つためにすべてのマシンに個別に分散する必要があります。
大規模な環境用に管理者が管理する方法の 1 つに、sudo 設定を中央の LDAP ディレクトリーに保存し、各ローカルシステムがその LDAP ディレクトリーを指すように設定することです。つまり、更新を 1 つの場所で行うだけで、新しいルールはローカルシステムによって自動的に認識されます。
sudo-LDAP 設定では、各 sudo ルールは LDAP エントリーとして保存され、sudo ルールのコンポーネントは LDAP 属性で定義されます。
sudoers ルールは以下のようになります。
Defaults    env_keep+=SSH_AUTH_SOCK
...
%wheel        ALL=(ALL)       ALL
LDAP エントリーは以下のようになります。
# sudo defaults
dn: cn=defaults,ou=SUDOers,dc=example,dc=com
objectClass: top
objectClass: sudoRole
cn: defaults
description: Default sudoOptions go here
sudoOption: env_keep+=SSH_AUTH_SOCK

# sudo rule
dn: cn=%wheel,ou=SUDOers,dc=example,dc=com
objectClass: top
objectClass: sudoRole
cn: %wheel
sudoUser: %wheel
sudoHost: ALL
sudoCommand: ALL
注記
SSSD は、sudoHost 属性の値に応じてローカルシステムに適用される sudo ルールのみをキャッシュします。つまり、sudoHost の値が ALL に設定されていると、ホスト名と一致する正規表現、システムの netgroup と一致する正規表現を使用するか、システムのホスト名、完全修飾ドメイン名、または IP アドレスと一致させます。
sudo サービスは、LDAP サーバーを参照し、その LDAP エントリーからルール設定を取得するように設定できます。sudo 設定を LDAP ディレクトリーにポイントするのではなく、SSSD を参照するように設定できます。SSSD は、sudo が必要とするすべての情報を保存し、ユーザーが sudo関連操作を試行するたびに、最新の sudo 設定を SSSD ディレクトリーからプルできます。ただし、SSSD は、LDAP サーバーがオフラインであっても、その集中 LDAP 設定を使用してタスクを実行できるように、すべての sudo タイルもキャッシュし ます。

手順13.5 SSSD を使用した sudo の設定

SSSD sudo 設定オプションはすべて、man ページの sssd-ldap(5) に記載されています。
  1. sssd-common パッケージがインストールされていることを確認します。
    ~]$ rpm -q sssd-common
  2. sssd.conf ファイルを開きます。
    ~]# vim /etc/sssd/sssd.conf
  3. SSSD が管理するサービス一覧に sudo サービスを追加します。
    [sssd]
    services = nss,pam,sudo
    ....
  4. 新しい [sudo] サービス設定セクションを作成します。このセクションは空白のままにすることができます。1 つの設定可能なオプションは 1 つしかなく、sudo がピリオドの前または後に評価するための設定可能です。
    ただし、このセクションでは、SSSD が sudo サービスを認識し、デフォルト設定を提供する必要があります。
    [sudo]
  5. sudo 情報は、SSSD 設定の設定済みの LDAP ドメインから読み取られるため、LDAP ドメインが利用可能でなければなりません。LDAP プロバイダーの場合、これらのパラメーターが必要です。
    • ディレクトリータイプ sudo_provider。これは常に ldap です。
    • 検索ベースである ldap_sudo_search_base
    • LDAP サーバーの URI ldap_uri
    以下に例を示します。
    [domain/LDAP]
    id_provider = ldap
    
    sudo_provider = ldap
    ldap_uri = ldap://example.com
    ldap_sudo_search_base = ou=sudoers,dc=example,dc=com
    Identity Management(IdM または IPA)プロバイダーの場合、サーバーへの接続時に Kerberos 認証を実行するために必要な追加のパラメーターがあります。
    [domain/IDM]
    id_provider = ipa
    ipa_domain = example.com
    ipa_server = ipa.example.com
    ldap_tls_cacert = /etc/ipa/ca.crt
    
    sudo_provider = ldap
    ldap_uri = ldap://ipa.example.com
    ldap_sudo_search_base = ou=sudoers,dc=example,dc=com
    ldap_sasl_mech = GSSAPI
    ldap_sasl_authid = host/hostname.example.com
    ldap_sasl_realm = EXAMPLE.COM
    krb5_server = ipa.example.com
    注記
    Identity Management プロバイダーの sudo_provider タイプは ldap です。
  6. sudo ルールキャッシュの更新に使用する間隔を設定します。
    特定のシステムユーザーの キャッシュは常にチェックされ、そのユーザーがタスクを実行するたびに更新されます。ただし、SSSD は、ローカルシステムに関連するすべてのルールをキャッシュします。この完全なキャッシュは 2 つの方法で更新されます。
    • 最後に完全更新からのルールのみの変更(ldap_sudo_smart_refresh_interval、秒単位の時間)、デフォルトは 15 分です。
    • 完全にキャッシュ全体をダンプし、LDAP サーバーの現在のすべてのルール(ldap_sudo_full_refresh_interval、時間(秒単位))にプルします。デフォルトは 6 時間です。
    これらの 2 つの更新間隔は別々に設定されます。以下に例を示します。
    [domain/LDAP]
    ...
    ldap_sudo_full_refresh_interval=86400
    ldap_sudo_smart_refresh_interval=3600
    注記
    SSSD は、ローカルシステムに適用される sudo ルールのみをキャッシュします。つまり、sudoHost の値が ALL に設定されていると、ホスト名と一致する正規表現、システムの netgroup と一致する正規表現を使用するか、システムのホスト名、完全修飾ドメイン名、または IP アドレスと一致させます。
  7. 必要に応じて、sudo ルールに使用されるスキーマを変更する値を設定します。
    スキーマ要素は ldap_sudorule_* 属性で設定されます。デフォルトでは、スキーマ要素はすべて sudoers.ldap で定義されたスキーマを使用します。これらのデフォルトはほぼすべてのデプロイメントで使用されます。
  8. sssd.conf ファイルを保存して閉じます。
  9. nsswitch.conf ファイルを編集して sss の場所を追加して、SSSD でルール設定を検索するように sudo を設定します。
    ~]# vim /etc/nsswitch.conf
    
    sudoers: files sss
  10. SSSD を再起動します。
    ~]# service sssd restart