HadoopWithSecurityセットアップ >

目次

概要

  1. 冗長化されたLDAPクラスタは、ディレクトリデータベースを提供する複数のプロバイダと、そのデータを複製し参照専用でエンドユーザ(クライアント)にサービスする多数のコンシューマで構成されます。
  2. 更新可能なプロバイダを複数用意する(マルチマスタ)ことも可能なようですが、(Hadoopの認可バックエンドのように)更新頻度がそれほどでない場合にはシングルマスタ構成が無難なようです。
  3. 一つのサーバでプロバイダとコンシュマの役割を兼ねることが可能ですので、多段構成によりさらにスケールアウトすることができます。
  4. Hadoop用途での推奨構成は以下の通りです。
    1. Kerberos化し認証はすべてKerberosに委譲して、LDAPに認証情報は保持することはしません。つまり、簡易認証は使用しません。
    2. 各ノードからの参照(匿名アクセス)には、Start TLSを使用します。ldapsでは別のポートを必要とするためその分運用の手間となるからです。
    3. 認証が必要なアクセス(主には更新メンテナンスとレプリケーション)には、簡易認証ではなく SASL/GSSAPI(Kerberos) を使用します。
    4. コンシューマによる更新プロキシ(chain)は不要なので設定しません。(管理者による)更新はプロバイダに対して直接行います。

モデル環境

主に、debian.pngDebian 6.0(squeeze)とcentos.pngCentOS 6.2で検証しています。

サーバ構成

ドメインgrid.example.com
No.ホスト(基本的にAレコード)役割備考
1ns00マスタプロバイダ(更新可)
2ns{01..nn}コンシューマ群(参照専用)クラスタのサイズにあわせて増設

VIP

ドメインgrid.example.com
No.VIPのDNS(AまたはCNAME)説明備考
1ldapマスタプロバイダのVIP初期構築時にはns00に設定

サーバの構築

  • note.pngバックエンドがMDBの場合には、適宜、hdb の部分を mdb に読み替えてください。

ログ出力

  1. OpenLDAPはsyslogにログを出力します。
  2. OpenLDAP自身のsyslogファシリティのデフォルト設定は local4 で、デフォルトのログレベルは stats です。ファシリティはslapdコマンドの -l(syslog-local-user)オプションで、ログレベルは同じく -ddebug-level)オプションでそれぞれ変更可能です。syslogの運用ポリシーにあわせて、ファシリティやログレベルの設定を調整するとよいでしょう。なお、slapdのコマンドラインオプションについては、debian.pngDebianでは /etc/default/slapd で、centos.pngCentOSでは /etc/sysconfig/ldap で設定できます。
    1. debian.pngDebian(設定ファイル、設定データベース)でのログレベルのデフォルト設定は none です。
    2. centos.pngCentOS(設定ファイル、設定データベース)でのログレベルは明示的に設定されていませんので、デフォルトの stats です。

