RIGHT:[[Mac 関係覚え書き]]

OpenLDAP で構築した認証サーバへ
Mac クライアントを接続する.

RHL7.3 での覚え書きも参照のこと.
http://alfa.homelinux.org/%7Etanak0to/virtual/clipboard/unix/ldap.html

*LDAP サーバ [#qd433673]
-Debian Sarge にて構築.
インストール時の設定(debconf)で大まかなところは設定される.
管理者ユーザ(admin)のパスワードがどうやって設定されているのか
だけ,よくわからない.
よくある本だと,slapd.conf 内に,rootdn, rootpw を
設定するようになっているが,それがなくてもできるみたい.
(->DB に入ってしまっている?,ある意味,忘れてしまったら終わり?)



*登録データ登録 [#e0c0f972]
**OU People [#u81b4e5d]
 $ cat People.ldif
 dn: ou=People,dc=ldap,dc=example,dc=jp
 ou: People
 objectclass: organizationalUnit

 $ ldapadd -x -W -D 'cn=admin,dc=ldap,dc=example,dc=jp' ?
 -f People.ldif
 Enter LDAP Password:
 adding new entry 'ou=People,dc=ldap,dc=example,dc=jp'

**ユーザ soka [#fbd9e6e8]
 $ cat usersoka.ldif
 dn: uid=soka,ou=People,dc=ldap,dc=example,dc=jp
 uid: soka
 objectClass: inetOrgPerson
 objectclass: posixAccount
 objectclass: shadowAccount
 uidNumber: 8000
 gidNumber: 8000
 gecos: Soka
 homeDirectory: /home/soka
 loginShell: /bin/bash
 cn: Soka
 sn: Soka
 userPassword: {CRYPT}8Ar6lc7Ew9j62
 shadowLastChange: 10963
 shadowMin: 0
 shadowMax: 99999
 shadowWarning: 7

 $ ldapadd -x -W -D 'cn=admin,dc=ldap,dc=example,dc=jp' ?
 -f usersoka.ldif
 Enter LDAP Password:
 adding new entry 'uid=soka,ou=People,dc=ldap,dc=example,dc=jp'

*登録情報の検索 [#i17a38b7]
一覧の表示
 ldapsearch -h localhost -x -b 'dc=ldap,dc=example,dc=jp' '*'

soka ユーザが自分の情報を検索(パスワードフィールドも見える)
 ldapsearch -h localhost -x -W -b 'dc=ldap,dc=example,dc=jp' ?
 -D "uid=soka,ou=People,dc=ldap,dc=example,dc=jp"  uid=soka



//-----------------
*Mac 側 [#qf84e76e]
ディレクトリアクセスにて LDAPv3 を設定する.

「新規」で開くダイアログで,
-サーバのアドレスを入力
-認証に使用にチェック
-コンタクトに使用にチェック

で,「続ける」

LDAP マッピングから「RFC 2307(UNIX)」を選択.

「編集」の「セキュリティ」タブで,
クリアテキストパスワードを使用不可にするのチェックをはずす.

とりあえず,これだけでいけた.


属性のマッピングを変えるなら,
「編集」の「検索とマッピング」タブで割り当て可能.

**テスト方法 [#b3575042]
ターミナルから以下のコマンドで
LDAP サーバ(AD サーバ)に認証の確認を行う事が可能だ.
 dirt -u ユーザID -p パスワード

また,"-a" オプションを使用する事によって認証方式を指定することもでき,
"-v" オプションで多少詳細なログを表示させることができる.
詳細は man dirt .


*Mac 側(クリアテキストパスワードを使わない) [#w7b3a273]

ディレクトリアクセスの「LDAPv3」の設定項目で,
「セキュリティ」タブに
「クリアテキストパスワードを使用不可にする」
のチェックボックスがある.


OpenLDAP を認証サーバとする際,
OpenLDAP サーバ側で SASL の設定をしていないと,
このチェックボックスをオフにしておく必要がある.

つまり,認証はクリアテキストパスワードで行われ,
SSL を利用していないとパスワードがネットワークに
そのままの形で流れていることになる.

OpenLDAP で SASL を利用する設定方法については
[フリーソフト/OpenLDAPサーバ構築]を参照のこと.

**パケットをキャプチャしてみる [#cef6ca0f]
Ethereal でパケットをキャプチャすると,
LDAP プロトコルでのやり取りの中で
 MsgId=2 Bind Request
のくだんから,認証時の様子がうかがえる.

***1) [#b5cbecbd]
クライアント側から,まず
-Auth Type: SASL
-Mechanism: CRAM-MD5

で Bind Request が出される.

***2) [#i9a6c258]
SASL 認証の結果が返ってくる.
サーバ側で SASL の設定がされていないと,
 SASL(-13): user not found: no secret in database
などといったエラーメッセージが表示される.

サーバ側で SASL の設定がされていると,
 Result Code: success (0x00)
このあと,後述の Unbind Request がクライアントから出される.

***3) [#n2149c87]
サーバ側で SASL の設定がされていないと,
MsgId=3 で,クライアントから再度 Bind Request が出される.
この時
-Auth Type: Simple
-Password: XXXXXX

である.

***4) [#obfe26e9]
認証の結果が返ってくる.
 Result Code: success (0x00)

***5) [#f7c14c38]
MsgId=4 でクライアントから Unbind Requst が出される.

***tcpdump でのキャプチャ [#wd6737ae]
ちなみに,Ethereal には,tcpdump でキャプチャしたファイルを
食わせることができる.
 /usr/sbin/tcpdump -s 0 -vv -w /tmp/hoge.tcpdump host 192.168.1.1

----
*タイムアウトの不具合 [#eaa4fd8d]
ある環境で Sun Java Directory Server に接続し認証する際に,
認証は通るがかなり時間がかかるということがあった.

調べてみると,認証の際になぜか 20秒のタイムアウトが 2回発生するようだった.

パッケットをダンプしてみると,
存在していない ActiveDirectory  のサーバへ Kerberos での認証を求めにいっているパッケットが
記録されていた.

よくよく思い出してみると,以前にその ActiveDirectory に参加していたことがあり,
Kerberos の設定が残ったままになっていた.
 /Library/Preferences/edu.mit.Kerberos
を書き換え(削除)して動作は正常に戻った.

----
*OpenLDAP 2.3 と Tiger の接続 [#f0a9930a]
OpenLDAP 2.3 と Tiger との認証接続で,Simple 認証を利用している場合,
LDAP での情報は引けるが,認証が通らないということが起こる.

これは,OpenLDAP の 2.2 や初期の OpenLDAP 2.3 ではうまくいっていたのに,
あるバージョンの OpenLDAP 2.3 にするとうまくいかなくなるようだ.

これは,初期の OpenLDAP の slapd のバグだったようで,
たまたま接続できていたといえるだろう.
(私の英語の読解力が間違っていなければ...)

解決するには,以下の 2つのどちらかを行う.

1) openldap を "--without-sasl" オプションをつけてコンパイル,
つまり sasl を使わないようにしてコンパイルする.

2) slapd.conf に次の一行を加える.
 sasl-secprops noplain,noanonymous,noactive

参考:
http://www.openldap.org/lists/openldap-software/200602/msg00250.html

----
*LDAP サーバ と Lion, MT Lion の接続 不具合 [#u5f98b19]
Tiger のときより現象は深刻で, ldapsearch でのLDAP での情報は引けるが,
ディレクトリユーティリティで設定したユーザ検索,認証が全く通らないということが起こる.

(Yosemite でも同様の現象が見られた.解決方法は同じ)

http://blog.smalleycreative.com/administration/fixing-openldap-authentication-on-os-x-lion/

を参考に

 % sudo -s
 # /usr/libexec/PlistBuddy -c "add ':module options:ldap:Denied SASL Methods:' string CRAM-MD5"  \
 /Library/Preferences/OpenDirectory/Configurations/LDAPv3/yourldapserver.plist
 # /usr/libexec/PlistBuddy -c "add ':module options:ldap:Denied SASL Methods:' string NTLM"  \
 /Library/Preferences/OpenDirectory/Configurations/LDAPv3/yourldapserver.plist
 # /usr/libexec/PlistBuddy -c "add ':module options:ldap:Denied SASL Methods:' string GSSAPI"  \
 /Library/Preferences/OpenDirectory/Configurations/LDAPv3/yourldapserver.plist

を実行して再起動すればよい.

というか,私は
 /Library/Preferences/OpenDirectory/Configurations/LDAPv3/yourldapserver.plist
を編集して
 <key>ldap</key>
 <dict>
     <key>Denied SASL Methods</key>
    <array>
           <string>DIGEST-MD5</string>
           <string>CRAM-MD5</string>       <--追加
           <string>NTLM</string>       <--追加
           <string>GSSAPI</string>       <--追加
    </array>
   ....

とした.

無効にするハッシュの種類は,以下のコマンドでサーバが対応しているSASLを取得して,
その値を除外すればよい.

 dapsearch -x -h yourldapserver -b "" -s base "(objectclass=*)" supportedSASLMechanisms

----
**一般ユーザでのシステム環境設定が予期しない理由で終了(異常終了する) [#j02b6a1b]
MT Lion にて,LDAP 環境にするとシステム環境設定のうち,
以下の項目が異常終了する.
-セキュリティとプライバシー
-ユーザとグループ
-iCloud

対策としては GeneratedUID 属性をマップするとよい.
https://discussions.apple.com/thread/4136922?start=0&tstart=0
より.

GeneratedUID は本来
 0AF98A95-2157-4D42-99A7-4DEB2A92A4C62
といった形のフォーマットだが,場当たり的に uidNumber を割り当てた.

とりあえず,これでうまくいっている.

「ディレクトリユーティリティ」の
[サービス]タブから[LDAPv3]を編集

該当する LDAP サーバを選択し,[編集]

[検索とマッピング]タブで
 >Users
を選択し,[追加]

 (o)属性のタイプ [v]すべてを表示

で,検索窓に GeneratedUID を入力し,追加する.
(Users 属性の配下に追加される.)

で,GeneratedUID のマッピング値として [uidNumber]を指定する.

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS