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]を指定する.