プロバイダの構築

  • 以下の説明でのLDIFファイルはdebian.pngDebian環境のものです。ファイル一式は、こちらからダウンロードできます。
  • 初期設定データベースの内容が異なるため、centos.pngCentOS環境用のLDIFファイルはこちらに用意しています。
  1. LDAPサーバをインストールします。動作確認のため必要ですので、クライアントコマンドなどもあわせてインストールします。
    1. debian.pngDebian
      $ sudo apt-get install slapd ldap-utils
    2. centos.pngCentOS
      $ sudo yum install openldap-servers openldap-clients
  2. データベースを作成します。
    1. debian.pngDebian: BaseDNを正しく設定するため、LDAPを再設定します。
      $ sudo dpkg-reconfigure -plow slapd
      Omit OpenLDAP server configuration? No
      DNS domain name: grid.example.com    # BaseDNが dc=grid,dc=example,dc=com となる。
      Organization name: grid.example.com
      Administrator password: ********
      Confirm password: ********
      Database backend to use: HDB
      Do you want the database to be removed when slapd is purged? No
      Move old database? Yes
      Allow LDAPv2 protocol? No
      ...
    2. centos.pngCentOS
      1. もしSELinuxが有効な場合にはそれを無効にします。
      2. サンプル設定データベースのディレクトリを一度削除し、まずは古いslapd.confファイル形式で設定を行います。Suffix と管理ユーザ(RootDN)を目的のものに変更し、管理ユーザのパスワード(RootPW)を追加します。パスワードはslappasswdコマンドでハッシュを生成し設定します。
        $ cd /etc/openldap
        $ sudo rm -R slapd.d
        $ sudo mkdir slapd.d
        $ sudo cp /usr/share/openldap-servers/slapd.conf.obsolete slapd.conf.bak
        1. $ diff -u /usr/share/openldap-servers/slapd.conf.obsolete slapd.conf.bak
        2. --- /usr/share/openldap-servers/slapd.conf.obsolete 2011-12-08 06:39:27.000000000 +0900
        3. +++ slapd.conf.bak 2012-06-27 19:22:58.484203754 +0900
        4. @@ -105,17 +105,18 @@
        5.  database monitor
        6.  access to *
        7.   by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        8. -        by dn.exact="cn=Manager,dc=my-domain,dc=com" read
        9. +        by dn.exact="cn=admin,dc=grid,dc=example,dc=com" read
        10.          by * none
        11.  
        12.  #######################################################################
        13.  # database definitions
        14.  #######################################################################
        15.  
        16. -database bdb
        17. -suffix "dc=my-domain,dc=com"
        18. +database hdb
        19. +suffix "dc=grid,dc=example,dc=com"
        20.  checkpoint 1024 15
        21. -rootdn "cn=Manager,dc=my-domain,dc=com"
        22. +rootdn "cn=admin,dc=grid,dc=example,dc=com"
        23. +rootpw {SSHA}*change_on_install*
        24.  # Cleartext passwords, especially for the rootdn, should
        25.  # be avoided.  See slappasswd(8) and slapd.conf(5) for details.
        26.  # Use of strong authentication encouraged.
      3. 設定ファイル(slapd.conf.bak)から設定データベース(slapd.d/以下)を変換生成します。警告が出ますが問題ありません。
        $ sudo slaptest -f slapd.conf.bak -F slapd.d
        hdb_db_open: warning - no DB_CONFIG file found in directory /var/lib/ldap: (2).
        Expect poor performance for suffix "dc=grid,dc=example,dc=com".
        hdb_db_open: database "dc=grid,dc=example,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
        backend_startup_one (type=hdb, suffix="dc=grid,dc=example,dc=com"): bi_db_open failed! (2)
        slap_startup failed (test would succeed using the -u switch)
      4. 設定データベースのパーミッションを適切に変更します。
        $ sudo chown -R ldap:ldap slapd.d
        $ sudo chmod -R 000 slapd.d
        $ sudo chmod -R u+rwX slapd.d
      5. 一度データベースディレクトリをクリーンアップし、DB_CONFIGをコピーします。
        $ sudo rm -R /var/lib/ldap
        $ sudo mkdir /var/lib/ldap
        $ sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
        $ sudo chown -R ldap:ldap /var/lib/ldap
        $ sudo chmod 700 /var/lib/ldap
      6. デーモンを起動させます(データベースが作成されます)。必要に応じて自動起動を有効にします。
        $ sudo chown -R ldap:ldap /var/lib/ldap
        $ sudo service slapd start
        $ sudo chkconfig slapd on
      7. Base DNと管理ユーザを追加します。
        $ ldapadd -cxWD cn=admin,dc=grid,dc=example,dc=com -f base.ldif 
        Enter LDAP Password: 
        adding new entry "dc=grid,dc=example,dc=com"
        
        adding new entry "cn=admin,dc=grid,dc=example,dc=com"
        1. # base.ldif
        2. dn: dc=grid,dc=example,dc=com
        3. objectClass: top
        4. objectClass: dcObject
        5. objectClass: organization
        6. o: grid.examle.com
        7. dc: grid
        8.  
        9. dn: cn=admin,dc=grid,dc=example,dc=com
        10. objectClass: simpleSecurityObject
        11. objectClass: organizationalRole
        12. cn: admin
        13. description: LDAP administrator
        14. userPassword: {SSHA}*change_on_install*
  3. slapcatコマンドでツリーが確認できます。
    $ sudo slapcat
    dn: dc=grid,dc=example,dc=com
    objectClass: top
    objectClass: dcObject
    objectClass: organization
    o: grid.example.com
    dc: grid
    structuralObjectClass: organization
    entryUUID: 191ed8cc-4936-1030-8b03-2193a291f3b9
    creatorsName: cn=admin,dc=grid,dc=example,dc=com
    createTimestamp: 20110723051225Z
    entryCSN: 20110723051225.562495Z#000000#000#000000
    modifiersName: cn=admin,dc=grid,dc=example,dc=com
    modifyTimestamp: 20110723051225Z
    
    dn: cn=admin,dc=grid,dc=example,dc=com
    objectClass: simpleSecurityObject
    objectClass: organizationalRole
    cn: admin
    description: LDAP administrator
    ...
  4. ログレベルを変更し、必要なインデックスを追加します。
    $ sudo ldapmodify -QY EXTERNAL -H ldapi:/// -f 00_4prov_olc-mod.ldif
    modifying entry "cn=config"
    
    modifying entry "olcDatabase={1}hdb,cn=config"
    • 00_4prov_olc-mod.ldif
      1. # on Provider
      2. # 1.
      3. dn: cn=config
      4. changetype: modify
      5. replace: olcLogLevel
      6. olcLogLevel: stats
      7.  
      8. # 2.1.
      9. dn: olcDatabase={1}hdb,cn=config
      10. changetype: modify
      11. add: olcDbIndex
      12. olcDbIndex: uid eq
      13. -
      14. # 2.2.
      15. add: olcDbIndex
      16. olcDbIndex: cn eq
      17. -
      18. # 2.3.
      19. add: olcDbIndex
      20. olcDbIndex: ou eq
      21. -
      22. # 2.4.
      23. add: olcDbIndex
      24. olcDbIndex: dc eq
  5. ACLが最終的に以下のようになっていることを確認します。
    1. olcAccess: {0}to attrs=userPassword,shadowLastChange
    2.   by self write
    3.   by anonymous auth
    4.   by dn="cn=admin,dc=grid,dc=example,dc=com" write
    5.   by * none
    6. olcAccess: {1}to dn.base=""
    7.   by * read
    8. olcAccess: {2}to *
    9.   by self write
    10.   by dn="cn=admin,dc=grid,dc=example,dc=com" write
    11.   by * read
  6. ユーザとグループ情報格納の基本コンテナ作成のためのldifファイル(例: basic_tree.ldif)を作成します。
  7. 基本コンテナを追加します。
    $ ldapadd -cxWD cn=admin,dc=grid,dc=example,dc=com -f basic_tree.ldif
    Enter LDAP Password:
    adding new entry "ou=people,dc=grid,dc=example,dc=com"
    
    adding new entry "ou=groups,dc=grid,dc=example,dc=com"
    

