Upgrade to Pro — share decks privately, control downloads, hide ads and more …

できるLDAP(2013/09/27 社内勉強会)

Avatar for Takeru Ichii Takeru Ichii
September 27, 2013

できるLDAP(2013/09/27 社内勉強会)

Avatar for Takeru Ichii

Takeru Ichii

September 27, 2013
Tweet

Other Decks in Technology

Transcript

  1. こんなこといいな   できたらいいな •  一括してユーザー情報を管理 •  複数のサービスがひとつのユーザー情報を参照                ___________

      | ̄ ̄ ̄ ̄ ̄ ̄ ̄/ノ  ヽ、:\ >>1   | | ̄ ̄ ̄ ̄ ̄ /(•)  (•)::::\       | | LDAP / (__人__)⌒::::::::::::\     | |        |   |r┬-|   ::::::::::::::|   | |____  \__`ー'´  ::::::::::::::::/   └___/ ̄\/   ::::::::::::::::::::::::\   |\    |  /      :::::::::::::::::::::::::\   \ \  \__/     :::::::::::::::::::::::::::| これだ!!! 5
  2. 救世主  LDAP   Lightweight  Directory  Access  Protocol •  ディレクトリサービスにアクセスするためのプロトコル o 

    ディレクトリサービスとは、ユーザーやIT資源の情報を記録し、         検索するためのサービス •  現在はv3が規定されている(RFC2251) •  もちろんパスワードも記録可能(userPassword) •  というか、ユーザーや資源に関する情報は基本なんでも 記録可能。(スキーマの設定が必要) •  外部サービスがユーザー情報を検索して、認証に使うこ とができる。 6
  3. 要するにLDAPとは →プロフィールカードの集合である h5p://exeoparty.net/im_profile.jpg 識別名(dn) 属性 (a5ribute) LDAPでは識別名(dn)は階層構造で表される 例)  名=山田  太郎,

     市区町村=渋谷区,  都道府県=東京都,  国=日本国   その識別名をもつエントリがもつ情報 LDAPは識別名でエントリを 素早く検索し、属性を返すのが 重要なお仕事 例:婚活パーティーのカード 7
  4. エントリとは   そしてLDAPの階層構造 jp com Dev Aさん Bさん Cさん Mark

    Dさん Eさん … エントリ エントリ dn:  uid=E-­‐‑san,  ou=Mark,  dc=com,  dc=jp dc  :  ドメイン構成要素 ou  :  部署名 uid  :  user  ID dn:  dc=com,  dc=jp dn:  ou=Mark,  dc=com,  dc=jp 8
  5. LDAP  Srv. LDAPの構成 LDAP Interface DB Driver Backend DB 検索指示

    DBへの リクエスト Backend  DBに 対応したクエリ DB 検索結果 LDAP  Interface が処理できる形 LDAP形式 の検索結果 LDAP  Interface  は389/TCP(標準) 10
  6. DBはどんな感じ? •  標準的にはBerkeley DBを使用する。 •  皆さんおなじみのRDB(SQL)を使うことができる。 •  DBに格納できるデータはスキーマファイルに記述して あるobjectClassで定義される。 スキーマ?

    objectClass?      ____    ━┓    /      \   ┏┛   /  \   ,_\.  ・ /    (•)゛ (•) \ |  ∪   (__人__)    | /     ∩ノ ⊃  / (  \ / _ノ |  | .\ “  /__|  |   \ /___ / h5p://thinkit.co.jp/free/article/0706/15/1/ 11
  7. スキーマとは?   そしてobjectClass •  詳しい説明はRFC2251の3.2.1.Attributes of Entries参照 •  エントリが持てる属性の集合体であるobjectClassを  定義したのがスキーマ

    core.schema  (schema) person  (objectClass) 例: sn  (a5ribute)  :  姓 cn  (a5ribute)  :  名 userPassword  (a5ribute)  :   ユーザーパスワード (a5r) (a5r) organizationalPerson(objectClass) (a5r) (a5r) (a5r) h5p://www.turbolinux.co.jp/products/server/11s/user_guide/openldapdirtree.html 12
  8. LDIFとは   LDAP  data  interchange  format •  Backend DBの形式の一つ • 

    プレーンテキストで記述されるシンプルな形式 •  LDAPのBackend DBにエントリを取り込むときに   よく使われる •  書式の詳細はRFC2849を参照 13
  9. LDIFの例 objectclass  (  2.5.6.6  NAME  'person'    DESC  'RFC2256:  a

     person'    SUP  top  STRUCTURAL    MUST  (  sn  $  cn  )    MAY  (  userPassword  $  telephoneNumber  $  seeAlso  $  description  )  ) dn:  uid=taro_yamada,  dc=yamato,  dc=co,  dc=jp   changetype:  add   objectClass:  person   cn:  Taro   sn:  Yamada   mail:  [email protected]   userPassword:  password_hoge   core.schema  の  objectClass  ”person” LDIFはこう書く 必須項目 任意項目 cn,  snなどの意味はRFC2256を参照 14
  10.                     /;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;ヘ              

        小;:;:;:;:;:;:;:;:;:;:;:;:;:;:;::;:;:/ ̄ ̄ヽ;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;|                   ∨;:;:;:r、;:;:;:;:;:;:;:;:;:;/      ヽ;:;:;:;:;:;:;:;:;:;:;:;:;:|                  ヾミ |  `¨''ー-f´           L;:;:;:;:;:>ミ;;;:;:;:;:|                    `|       〃´       `ヽ::l r |;:;:;:;:|                        |    `ヽ  ム=ニ二o二フ    | |ソ |;:;:;:;:|                    ヽ弋二ニPY   `           ;; |;:;:;:/                         ヽ    | i              ト-へ/                           ヘ.     | i             l                       ヽ.  t___ ´           |                 _             ヽ  ー─一       / |  ンヘ    ─一yへ~/ー´/ イヽ-z=======ミ  ゙゙゙゙       /  レ':::::::::|      ./:::::/ (:::::/   /:::::::::::::::::::::::::::::::::::::|:ゝ、____. イ_,;r<´::::::::::::::::|ヽ、     └‐┘ └┘ /z───────-|:::::::::::::::::::::::::::::::::::::::::::::::::::::::ノ::::::                           ヽ::::::::::::::::::::::::::::::::::::::彡ヘ::::::::::::                          /`::ー───r一'''´   \:::::                          〉::::::::::::::::::::::::〈                 |               /::::::::::::::::::::::::::/                 |   、          /::::::::::::::::::::::::::/         ̄ ̄`ヽミ|   |ヘ      /::::::::::::::::::::::::::/                |    |::∧      /:::::::::::::::::::::::::/                |   |::::∧.    ↓::::::::::::::::::::::↓                     -=ミ                   〃):) ハ-― 、                  _{{:{:{/::≫'"´  ̄ ̄ ̄`ヽ、 _                  >ヘ.::.:_>'´ .::.::.::.::.:-―::=ミ  V/⌒\                /  .::./ .::.::.::./::.::.::.::.::    ⌒\                  {人 .::./ .::.::.::.::.::.::.::.::.:/::.::.:     .::.::.ヽ              /  .:ーァ .::.::.::.::/:/\/.::.::.::.::.    .::.::.::.::.:'.              /  .::.::./ .::.::.::.::/テ=ミ. |ヽ.::.::.::.::.  .::.::.::.::.::.::i              /'⌒7 .::.::.::  ::.::.::.::/ 乂..::::Ⅵ│.::.::.::.::.::/ :.::.::.::.::.::.ト: .               /.::.::.::.::| ::.:ハ.::.i   (_)´   |/|.:: /|.::.::.::.::.::.::.::.::}: .                 厶ィ.::.::.: | ::./  、|         |Ⅹ :i/::.::.::.::.::.::.ノ: : : .         ___  |::.::.::.八:{        ,  テ=ミ ∨.::.::.::/.::/\ : : : .      /⌒\  i{'⌒^レi/   :.   ト       ヾ..:::Ⅳ.::.::.::.::.::.::.::.::.::.:) : : : .    '⌒′   人. V⌒ ´     :.     ゝ      (.)厶イ::.::./.::.::.:/ : : : : : /  /      \}   __,, -―=ゝ ,,__({  _,,. <.::.::.::.::/.::.::.:/: : : : : : : :     r─       <  `''ー-=ニ二)::.::.::.::.::.::.::.::.::.::.::.::.::.::.::.:/: : : : : : : : : : /  }     ̄ ̄}    丶、       ̄¨V⌒乙/⌒}/⌒: : : : : : : : : : : :   /      〈         ̄ ̄ ̄ ̄`ヽ }: : : : : : : : : : : : : : : : : : : : : : : :  く __      \             ∨: : : : : : :  '^つ (ヽ: : : : : : : :           厂 ̄              } : : : : : /  ノ ̄ (二): : : : :       \/         }/     ∨: : : : /     ー`ァノ: : :                      /         〈: : :./     _,  ´: : : : : DBのデータが吹っ飛んだ…(アッカリーン こんなこともあろうかと LDAPのBackend  DBに冗長性を持たせておいた ※初代ヤマトじゃ「こんなことも〜」ってセリフは無いらしいですね 15
  11. LDAP  Srv. LDAP  Srv. DB分散化 •  大きくわけて2つ o  複製 Backend

    DB Backend DB 負荷分散  or  冗長化 似た例:RAID1 16
  12. LDAP  Srv. dc=yamato,  dc=jp DB分散化 •  大きくわけて2つ o  分割 • 

    その1 Backend  DB 管理の分散  or  セキュリティ向上  or  負荷分散 LDAP  Srv. dc=sd,  dc=yamato,  dc=jp Backend  DB LDAP  Srv. dc=da,  dc=yamato,  dc=jp Backend  DB 17
  13. LDAP  Srv. DB分散化 •  大きくわけて2つ o  分割 •  その2 Backend

     DB ユーザー頭文字:A-­‐‑H Backend  DB ユーザー頭文字:I-­‐‑Z 容量拡大  or  処理性能向上 18
  14. 通信フロー •  認証をするような場合を考える LDAP  Srv ユーザー情報A ユーザー情報B ユーザー情報C Redmine 入力:

    password -­‐‑wo]@0i password         ____         / _ノ  ヽ_ \      /。(⌒) (⌒)o\    / :::⌒(__人__) ⌒::: \     |     ヽr┬-ノ      |    ____________    \    `ー'′    ,/ ._i~~| | |             | __/          ‘\  |_ _| | |             | | | /   ,.              \n||  | |             | | | /   /         .r.  ( こ) | |             | | | | ⌒ ーnnn        |\ (⊆ソ .|_|__________|  ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二  _|_|__|_ tcpdumpやWiresharkで余裕で Pass見れるおwww 20
  15. 実際にキャプチャ 10:45:36.062466  IP  192.168.***.225.57759  >  192.168.***.224.ldap:     Flags  [P.],

     seq  1:91,  ack  1,  win  229,     options  [nop,nop,TS  val  2062252  ecr  2063846],  length  90        0x0000:    4500  008e  65d2  4000  4006  1186  c0a8  20e1    E...e.@.@.......      0x0010:    c0a8  20e0  e19f  0185  925f  127c  92d0  06d3    ........._.|....      0x0020:    8018  00e5  64b7  0000  0101  080a  001f  77ac    ....d.........w.      0x0030:    001f  7de6  3058  0201  0160  5302  0103  0444    ..}.0X...`S....D      0x0040:    7569  643d  7573  6572  5f73  616d  706c  652c    uid=user_sample,      0x0050:    6f75  3d50  656f  706c  652c  6f3d  5379  7374    ou=People,o=Syst      0x0060:    656d  2053  7570  706f  7274  2c64  633d  ****    em.Support,dc=**      0x0070:    ****  ****  ****  ****  2c64  633d  636f  2c64    ********,dc=co,d      0x0080:    633d  6a70  8008  7061  7373  776f  7264              c=jp..password Redmine(192.168.***.225)でLDAP(192.168.***.224)を使って認証した時のtcpdump userID:  user_sample,  パスワード:password 本当に平文で送信されていた… 21
  16. 通信は安全なの? •  実は安全じゃない o  LDAPサーバーが別のマシンでネットワークを通して通信する時、       パケットキャプチャすると平文で入力Passwordが流れている o  その返りもキャプチャされると、正しいパスワードがダダ漏れに。 •  どうする?

    o  ldapではなく、ldapsで通信すればおk! •  ldapsって何よ? o  LDAP over SSLのこと。これによって通信経路自体を暗号化することが可能 o  httpsみたいなもんです。 •  SASLでアプリケーションレベルの通信も暗号化できる h5p://www.atmarkit.co.jp/ait/articles/0901/21/news123_2.html 22
  17. まとめ •  管理一元化できるから、アカウント管理楽になるよ! •  DBも分散できるから何かあっても大丈夫! •  通信もちゃんと適切な設定すれば安全だよ!             __、      ,r´⌒ヽ,⌒ヽ,ヽ

       (⌒)、   .人  λ\、 ._____     \. \    、 ヽ./ ー  ー\      |\ \    ヽ./ ( •) ( •)      |  \  \ /     (__人__) \       |.   \   |       ` ⌒´    |   .   |.   |.\_ノ\             /   .   |.   |   |   \______/   .   |   )  .|     . . ̄ ̄   .   |   |  .|      |   |.|  .|   .   |  | .| .|      /  / / ヽ,     (__ノ  ヽ、__つ ご清聴ありがとうございました 23