そろそろLDAPにしてみないか?

第14回 LDAPで管理するメールサーバ[連携設定編]

この記事を読むのに必要な時間:およそ 5 分

転送メールアドレスはどの属性に保存する?

前述のように,管理コンソールを使えば,携帯電話番号や住所のような値を直感的に簡単に登録することができるのですが,先ほどの画面の中には転送アドレスを登録できるような場所がありません。独自のスキーマを登録するか適当な属性で代用するか,どうしましょう…?

FDSにおけるスキーマファイルは/etc/dirsrv/schema以下にLDIF形式の形で保存されています。編集方法はオフライン,オンラインの2通りがあり,具体的にはプロセスを停止した状態でスキーマファイルを編集,プロセスを起動するオフライン方式と,プロセスを止めない状態でldapmodifyコマンドを使って新しいスキーマを直接登録するオンライン形式です。オンライン設定は管理コンソールから行うこともできます。

いずれかの方法を使って独自スキーマを登録したいところですが,ちょっと待ってください。実はFDSには各種メール用のスキーマが標準で登録されています。

これらは元々商用システムであったSun Java System Messaging Serverなどで用いられていた属性です。スキーマディレクトリの中にある50ns-mail.ldifを開いてみてください。その中にちょうど良さそうなmailForwardingAddressという属性が存在するではありませんか!

リスト1 50ns-mail.ldifの一部(わかりやすいよう改行を入れています)

attributeTypes: (
  2.16.840.1.113730.3.1.17
  NAME ( 'mailForwardingAddress' )
  DESC 'Netscape Messaging Server 4.x defined attribute'
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  X-ORIGIN 'Netscape Messaging Server 4.x'
) 

objectclasses: (
  2.16.840.113730.3.2.37
  NAME 'nsMessagingServerUser'
  DESC ''
  SUP top AUXILIARY MUST ( objectClass )
  MAY ( cn $ mailAccessDomain $ mailAutoReplyMode $ mailAutoReplyText $
        mailDeliveryOption $ mailForwardingAddress $ mailMessageSt ore $
        mailProgramDeliveryInfo $ mailQuota $ nsmsgDisallowAccess $
        nsmsgNumMsgQuota $ nswmExtendedUserPrefs $ vacationstart date $ vacationenddate ) 
  X-ORIGIN 'Netscape Messaging Server 4.x'
) 

このファイルはLDIF形式になっているものの,中身はOpenLDAPのスキーマと非常に似ていることがわかります。つまり,mailForwardingAddress属性を使うためにはnsMessagingServerUserというObjectClassを定義する必要があり,そのOIDは2.16.840.113730.3.2.37です。また,メールを保存するためユーザのホームディレクトリのパスも必要となりますので,こちらもスキーマファイルに登録済みであるmailMessageStore属性を流用させていただくことにしましょう。

注)
※homeDirectory属性を用いる方法もありますが,homeDirectory属性を使うためにはposixAccountオブジェクトクラスやuidNumber属性など,いろいろなMUST属性を登録しなければならないので面倒なのです。

したがって,先ほど管理コンソールを使って登録してしまったデータですが,実際には次のような内容になるべきです。

リスト2 メールユーザ用のLDIF

dn: uid=HNAKAMITSU,ou=Mail,dc=bluecoara, dc=net 
objectClass: top 
objectClass: person 
objectClass: organizationalPerson 
objectClass: inetorgperson 
objectClass: mailRecipient 
mail: hnakamitsu@bluecoara.net 
uid: HNAKAMITSU 
givenName: Hideo 
sn: NAKAMITSU 
cn: Hideo NAKAMITSU 
userPassword: {SSHA}tTyYPQIq9ZDzoCDnAiLZaXvs2zA3Cc0B 
mailForwardingAddress: forward@example.com
mailMessageStore: /home/mail/bluecoara.net/hnakamitsu

登録にはldapaddコマンドを使います。古い情報が保存されている場合は削除しておいてください。

図8 メールユーザの追加

% ldapdelete -x -D "cn=Directory Manager" -w dssecret "uid=HNAKAMITSU,ou=Mail,dc=bluecoara, dc=net " 
% ldapadd -x -D "cn=Directory Manager" -w dssecret -f hnakamitsu.ldif 

userPassword属性に用いる値ですが,OpenLDAP同様平文パスワードを登録することもできますし,slapasswdコマンドを用いたSSHA形式などの値を登録することも可能です。なお,管理コンソールを使った場合,標準のパスワードエンコーディングはSSHA形式となります。

単体テスト

ユーザの登録が完了しましたので,Postfix側の動作について改めて確認しておきましょう。Postfixがhnakamitsu@bluecoara.net宛のメールを受信する場合,PostfixプロセスはFDSに対し,"(mail=hnakamitsu@bluecoara.net)"のような検索フィルタを用いて検索を行い,そのユーザのmailMessageStore属性を取得する必要があります。

まずはPostfixを使用せず,この動作が可能かどうか確認しておきましょう。これが成功しないことにはPostfixでメールを配送することもできません。

図9 ldapsearchによる検索確認

% ldapsearch -x -b "dc=bluecoara,dc=net" "mail=hnakamitsu@bluecoara.net" "mailMessageStore" 
# HNAKAMITSU, Mail, bluecoara.net 
dn: uid=HNAKAMITSU,ou=Mail,dc=bluecoara, dc=net 
mailMessageStore: /home/mail/bluecoara.net/hnakamitsu

このように,とくにACL等を設定することなく匿名バインドで検索を行うことができるようです。

著者プロフィール

中満英生(なかみつひでお)

大学時代に出会ったSolarisがきっかけでUNIXの世界へ。その後ホスティングプロバイダ,データセンターで実務経験を積む傍ら,雑誌記事の執筆や技術セミナーの講師を務める。サーバ設定の他,セキュリティに関する著作や技術者エッセイも執筆経験あり。