コンシューマの追加

  • クラスタのサイズに見合った数のコンシューマを用意します。
  • 以下の説明でのLDIFファイルはdebian.pngDebian環境のものです。ファイル一式は、こちらからダウンロードできます。
  • 初期設定データベースの内容が異なるため、centos.pngCentOS環境用のLDIFファイルはこちらに用意しています。

プロバイダ(ns00)での設定

  1. レプリケートを許可するコンシューマ(ns01)のエントリを追加します。
    $ ldapadd -cxWD cn=admin,dc=grid,dc=example,dc=com -f 00_4prov_cons.ldif
    Enter LDAP Password:
    adding new entry "cn=ns01,dc=grid,dc=example,dc=com"
    • 00_4prov_cons.ldif
      1. # on Provider
      2. dn: cn=ns01,dc=grid,dc=example,dc=com
      3. objectClass: simpleSecurityObject
      4. objectClass: organizationalRole
      5. cn: ns01
      6. description: LDAP 01 replicator
      7. userPassword: {SSHA}change_on_install
  2. プロバイダの設定を追加します。
    $ sudo ldapmodify -QY EXTERNAL -H ldapi:/// -f 01_4prov_olc-mod-00syncprov.ldif
    modifying entry "olcDatabase={1}hdb,cn=config"
    
    modifying entry "cn=module{0},cn=config"
    
    adding new entry "olcOverlay=syncprov,olcDatabase={1}hdb,cn=config"
    • 01_4prov_olc-mod-00syncprov.ldif
      1. # on Provider
      2. # 1.1.1.
      3. dn: olcDatabase={1}hdb,cn=config
      4. changetype: modify
      5. delete: olcAccess
      6. olcAccess: {0}to attrs=userPassword,shadowLastChange
      7.   by self write
      8.   by anonymous auth
      9.   by dn="cn=admin,dc=grid,dc=example,dc=com" write
      10.   by * none
      11. -
      12. # 1.1.2.
      13. add: olcAccess
      14. olcAccess: {0}to attrs=userPassword,shadowLastChange
      15.   by self write
      16.   by dn="cn=admin,dc=grid,dc=example,dc=com" write
      17.   by dn="cn=ns01,dc=grid,dc=example,dc=com" read
      18.   by anonymous auth
      19.   by * none
      20. -
      21. # 1.2.
      22. add: olcDbIndex
      23. olcDbIndex: entryUUID eq
      24. -
      25. # 1.3.
      26. add: olcDbIndex
      27. olcDbIndex: entryCSN eq
      28.  
      29. # 2.
      30. dn: cn=module{0},cn=config
      31. changetype: modify
      32. add: olcModuleLoad
      33. olcModuleLoad: {1}syncprov
      34.  
      35. # 3.
      36. dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
      37. changetype: add
      38. objectClass: olcOverlayConfig
      39. objectClass: olcSyncProvConfig
      40. olcOverlay: {0}syncprov
      41. olcSpCheckpoint: 100 10
      42. olcSpSessionlog: 100
  3. ACLが最終的に以下のようになっていることを確認します。コンシューマのレプリケーション用バインドDN(この例では、cn=ns01,dc=grid,dc=example,dc=com)にすべての読み取り権限が付与されています。
    1. olcAccess: {0}to attrs=userPassword,shadowLastChange
    2.   by self write
    3.   by dn="cn=admin,dc=grid,dc=example,dc=com" write
    4.   by dn="cn=ns01,dc=grid,dc=example,dc=com" read
    5.   by anonymous auth
    6.   by * none
    7. olcAccess: {1}to dn.base=""
    8.   by * read
    9. olcAccess: {2}to *
    10.   by self write
    11.   by dn="cn=admin,dc=grid,dc=example,dc=com" write
    12.   by * read

