13.2.13. ドメインの作成: Active Directory
Active Directory アイデンティティープロバイダーは、汎用 LDAP プロバイダーの拡張です。LDAP プロバイダーのすべての設定オプションは、Active Directory プロバイダーと、Active Directory とシステムユーザー間のユーザーアカウントおよびアイデンティティーマッピングに関連するいくつかの追加パラメーターで利用できます。
標準の LDAP サーバーと Active Directory サーバーには、いくつかの基本的な違いがあります。Active Directory プロバイダーを設定する場合は、特定の設定が必要な設定エリアがあります。
- Windows セキュリティー ID を使用する ID は、対応する Linux システムユーザー ID にマップされる必要があります。
- 検索では、範囲の取得拡張機能を考慮する必要があります。
- LDAP 参照にはパフォーマンスの問題が発生する可能性があります。
Active Directory Securiy ID および Linux ユーザー ID のマッピング
Windows と Linux がシステムユーザーを処理する方法と、Active Directory と標準の LDAPv3 ディレクトリーサービスで使用されるユーザースキーマでは、固有の構造的な違いがあります。SSSD で Active Directory アイデンティティープロバイダーを使用してシステムユーザーを管理する場合は、Active Directory 形式のユーザーを新しい SSSD ユーザーを調整する必要があります。これには 2 つの方法があります。
- Services for Unix を使用した Windows ユーザーおよびグループエントリーに POSIX 属性を挿入し、それらの属性を PAM/NSS にプルする
- SSSD で ID マッピングを使用した Active Directory セキュリティー ID(SID)と Linux で生成された UID 間のマップの作成
ID マッピングは、Active Directory で追加のパッケージや設定を必要としないため、ほとんどの環境の最も簡単なオプションです。
ID マッピングのメカニズム
Linux/Unix システムは、ローカルユーザー ID 番号およびグループ ID 番号を使用して、システム上のユーザーを特定します。これらの UID:GID 番号は 501:501 などの単純な整数です。この数は、大規模な Linux/Unix ドメインの一部であるシステムであっても、常にローカルで作成および管理されるため、簡単な数値です。
Microsoft Windows および Active Directory は、異なるユーザー ID 構造を使用して、ユーザー、グループ、およびマシンを特定します。各 ID は、セキュリティーバージョン、発行認証局タイプ、マシン、およびアイデンティティー自体を識別するさまざまなセグメントで構成されます。以下に例を示します。
S-1-5-21-3623811015-3361044348-30300820-1013
3 番目のブロックから 6 番目のブロックはマシン識別子です。
S-1-5-21-3623811015-3361044348-30300820
-1013
最後のブロックは、特定のエンティティーを識別する RID( 相対識別子 )です。
S-1-5-21-3623811015-3361044348-30300820-1013
使用可能な ID 番号の範囲は常に SSSD に割り当てられます。(これはローカル範囲であるため、すべてのマシンで同じです。)
|_____________________________| | | minimum ID max ID
この範囲は 10,000 セクション(デフォルトでは)に分けられ、各セクションには 200,000 ID が割り当てられます。
| slice 1 | slice 2 | ... | |_________|_________|_________| | | | | minimum ID max ID
新しい Active Directory ドメインが検出されると、SID がハッシュ化されます。次に、SSSD はハッシュと利用可能なセクションの数を使用して、Active Directory ドメインに割り当てる ID セクションを決定します。これは ID セクションの割り当てを確実に行うため、多くのクライアントマシンの同じ Active Directory ドメインに同じ ID 範囲が割り当てられます。
| Active | Active | | |Directory|Directory| | |domain 1 |domain 2 | ... | | | | | | slice 1 | slice 2 | ... | |_________|_________|_________| | | | | minimum ID max ID
注記
ID セクションの割り当て方法は一貫していますが、ID マッピングは、クライアントマシンで Active Directory ドメインが発生している順序を基にしているため、すべての Linux クライアントマシン で ID 範囲の割り当ての一貫性がなくなることがあります。一貫性が必要な場合は、ID マッピングを無効にし、明示的な POSIX 属性の使用を検討してください。
ID マッピングパラメーター
ID マッピングは 2 つのパラメーターで有効にされており、もう 1 つは適切な Active Directory ユーザースキーマをロードできるようにします。
ldap_id_mapping = True ldap_schema = ad
注記
ID マッピングを有効にすると、
uidNumber
属性および gidNumber
属性は無視されます。これにより、手動で割り当てられた値を防ぐことができます。いずれか の値を手動で割り当てる必要がある場合は、すべて の値を手動で割り当て、ID マッピングを無効にする必要があります。
ユーザーのマッピング
Active Directory ユーザーがローカルシステムサービスに初めてログインしようとすると、そのユーザーのエントリーが SSSD キャッシュに作成されます。リモートユーザーは、システムユーザーと同じように設定されます。
- ユーザーのシステム UID が、そのドメインの SID と ID 範囲に基づいて作成されます。
- GID は、UID と同じユーザー用に作成されます。
- ユーザー用にプライベートグループが作成されます。
sssd.conf
ファイルのホームディレクトリーの形式に基づいて、ホームディレクトリーが作成されます。- シェルは、システムのデフォルト、または
sssd.conf
ファイルの設定に従って作成されます。 - ユーザーが Active Directory ドメイン内のグループに所属する場合は、SID を使用して、SSSD により、Linux システムのこれらのグループにユーザーが追加されます。
Active Directory ユーザーと範囲の取得検索
Microsoft Active Directory には属性
MaxValRange
があります。この属性は、多値属性の値の数に制限を設定します。これは、検索拡張機能を 取得する範囲 です。基本的に、これは複数検索を実行し、すべての一致が返されるまで、指定した範囲内で結果のサブセットを返します。
たとえば、
member
属性の検索を行う場合、各エントリーには複数の値があり、その属性を持つエントリーが複数ある可能性があります。2000 に一致する結果(またはそれ以上)がある場合、MaxValRange
は一度に表示される値を制限します。これは、値の範囲です。指定される属性には追加のフラグセットがあり、結果が置かれているセットの範囲を表示します。
attribute:range=low-high:value
たとえば、検索では 100 から 500 になります。
member;range=99-499: cn=John Smith...
詳細は、Microsoft のドキュメント を参照して http://msdn.microsoft.com/en-us/library/cc223242.aspx ください。
SSSD は、追加の設定なしに、Active Directory プロバイダーを使用した範囲の取得をサポートします。
ただし、ldap_user_search_base などの検索を設定するのに使用できる LDAP プロバイダー属性の一部は、範囲の取得では実行されません。Active Directory プロバイダードメインで検索ベースを設定し、どの検索で範囲の取得をトリガーするかを考慮してください。
パフォーマンスおよび LDAP 参照
参照元の追跡試行に費やされた時間が原因で、全体のパフォーマンスに悪影響を及ぼす可能性があります。Active Directory アイデンティティープロバイダーで参照のchasing を使用すると、特にパフォーマンス低下が低くなります。リファーラルチェックを無効にすると、パフォーマンスが大幅に向上します。
LDAP 参照はデフォルトで有効になっているため、LDAP ドメイン設定で明示的に無効にする必要があります。以下に例を示します。
ldap_referrals = false
他のプロバイダータイプとしての Active Directory
Active Directory は ID プロバイダーとして使用し、アクセス、パスワード、および認証プロバイダーとして使用できます。
汎用 LDAP プロバイダー設定には、Active Directory プロバイダーの設定に使用できるオプションは複数あります。ad 値の使用は、パラメーターと値を自動的にプルし、Active Directory の特定のプロバイダーを設定する短い形です。たとえば、access_provider = ad を使用して、明示的な LDAP プロバイダーパラメーターを使用して、Active Directory アクセスプロバイダーをこの設定に拡張します。
access_provider = ldap ldap_access_order = expire ldap_account_expire_policy = ad
手順13.6 Active Directory アイデンティティープロバイダーの設定
Active Directory は、ドメインの ID、認証、アクセス制御ルール、およびパスワードのプロバイダーとして機能します。
*_provider
さらに、デフォルトの RFC 2307 を使用するのではなく、ユーザーおよびグループのエントリー用にネイティブの Active Directory スキーマを読み込むこともできます。
- Active Directory システムおよび Linux システムの両方に適切に構成されている環境があることを確認します。
- 特に SSSD でサービス検出を使用する場合は、名前解決を適切に設定する必要があります。
- Kerberos が正常に機能するには、両方のシステムのクロックが同期されている必要があります。
- Linux システムを Active Directory クライアントとして設定し、Active Directory ドメイン内に登録します。これは、Linux システムで Kerberos サービスおよび Samba サービスを設定して行います。
- Active Directory Kerberos レルムを使用するように Kerberos を設定します。
- Kerberos クライアント設定ファイルを開きます。
~]# vim /etc/krb5.conf
- [logging] セクションおよび [libdefaults] セクションを設定し、Active Directory レルムに接続するようにします。
[logging] default = FILE:/var/log/krb5libs.log [libdefaults] default_realm = EXAMPLE.COM dns_lookup_realm = true dns_lookup_kdc = true ticket_lifetime = 24h renew_lifetime = 7d rdns = false forwardable = false
SSSD で自動検出を使用しない場合は、[realms] セクションおよび [domain_realm] セクションも設定し、Active Directory サーバーを明示的に定義します。
- Active ディレクトリーサーバーに接続するように Samba サーバーを設定します。
- Samba 設定ファイルを開きます。
~]# vim /etc/samba/smb.conf
- [global] セクションに Active Directory ドメイン情報を設定します。
[global] workgroup = EXAMPLE client signing = yes client use spnego = yes kerberos method = secrets and keytab log file = /var/log/samba/%m.log password server = AD.EXAMPLE.COM realm = EXAMPLE.COM security = ads
- Linux マシンを Active Directory ドメインに追加します。
- Windows 管理ユーザーの Kerberos 認証情報を取得します。
~]# kinit Administrator
- net コマンドを使用してマシンをドメインに追加します。
~]# net ads join -k Joined 'server' to dns domain 'example.com'
これにより、新しい keytab ファイル/etc/krb5.keytab
が作成されます。システムのキーを一覧表示し、ホストプリンシパルが存在することを確認します。~]# klist -k
- authconfig を使用して、システム認証に SSSD を有効にします。
# authconfig --update --enablesssd --enablesssdauth
- 例13.7「Active Directory 2008 R2 ドメイン」 および 例13.8「ID マッピングのある Active Directory 2008 R2 ドメイン」 に示されるように、Active Directory ドメインを SSSD 設定の ID プロバイダーとして設定します。
- SSH サービスを再起動して、新しい PAM 設定を読み込みます。
~]# service sshd restart
- 設定ファイルの変更後に SSSD を再起動します。
~]# service sssd restart
例13.7 Active Directory 2008 R2 ドメイン
~]# vim /etc/sssd/sssd.conf [sssd] config_file_version = 2 domains = ad.example.com services = nss, pam ... [domain/ad.example.com] id_provider = ad ad_server = ad.example.com ad_hostname = ad.example.com auth_provider = ad chpass_provider = ad access_provider = ad # defines user/group schema type ldap_schema = ad # using explicit POSIX attributes in the Windows entries ldap_id_mapping = False # caching credentials cache_credentials = true # access controls ldap_access_order = expire ldap_account_expire_policy = ad ldap_force_upper_case_realm = true # performance ldap_referrals = false
ID マッピングに重要なパラメーターは、Active Directory スキーマ(ldap_schema)と ID マッピングを明示的に有効にする必要があります(ldap_id_mapping)。
例13.8 ID マッピングのある Active Directory 2008 R2 ドメイン
~]# vim /etc/sssd/sssd.conf [sssd] config_file_version = 2 domains = ad.example.com services = nss, pam ... [domain/ad.example.com] id_provider = ad ad_server = ad.example.com ad_hostname = ad.example.com auth_provider = ad chpass_provider = ad access_provider = ad# defines user/group schema type
ldap_schema = ad
# for SID-UID mapping
ldap_id_mapping = True
# caching credentials cache_credentials = true # access controls ldap_access_order = expire ldap_account_expire_policy = ad ldap_force_upper_case_realm = true # performance ldap_referrals = false
Active Directory ドメインの潜在的な設定属性は、
sssd-ldap(5)および sssd-ad(5
)
の man ページに記載されています。