2018/05/29 CentOS6.6





ActiveDirectoryと連携するメールサーバ(MailDir)

LinuxのメールアカウントをActiveDirectoryで管理する方式です。

1.メールサーバのアカウントをAD上のユーザーと連携できる
2.メールのパスワードをActiveDirectoryで統一管理。

などが主なメリットです。
複雑なことに思えますが、やっていることはシンプルで、Linuxのユーザー認証のときローカルユーザーに加えて、ActiveDirectory上もチェックする。ということです。

認証の仕組み


必要なものは3つ。
 ・構築済みのActiveDirectory
 ・意図した通りに動作するメールサーバ (SMTP・POP)
 ・Sambaに含まれているWinbind

MailDir形式はMBox形式に比べて簡単です。

他の調整については別ページにて解説しています。



1.メールサーバの構築 (MailDir形式)
#yum install postfix  (デフォルトで入っている)
#yum install dovecot



/etc/postfix/main.conf の編集

mydestination = $myhostname, localhost.$mydomain, example.local (追加)
inet_interfaces = all
inet_protocols = ipv4
mynetworks = localhost
#home_mailbox = MailBox (コメントアウト確認)
mail_spool_directory = /var/mail/  末尾へスラッシュを加えてMailDir形式へ設定


/etc/dovecot/dovecot.conf の編集

 listen = *       :: を削除して*だけに変更
 protocols = pop3       imap lmtpを削除してpop3だけに


/etc/dovecot/conf.d/10-auth.conf の編集

  disable_plaintext_auth = no


/etc/dovecot/conf.d/10-mail.conf の編集

 mail_location = maildir:/var/mail/%u


/etc/dovecot/conf.d/10-ssl.conf の編集


 #ssl = required    #コメントアウト




ディレクトリが自動作成できるよう、メールディレクトリの実体へ書き込み権を追加
(/var/mailはシンボリックリンクのため、パーミッションは設定できない)

#chmod o+w /var/spool/mail



サービスを再起動します。

#service postfix restart
#service dovecot restart
#chkconfig postfix on
#chkconfig dovecot on

テストユーザーを作成し、試験します。

#useradd -s /sbin/nologin user1
#passwd user1

仮メールを1通送っておきます。でないとPOPで失敗します。

#mail -s TestMail user1@example.local
test (本文入力)
.      (ドットで終了)


この時点でメールクライアントを接続し、user1@example.localへメールが送受信できるか確認します。
 1.サービスが正常に起動していない
 2.ファイアウォールが閉まってる
 3.テストメール送信に失敗して、まだメールが1通もない


2.AcitveDirectoryへ参加する
ActiveDirectoryに参加するためにはsambaが必要です。今回の環境ならsamba3で可能です。

#yum install samba


DNSがActiveDirectoryのドメインコントローラを向いている必要があります。
コマンドで、現在のDNSがどこに向いているかを確認します。

#cat /etc/resolv.conf



/etc/samba/smb.conf の編集

[global]
netbios name = mailsv
#security = user    #コメントアウト
security = ads
workgroup = EXAMPLE
realm = EXAMPLE.LOCAL         #注意。ここは大文字で指定


ドメイン参加

#net ads join -U administrator

ADの管理者パスワードを入力し、AD上にコンピュータアカウントが生成されていれば成功です。



以下のメッセージも成功です。
 Joined 'MAILSV' to dns domain 'example.local'
 No DNS domain configured for mailsv. Unable to perform DNS Update.
 DNS update failed!
AD側のDNSのアップデートが失敗しているので、netbios nameと同じ名前をADのDNSのAレコードに追加しておきます。


3.Linuxの認証をActiveDirectoryと連携させる
/etc/nsswitch.conf の編集

password: files winbind
shadow:  files winbind
group:      files winbind

filesの後にwinbindを続けることで、ローカル認証→次にWinbind経由のAD認証となります。


/etc/samba/smb.conf の編集

[global]
security = ads
netbios name = mailsv
workgroup = EXAMPLE
realm = EXAMPLE.LOCAL
idmap config * : backend = tdb
idmap config * : range=10000-20000
winbind use default domain = yes


/etc/krb5.conf の編集

[libdefaults]   
  default_realm = EXAMPLE.LOCAL   
[realms]   
 EXAMPLE.LOCAL = {    
    kdc=dc1.example.local  #ドメインコントローラのFQDN
    kdc=dc2.example.local  #追加のドメインコントローラのFQDN  
    admin_server = dc1.example.local  #ドメインコントローラのFQDN
}   
[domain_realm]
  .example.local = EXAMPLE.LOCAL  #大文字で設定
  example.local = EXAMPLE.LOCAL   



PostfixやSSHなどsamba以外からWinbindを利用可能にするためにはpamの設定が必要です。
/etc/pam.d/system-authファイルをコマンドで設定変更する。

#authconfig --enablewinbindauth --update


設定が完了したら、連携できるようWinbindを起動。(authconfig実行時にwinbindは起動されますが)
ActiveDirectoryと連携するだけならsambaのその他サービス(smb、samba、nmbd)は起動する必要ありません。

#service winbind start
#chkconfig winbind on



試験


いくつかのコマンドで、ユーザー情報をADから正しく取得できるかを試します。

#wbinfo -p  Winbindの起動確認
#wbinfo -t  ドメイン接続
#wbinfo -u  ADから全てのユーザーを取得する
#wbinfo -g    ADから全てのグループを取得する

#getent passwd 'example\winuser1'  シングルクォーテーションなことに注意

getentはユーザーのマッピング情報をpasswd形式で表示します。
ここでエラーが出るのなら、nsswitch.confやsmb.confのwinbind系の設定値がミスってます。
getentを使用して成功した場合はユーザーがログインしたものとみなされます。
Linuxが払いだすマッピング用のSID(ここでは10000から20000の間)が1つ消費され、SIDとUIDのマッピング情報がTDBへ書き込まれます。

マッピング用TDB (/var/lib/samba/winbindd_idmap.tdb) は、WindowsのSIDとLinuxのUIDを関連付けたものです。
マッピング用TDBの中身を確認するには
#net idmap dump
とします。

マッピング用TDBからマッピングエントリを削除する場合は
表示されたWindowsのSIDを使ってdeleteコマンドを使用します。

#net idmap delete S-1-5-21-2659596216-558067740-645703359-10103


次に、ADに対してユーザーのパスワード認証が正しくできるかを確認します。

#wbinfo -a Administrator%P@sswd   パスワードの認証テスト。%は区切り文字
#kinit winuser1@EXAMPLE.LOCAL    レルムは大文字で指定。チケットの発行テスト

kinitはケルベロスチケットの取得を行います。
kinitはパスワード入力に成功すると、なんのメッセージも表示されません。
認証が成功しない場合、以下のようなメッセージが表示されます。
エラー kinit: Cannot find KDC for requested realm while getting initial credentials
エラーの場合はkrb5.conf の設定内容をチェックをします。大文字小文字、つづり間違いが考えられます。


4.ActiveDirectory上のユーザー名でメールを送る
ActiveDirectory上に存在するユーザー名をメールアドレスにして(例えば winuser1@example.local)、メールサーバへ送信します。
正しく着信し、winuser1のパスワードでメールが取り出せれば成功です。


5.AD連携のサーバに調整を加える
他の調整については別ページにて解説しています。










prev.gif