コンシューマ(ns01)での設定

  1. レプリケータの設定を追加します。centos.pngCentOSではデフォルトでolcSyncrepl属性のStart TLS設定が厳格(starttls=critical)になっているようです。他の値を設定することにより無効にすることも可能ですが、両環境とも最終的にはセキュアな設定(Start TLS、ldaps、SASLのいずれか)を利用すべきでしょう。LDAPoverTLS/SSLなどをご参照ください。
    $ sudo ldapmodify -QY EXTERNAL -H ldapi:/// -f 02_4cons_olc-mod-00syncrepl.ldif
    modifying entry "cn=config"
    
    modifying entry "olcDatabase={1}hdb,cn=config"
    • 02_4cons_olc-mod-00syncrepl.ldif
      1. # on Consumer
      2. # 1.
      3. dn: cn=config
      4. changetype: modify
      5. replace: olcLogLevel
      6. olcLogLevel: stats
      7.  
      8. # 2.1.1.
      9. dn: olcDatabase={1}hdb,cn=config
      10. changetype: modify
      11. delete: olcAccess
      12. olcAccess: {0}to attrs=userPassword,shadowLastChange
      13.   by self write
      14.   by anonymous auth
      15.   by dn="cn=admin,dc=grid,dc=example,dc=com" write
      16.   by * none
      17. -
      18. # 2.1.2.
      19. add: olcAccess
      20. olcAccess: {0}to attrs=userPassword,shadowLastChange
      21.   by anonymous auth
      22.   by * none
      23. -
      24. # 2.2.1.
      25. delete: olcAccess
      26. olcAccess: {2}to *
      27.   by self write
      28.   by dn="cn=admin,dc=grid,dc=example,dc=com" write
      29.   by * read
      30. -
      31. # 2.2.2.
      32. add: olcAccess
      33. olcAccess: {2}to *
      34.   by * read
      35. -
      36. # 2.3.
      37. replace: olcRootDN
      38. olcRootDN: cn=manager
      39. -
      40. # 2.4.
      41. delete: olcRootPW
      42. -
      43. # 2.5.
      44. add: olcDbIndex
      45. olcDbIndex: entryCSN eq
      46. -
      47. # 2.6.
      48. add: olcDbIndex
      49. olcDbIndex: entryUUID eq
      50. -
      51. # 2.7.
      52. add: olcDbIndex
      53. olcDbIndex: uid eq
      54. -
      55. # 2.8.
      56. add: olcDbIndex
      57. olcDbIndex: cn eq
      58. -
      59. # 2.9.
      60. add: olcDbIndex
      61. olcDbIndex: ou eq
      62. -
      63. # 2.10.
      64. add: olcDbIndex
      65. olcDbIndex: dc eq
      66. -
      67. # 2.11.
      68. add: olcSyncrepl
      69. olcSyncrepl: rid=123
      70.   provider="ldap://ldap.grid.example.com:389/"
      71.   type=refreshAndPersist
      72.   retry="60 30 300 +"
      73.   searchbase="dc=grid,dc=example,dc=com"
      74.   bindmethod=simple
      75.   binddn="cn=ns01,dc=grid,dc=example,dc=com"
      76.   credentials=change_on_install
  2. ACLが最終的に以下のようになっていることを確認します。参照専用になっている点が重要です。なお、syncreplエンジンはローカルデータベースへの完全な書込権限を持ちますのでACL設定などは必要ありません。
    1. olcAccess: {0}to attrs=userPassword,shadowLastChange
    2.   by anonymous auth
    3.   by * none
    4. olcAccess: {1}to dn.base=""
    5.   by * read
    6. olcAccess: {2}to *
    7.   by * read
  3. デーモンを停止させ、一度データベースを削除してから再度起動させます。
    $ sudo /etc/init.d/slapd stop
    Stopping OpenLDAP: slapd.
    $ sudo rm /var/lib/ldap/*
    $ sudo /etc/init.d/slapd start
    Starting OpenLDAP: slapd.
  4. データベースが複製されているか確認します。
    $ ldapsearch -x -LLL
    dn: dc=grid,dc=example,dc=com
    objectClass: top
    objectClass: dcObject
    objectClass: organization
    o: grid
    dc: grid
    
    dn: cn=admin,dc=grid,dc=example,dc=com
    objectClass: simpleSecurityObject
    objectClass: organizationalRole
    cn: admin
    description: LDAP administrator
    
    dn: ou=people,dc=grid,dc=example,dc=com
    ou: people
    objectClass: organizationalUnit
    
    dn: ou=groups,dc=grid,dc=example,dc=com
    ou: groups
    objectClass: organizationalUnit
    
    dn: cn=hadoop,ou=groups,dc=grid,dc=example,dc=com
    cn: hadoop
    gidNumber: 4500
    objectClass: top
    objectClass: posixGroup
    memberUid: hdfs
    memberUid: mapred
    ...

コンシューマにおける更新の委託(updateref, update referrals)

  1. コンシューマのデータベースは参照専用ですので、クライアントからの更新リクエストに対してはエラーとともにプロバイダのURIを返すよう(更新の委託)に設定する必要があります。なお、この応答をうけてクライアントが自動でプロバイダにリクエストを転送するかはクライアントの実装によります。
    $ sudo ldapmodify -QY EXTERNAL -H ldapi:/// -f 03_4cons_olc-mod-01referrals.ldif
    modifying entry "olcDatabase={1}hdb,cn=config"
    • 03_4cons_olc-mod-01referrals.ldif
      1. # on Consumer
      2. # 1.
      3. dn: olcDatabase={1}hdb,cn=config
      4. changetype: modify
      5. add: olcUpdateref
      6. olcUpdateref: "ldap://ldap.grid.example.com:389/"

コンシューマによる更新プロキシ(chain)

  • これは、更新の委託応答に対応していないクライアントのために、コンシューマ自身が更新リクエストをプロバイダにプロキシする機能です。
  • HadoopクラスタにおいてLDAPを認可バックエンドとして利用する場合には、通常ユーザがコンシューマに対して更新リクエストを行うことはまずありませんのでこのセットアップは必須ではありません。
  1. note.pngdebian.pngDebianのOpenLDAP 2.4.23にはバグが存在し、更新プロキシ(chain)を有効にするとデーモンを起動できなくなります。この機能を利用するためには、まずソースに修正パッチを適用しDebianパッケージをビルドし、それをインストールする必要があります。詳細は、OpenLDAP-bug6540をご参照ください。
  2. コンシューマでchainオーバレイを設定します。
    $ sudo ldapmodify -QY EXTERNAL -H ldapi:/// -f 04_4cons_olc-mod-02chain.ldif
    modifying entry "cn=module{0},cn=config"
    
    adding new entry "olcOverlay=chain,olcDatabase={-1}frontend,cn=config"
    
    adding new entry "olcDatabase=ldap,olcOverlay={0}chain,olcDatabase={-1}frontend,cn=config"
    • 04_4cons_olc-mod-02chain.ldif
      1. # on Consumer
      2. # 2.
      3. dn: cn=module{0},cn=config
      4. changetype: modify
      5. add: olcModuleLoad
      6. olcModuleLoad: {1}back_ldap
      7.  
      8. # 3.
      9. dn: olcOverlay=chain,olcDatabase={-1}frontend,cn=config
      10. changetype: add
      11. objectClass: olcOverlayConfig
      12. objectClass: olcChainConfig
      13. olcOverlay: {0}chain
      14. olcChainReturnError: TRUE
      15.  
      16. # 4.
      17. dn: olcDatabase=ldap,olcOverlay={0}chain,olcDatabase={-1}frontend,cn=config
      18. changetype: add
      19. objectClass: olcLDAPConfig
      20. objectClass: olcChainDatabase
      21. olcDatabase: {0}ldap
      22. olcDbURI: "ldap://ldap.grid.example.com:389/"
      23. olcDbRebindAsUser: TRUE
      24. olcDbIDAssertBind: bindmethod=simple
      25.   binddn="cn=ns01,dc=grid,dc=example,dc=com"
      26.   credentials=change_on_install
      27.   mode=self
  3. プロバイダでコンシューマの更新プロキシ動作を許可します。
    1. コンシューマについて、すべてのユーザまたadminユーザとしての権限認可を設定します。
      $ ldapmodify -xWD "cn=admin,dc=grid,dc=example,dc=com" -f 05_4prov_cons-authzto.ldif
      Enter LDAP Password:
      modifying entry "cn=ns01,dc=grid,dc=example,dc=com"
      • 05_4prov_cons-authzto.ldif
        1. # on Provider
        2. dn: cn=ns01,dc=grid,dc=example,dc=com
        3. changetype: modify
        4. add: authzTo
        5. authzTo: {0}dn.regex:^uid=[^,]+,ou=people,dc=grid,dc=example,dc=com$
        6. authzTo: {1}dn.exact:cn=admin,dc=grid,dc=example,dc=com
    2. 権限認可ポリシーに to を追加します。
      $ sudo ldapmodify -QY EXTERNAL -H ldapi:/// -f 06_4prov_olc-authzpolicy.ldif
      modifying entry "cn=config"
      • 06_4prov_olc-authzpolicy.ldif
        1. # on Provider
        2. dn: cn=config
        3. changetype: modify
        4. add: olcAuthzPolicy
        5. olcAuthzPolicy: to
  4. テスト
    1. コンシューマに対して更新をリクエストします。
      $ ldapmodify -xWD "cn=admin,dc=grid,dc=example,dc=com" -f 07_4cons_cons-desc4test.ldif
      Enter LDAP Password:
      modifying entry "cn=ns01,dc=grid,dc=example,dc=com"
      • 07_4cons_cons-desc4test.ldif
        1. # on Consumer
        2. dn: cn=ns01,dc=grid,dc=example,dc=com
        3. changetype: modify
        4. replace: description
        5. description: LDAP consumer
    2. 更新が反映していることを確認します。
      $ ldapsearch -x -LLL cn=ns01
      dn: cn=ns01,dc=grid,dc=example,dc=com
      objectClass: simpleSecurityObject
      objectClass: organizationalRole
      cn: ns01
      description: LDAP consumer

クライアント

Chefレシピ

参考までに、これらはここで説明している環境を構築するChefレシピ(ロール)になります。

クライアントコマンド

  1. クライアントで使用するコマンドなどをインストールします。
    1. debian.pngDebian
      $ sudo apt-get install ldap-utils
    2. centos.pngCentOS
      $ sudo yum install openldap-clients
  2. 設定ファイル(debian.png/etc/ldap/ldap.confcentos.png/etc/openldap/ldap.conf)を適切に編集します。
    1. BASE    dc=grid,dc=example,dc=com
    2. URI     ldap://ns01.grid.example.com/ ldap://ns02.grid.example.com/

NSS(Name Service Switch)

  • LDAPをバックエンドとするNSSライブラリには2種類あり、NSS LDAPD(nss-pam-ldapd)はNSS LDAP(nss_ldap)の改良版です。
  • Hadoopの各ノードからのルックアップは匿名(anonymous)アクセスで十分ですので、最終的にはStart TLSまたはldaps(TLS/SSL)を経たアクセスが推奨です。LDAPoverTLS/SSLもご参照ください。

NSS LDAPD(推奨debian.pnglibnss-ldapd、centos.pngnss-pam-ldapd)

  1. NSS LDAPD をインストールします。
    1. debian.pngDebian: ウィザードで /etc/nsswitch.conf の設定まで完了し、NSLCD(Name Service LDAP Connection Daemon)が起動します。細かく設定したい場合には、/etc/nslcd.conf を直接編集し、NSLCDを再起動します。
      $ sudo apt-get install --no-install-recommends libnss-ldapd nscd
       LDAP server URI: ldap://ns01.grid.example.com/ ldap://ns02.grid.example.com/
       LDAP server search base: dc=grid,dc=example,dc=com
       Name services to configure: group passwd
      ...
    2. centos.pngCentOS
      1. nss-pam-ldapd をインストールします。
        $ sudo yum install openldap-clients nss-pam-ldapd
      2. 設定ファイル(/etc/nslcd.conf)を編集します。
        1. uri ldap://ns01.grid.example.com/ ldap://ns02.grid.example.com/
        2. base dc=grid,dc=example,dc=com
        3. #ssl yes|no*|start_tls
        4. ssl no
      3. /etc/nsswitch.conf を編集して、LDAPも参照するようにします。
        passwd:         files ldap
        group:          files ldap
      4. NSLCD(Name Service LDAP Connection Daemon)とNSCDを起動させ、自動起動を有効にします。
        $ sudo service nslcd start
        $ sudo chkconfig nslcd on 
        $ sudo service nscd start
        $ sudo chkconfig nscd on 

NSS LDAP(debian.pnglibnss-ldap、centos.pngnss_ldap)

note.pngnss_ldapは、CentOS 6.2ではもう提供されていません。

  1. 各ノードでのユーザの権限認可のためNSS-LDAP(Name Service Switch LDAP) と NSCD(Name Service Cache Daemon) をインストールします。※LDAPでユーザ認証することはありませんので、PAM-LDAPはインストールしません。
    $ sudo apt-get install libnss-ldap nscd
     LDAP server URI: ldap://ns01.grid.example.com/ ldap://ns02.grid.example.com/
     Distinguished name of the search base: dc=grid,dc=example,dc=com
     LDAP version to use: 3
     LDAP account for root: cn=admin,dc=grid,dc=example,dc=com
     LDAP root account password: ※パスワードは入力しません。
  2. NSS-LDAP を再設定します。Hadoopの各ノードからは参照のみですので、サーバにはコンシューマをリストします。さらに細かい設定を行いたい場合には、/etc/libnss-ldap.conf や /etc/nscd.conf を直接編集します。
    $ sudo dpkg-reconfigure libnss-ldap
     LDAP server URI: ldap://ns01.grid.example.com/ ldap://ns02.grid.example.com/
     Distinguished name of the search base: dc=grid,dc=example,dc=com
     LDAP version to use: 3
     Does the LDAP database require login? No
     Special LDAP privileges for root? No
     Make the configuration file readable/writeable by its owner only? No
  3. /etc/nsswitch.conf を編集して、LDAPも参照するようにします。
    passwd:         compat ldap
    group:          compat ldap
  4. NSCDを再起動します。
    $ sudo /etc/init.d/nscd restart

セキュリティの強化

TLS/SSLの設定

  • セキュアHadoopではLDAPにユーザの認証情報を格納する必要はありませんが、それでもLDAPへのアクセス経路をセキュアにすることは重要です。
  • セットアップの詳細については、LDAPoverTLS/SSLをご参照ください。

Kerberos化

  • セキュアHadoop環境にはKerberosがすでにセットアップされていますので、LDAPの認証環境をKerberosに統合(Kerberos化、kerberize)しようとすることは自然です。
  • セットアップの詳細については、LDAPwithKerberosをご参照ください。

メンテナンスまたはフェイルオーバー

プロバイダ

  1. VIPを、プロバイダに昇格するサーバ(バックアップまたはコンシューマのいずれか)に設定します。Kerberos化している場合には、keytabファイルなども配備します。
  2. ACL設定も含めて(もしあればレプリケータ用の設定を外し)プロバイダ用の設定を反映し、サーバを再起動させます。

コンシューマ

  1. 冗長化されていますので、任意のタイミングでメンテナンス可能です。
  2. 再セットアップする場合で、すでに運用データベースがある程度の大きさになっているときには、空のデータベースを対象にするよりも一度手動でプロバイダのデータベースをインポートしてからレプリケーションを開始する方が効率的です。

参考リソース

  1. RJ Systems. OpenLDAP provider on Debian squeeze
  2. RJ Systems. OpenLDAP client on Debian squeeze
  3. RJ Systems. OpenLDAP consumer on Debian squeeze
  4. OpenLDAP Software 2.4 Administrator's Guide, 10. Database Creation and Maintenance Tools
  5. Debian Wiki, LDAP NSS
  6. nss-pam-ldapd

添付ファイル: filebasic_tree.ldif 419件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-03-07 (火) 19:50:29 (1414d)