Mac 関係覚え書き

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

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

LDAP サーバ

登録データ登録

OU People

$ 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

$ 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'

登録情報の検索

一覧の表示

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 側

ディレクトリアクセスにて LDAPv3 を設定する.

「新規」で開くダイアログで,

で,「続ける」

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

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

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

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

テスト方法

ターミナルから以下のコマンドで LDAP サーバ(AD サーバ)に認証の確認を行う事が可能だ.

dirt -u ユーザID -p パスワード

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

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

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

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

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

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

パケットをキャプチャしてみる

Ethereal でパケットをキャプチャすると, LDAP プロトコルでのやり取りの中で

MsgId=2 Bind Request

のくだんから,認証時の様子がうかがえる.

1)

クライアント側から,まず

で Bind Request が出される.

2)

SASL 認証の結果が返ってくる. サーバ側で SASL の設定がされていないと,

SASL(-13): user not found: no secret in database

などといったエラーメッセージが表示される.

サーバ側で SASL の設定がされていると,

Result Code: success (0x00)

このあと,後述の Unbind Request がクライアントから出される.

3)

サーバ側で SASL の設定がされていないと, MsgId=3 で,クライアントから再度 Bind Request が出される. この時

である.

4)

認証の結果が返ってくる.

Result Code: success (0x00)

5)

MsgId=4 でクライアントから Unbind Requst が出される.

tcpdump でのキャプチャ

ちなみに,Ethereal には,tcpdump でキャプチャしたファイルを 食わせることができる.

/usr/sbin/tcpdump -s 0 -vv -w /tmp/hoge.tcpdump host 192.168.1.1

タイムアウトの不具合

ある環境で Sun Java Directory Server に接続し認証する際に, 認証は通るがかなり時間がかかるということがあった.

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

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

よくよく思い出してみると,以前にその ActiveDirectory に参加していたことがあり, Kerberos の設定が残ったままになっていた.

/Library/Preferences/edu.mit.Kerberos

を書き換え(削除)して動作は正常に戻った.


OpenLDAP 2.3 と Tiger の接続

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 の接続 不具合

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

一般ユーザでのシステム環境設定が予期しない理由で終了(異常終了する)

MT Lion にて,LDAP 環境にするとシステム環境設定のうち, 以下の項目が異常終了する.

対策としては 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
Last-modified: 2015-02-04 (水) 15:36:14