OpenLDAP で構築した認証サーバへ Mac クライアントを接続する.
RHL7.3 での覚え書きも参照のこと. http://alfa.homelinux.org/%7Etanak0to/virtual/clipboard/unix/ldap.html
$ 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'
$ 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
ディレクトリアクセスにて LDAPv3 を設定する.
「新規」で開くダイアログで,
で,「続ける」
LDAP マッピングから「RFC 2307(UNIX)」を選択.
「編集」の「セキュリティ」タブで, クリアテキストパスワードを使用不可にするのチェックをはずす.
とりあえず,これだけでいけた.
属性のマッピングを変えるなら, 「編集」の「検索とマッピング」タブで割り当て可能.
ターミナルから以下のコマンドで LDAP サーバ(AD サーバ)に認証の確認を行う事が可能だ.
dirt -u ユーザID -p パスワード
また,"-a" オプションを使用する事によって認証方式を指定することもでき, "-v" オプションで多少詳細なログを表示させることができる. 詳細は man dirt .
ディレクトリアクセスの「LDAPv3」の設定項目で, 「セキュリティ」タブに 「クリアテキストパスワードを使用不可にする」 のチェックボックスがある.
OpenLDAP を認証サーバとする際, OpenLDAP サーバ側で SASL の設定をしていないと, このチェックボックスをオフにしておく必要がある.
つまり,認証はクリアテキストパスワードで行われ, SSL を利用していないとパスワードがネットワークに そのままの形で流れていることになる.
OpenLDAP で SASL を利用する設定方法については [フリーソフト/OpenLDAPサーバ構築]を参照のこと.
Ethereal でパケットをキャプチャすると, LDAP プロトコルでのやり取りの中で
MsgId=2 Bind Request
のくだんから,認証時の様子がうかがえる.
クライアント側から,まず
で Bind Request が出される.
SASL 認証の結果が返ってくる. サーバ側で SASL の設定がされていないと,
SASL(-13): user not found: no secret in database
などといったエラーメッセージが表示される.
サーバ側で SASL の設定がされていると,
Result Code: success (0x00)
このあと,後述の Unbind Request がクライアントから出される.
サーバ側で SASL の設定がされていないと, MsgId=3 で,クライアントから再度 Bind Request が出される. この時
である.
認証の結果が返ってくる.
Result Code: success (0x00)
MsgId=4 でクライアントから Unbind Requst が出される.
ちなみに,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 との認証接続で,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
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]を指定する.