11.2.8. サービスの設定: sudo

11.2.8.1. sudo、LDAP、SSSD について

sudo ルールは sudoers ファイルで定義されており、これは一貫性の維持のために各マシンに個別に配布される必要があります。
大規模な環境で管理者がこれを管理する方法の一つは、中央 LDAP ディレクトリーに sudo 設定を保存し、各ローカルシステムをその LDAP ディレクトリーに向けるように設定することです。これにより、アップデートは単一の場所でのみ必要となり、新しいルールはローカルシステムが自動的に認識することになります。
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 に設定され、ホスト名かシステムネットグループ、システムホスト名か完全修飾ドメイン名または IP アドレスに合致する正規表現を使用します。
sudo サービスは、LDAP サーバーに向けて、それらの LDAP エントリーからルール設定を引き出すように設定が可能です。sudo 設定を LDAP ディレクトリーではなく、SSSDに向けることができます。すると SSSD は sudo が必要とする全情報を保存し、ユーザーが sudo 関連の操作を行おうとすると、最新の sudo 設定が LDAP ディレクトリーから SSSD 経由で引き出されます。しかし、SSSD は sudo ルールをすべてキャッシュするので、LDAP サーバーがオフラインになっても、offline ユーザーは中央化された LDAP 設定を使用してタスクを実行することができます。

11.2.8.2. SSSD を使った sudo の設定

SSSD sudo 設定オプションはすべて、sssd-ldap(5) man ページに一覧表示されています。
sudo サービスは、以下の手順で設定します。
  1. sssd.conf ファイルを開きます。
    [root@server ~]# vim /etc/sssd/sssd.conf
  2. sudo サービスを SSSD が管理する一覧に追加します。
    [sssd]
    services = nss,pam,sudo
    ....
  3. 新たな [sudo] サービス設定セクションを作成します。このセクションは空白のままでかまいません。唯一設定可能なオプションは、sudo not before/after period の評価です。
    ただし、このセクションは、SSSD が sudo サービスを認識し、デフォルト設定を提供するために必要となります。
    [sudo]
    
    
    
  4. 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
    ID 管理 (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

    注記

    ID 管理プロバイダーの sudo_provider タイプは ldap のままです。
  5. 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 に設定され、ホスト名かシステムネットグループ、システムホスト名か完全修飾ドメイン名または IP アドレスに合致する正規表現を使用します。
  6. オプションでは、任意の値を設定して、sudo ルールに使われるスキーマを変更します。
    スキーマ要素は、ldap_sudorule_* 属性で設定されています。デフォルトでは、すべてのスキーマ要素が sudoers.ldap で定義されたスキーマを使用します。これらのデフォルトは、ほとんどすべての導入で使用されます。
  7. sssd.conf ファイルを保存し、閉じます。
  8. nsswitch.conf ファイルを編集し、sss の場所を加えることで sudo が SSSD のルール設定を探すように設定します。
    [root@server ~]# vim /etc/nsswitch.conf
    
    sudoers: files sss
  9. SSSD を再開始します。
    [root@server ~]# service sssd restart