ライン

ポイント:意外と普通に連携して動作しました

ライン

 はじめに

Windows 2012R2とCentOS 6.7で試す

 Linuxで準備したメールサーバで利用し、認証・アカウントは WindowsのActive Directory(AD)のユーザというケースで試します。
某所でそのようなシステムを作るのだろうな、と思いやってみました。

 Windows 2012R2

 今回も確認環境は、VMware ESXiの無償版/5.5系にWindowsの体験版を利用し、ADを準備しました。
この構築証跡も取得はしてありますが、本題とは外れるので割愛しました。

 CentOS 6.7

 某所では、RHEL。自宅にRHELのライセンスを保有していないので、試すのはCentOS。
ゲスト用のテンプレートで保有しているのですぐに準備できるので手軽でした。

 まず、ADとの連携をするために、パッケージを入れます。

# yum install samba-winbind-clients krb5-workstation
...
依存性を解決しました依存性を解決しました

==================================================================
パッケージ                         アーキテクチャ      バージョン                    リポジトリー          容量
==================================================================
インストールしています:
 krb5-workstation                   x86_64              1.10.3-57.el6                 base                 813 k
 samba-winbind-clients              x86_64              3.6.23-36.el6_8               updates              2.0 M
依存性関連でのインストールをします。:
 libtalloc                          x86_64              2.1.5-1.el6_7                 base                  26 k
 libtdb                             x86_64              1.3.8-3.el6_8.2               updates               40 k
 libtevent                          x86_64              0.9.26-2.el6_7                base                  29 k
 samba-common                       x86_64              3.6.23-36.el6_8               updates               10 M
 samba-winbind                      x86_64              3.6.23-36.el6_8               updates              2.2 M
依存性関連での更新をします。:
 krb5-libs                          x86_64              1.10.3-57.el6                 base                 770 k

トランザクションの要約
==================================================================
インストール         7 パッケージ
アップグレード       1 パッケージ

総ダウンロード容量: 16 M
これでいいですか? [y/N]

導入はこんな感じ。

設定ファイルを見てみる。

# cd /etc/samba/
# ll
合計 16
-rw-r--r-- 1 root root   20  8月 24 03:58 2016 lmhosts
-rw-r--r-- 1 root root 9778  8月 24 03:58 2016 smb.conf
# cp -p smb.conf smb.conf_orig

smb.confはコメント行がが多いけど。

[global]
        workgroup = MYGROUP
        server string = Samba Server Version %v
        log file = /var/log/samba/log.%m
        max log size = 50
        security = user
        passdb backend = tdbsam
        load printers = yes
        cups options = raw
[homes]
        comment = Home Directories
        browseable = no
        writable = yes
[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        guest ok = no
        writable = no
        printable = yes

これに、設定を加えてサービスを起動してみます。

[global]
        workgroup = EXAMPLE
        server string = Samba Server Version %v
        log file = /var/log/samba/log.%m
        max log size = 50
        security = ads
        realm = EXAMPLE.LOCAL
        password server = WINAD1.EXAMPLE.LOCAL
        winbind offline logon = true
        winbind use default domain = true
        idmap config * : range = 16777216-33554431
        template shell = /bin/bash
        obey pam restrictions = yes
[homes]
        comment = Home Directories
        browseable = no
        writable = yes

/etc/krb5.conf と nsswitch.conf を変更します。

# cp -p krb5.conf krb5.conf_orig
# cp -p nsswitch.conf nsswitch.conf_orig
# diff -urN krb5.conf_orig krb5.conf
--- krb5.conf_orig      2016-03-09 08:56:50.000000000 +0900
+++ krb5.conf   2016-12-31 12:49:33.579013679 +0900
@@ -4,7 +4,7 @@
  admin_server = FILE:/var/log/kadmind.log

 [libdefaults]
- default_realm = EXAMPLE.COM
+ default_realm = EXAMPLE.LOCAL
  dns_lookup_realm = false
  dns_lookup_kdc = false
  ticket_lifetime = 24h
@@ -12,11 +12,11 @@
  forwardable = true

 [realms]
- EXAMPLE.COM = {
-  kdc = kerberos.example.com
-  admin_server = kerberos.example.com
+ EXAMPLE.LOCAL = {
+  kdc = WINAD1.EXAMPLE.LOCAL
+  admin_server = WINAD1.EXAMPLE.LOCAL
  }

 [domain_realm]
- .example.com = EXAMPLE.COM
- example.com = EXAMPLE.COM
+ .example.local = EXAMPLE.LOCAL
+ example.local = EXAMPLE.LOCAL

# diff -urN nsswitch.conf_orig nsswitch.conf
--- nsswitch.conf_orig  2010-05-05 04:22:21.000000000 +0900
+++ nsswitch.conf       2016-12-31 12:51:24.358631139 +0900
@@ -30,9 +30,9 @@
 #shadow:    db files nisplus nis
 #group:     db files nisplus nis

-passwd:     files
-shadow:     files
-group:      files
+passwd:     files winbind
+shadow:     files winbind
+group:      files winbind

 #hosts:     db files nisplus nis dns
 hosts:      files dns

これで設定は完了。
ドメインの参加を実施してみます。

# kinit administrator@EXAMPLE.LOCAL
Password for administrator@EXAMPLE.LOCAL:********
# net ads join -S WINAD1.example.local -U administrator
Enter administrator's password:********
Using short domain name -- EXAMPLE
Joined 'MAIL-SERVER' to dns domain 'example.local'
No DNS domain configured for mail-server. Unable to perform DNS Update.
DNS update failed!

最後のメッセージはとりあえず無視で大丈夫そう。
サーバ側で動的な登録はしないように設定したし。でも、ユーザがDHCPな場合には登録させたいのかも。
とりあえず、本題からはずれる部分なのでパス。

# service winbind start
Winbind サービスを起動中:                                  [  OK  ]
# service winbind status
winbindd (pid  2137) を実行中...
# ps aux|grep winbind|grep -v grep
root      2137  0.0  0.1 189900  2776 ?        Ss   13:02   0:00 winbindd
root      2140  0.0  0.2 201544  4220 ?        S    13:02   0:00 winbindd

自動起動を投入しておきます。

# chkconfig --list|grep winbind
winbind         0:off   1:off   2:off   3:off   4:off   5:off   6:off
# chkconfig winbind on; chkconfig --list|grep winbind
winbind         0:off   1:off   2:on    3:on    4:on    5:on    6:off

連動の確認をします。

# wbinfo -t
checking the trust secret for domain EXAMPLE via RPC calls succeeded
# wbinfo -u
administrator
guest
krbtgt

良さそう。

SSHでログインするアカウントとして利用できることを確認したいので、続きを設定します。

# cd /etc/pam.d/
# ll
合計 96
-rw-r--r--. 1 root root 192 10月 15 19:38 2014 chfn
-rw-r--r--. 1 root root 192 10月 15 19:38 2014 chsh
-rw-r--r--. 1 root root 232 10月 15 16:26 2014 config-util
-rw-r--r--. 1 root root 293  3月 30 17:22 2015 crond
lrwxrwxrwx. 1 root root  19  2月  7 04:46 2016 fingerprint-auth -> fingerprint-auth-ac
-rw-r--r--. 1 root root 659  2月  7 04:46 2016 fingerprint-auth-ac
-rw-r--r--  1 root root  70  3月  9 08:56 2016 ksu
-rw-r--r--. 1 root root 728 10月 15 19:38 2014 login
-rw-r--r--. 1 root root 172  7月 24 18:46 2015 newrole
-rw-r--r--. 1 root root 154 10月 15 16:26 2014 other
-rw-r--r--. 1 root root 146  2月 22 20:48 2012 passwd
lrwxrwxrwx. 1 root root  16  2月  7 04:46 2016 password-auth -> password-auth-ac
-rw-r--r--. 1 root root 896  2月  7 04:46 2016 password-auth-ac
-rw-r--r--. 1 root root 613 10月 15 19:38 2014 remote
-rw-r--r--. 1 root root 167  7月 24 18:46 2015 run_init
-rw-r--r--. 1 root root 143  7月 17 00:02 2014 runuser
-rw-r--r--. 1 root root 105  7月 17 00:02 2014 runuser-l
lrwxrwxrwx. 1 root root  17  2月  7 04:46 2016 smartcard-auth -> smartcard-auth-ac
-rw-r--r--. 1 root root 711  2月  7 04:46 2016 smartcard-auth-ac
lrwxrwxrwx. 1 root root  25  2月  7 04:45 2016 smtp -> /etc/alternatives/mta-pam
-rw-r--r--. 1 root root  76  2月 20 19:07 2014 smtp.postfix
-rw-r--r--. 1 root root 341  7月 24 15:01 2015 ssh-keycat
-rw-r--r--. 1 root root 575  7月 24 15:01 2015 sshd
-rw-r--r--. 1 root root 486  2月  7 15:44 2016 su
-rw-r--r--. 1 root root 137  7月 17 00:02 2014 su-l
-rw-r--r--. 1 root root 202  7月 24 16:11 2015 sudo
-rw-r--r--. 1 root root 187  7月 24 16:11 2015 sudo-i
lrwxrwxrwx. 1 root root  14  2月  7 04:46 2016 system-auth -> system-auth-ac
-rw-r--r--. 1 root root 896  2月  7 04:46 2016 system-auth-ac
lrwxrwxrwx. 1 root root  49  2月  7 05:59 2016 vmtoolsd -> /usr/lib/vmware-tools/configurator/pam.d/vmtoolsd
# cp -p system-auth-ac system-auth-ac_orig
# cp -p password-auth-ac password-auth-ac_orig

参考にしたページのままですが、適用してみました。

# diff -urN system-auth-ac_orig system-auth-ac
--- system-auth-ac_orig 2016-02-07 04:46:28.823993608 +0900
+++ system-auth-ac      2016-12-31 13:23:48.278084772 +0900
@@ -4,18 +4,25 @@
 auth        required      pam_env.so
 auth        sufficient    pam_unix.so nullok try_first_pass
 auth        requisite     pam_succeed_if.so uid >= 500 quiet
+# 20161231 added 1 line
+auth        sufficient    pam_winbind.so cached_login use_first_pass
 auth        required      pam_deny.so

-account     required      pam_unix.so
+# 20161231 modified
+account     required      pam_unix.so broken_shadow
 account     sufficient    pam_localuser.so
 account     sufficient    pam_succeed_if.so uid < 500 quiet
 account     required      pam_permit.so

 password    requisite     pam_cracklib.so try_first_pass retry=3 type=
 password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
+# 20161231
+password    sufficient    pam_winbind.so cached_login use_authtok
 password    required      pam_deny.so

 session     optional      pam_keyinit.so revoke
 session     required      pam_limits.so
+# 20161231 added 1 line
+session     optional      pam_mkhomedir.so skel=/etc/skel umask=0022
 session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
 session     required      pam_unix.so
# diff -urN  password-auth-ac_orig password-auth-ac
--- password-auth-ac_orig       2016-02-07 04:46:28.829993608 +0900
+++ password-auth-ac    2016-12-31 13:28:16.526120717 +0900
@@ -4,18 +4,25 @@
 auth        required      pam_env.so
 auth        sufficient    pam_unix.so nullok try_first_pass
 auth        requisite     pam_succeed_if.so uid >= 500 quiet
+# 20161231
+auth        sufficient    pam_winbind.so cached_login use_first_pass
 auth        required      pam_deny.so

-account     required      pam_unix.so
+# 20161231
+account     required      pam_unix.so broken_shadow
 account     sufficient    pam_localuser.so
 account     sufficient    pam_succeed_if.so uid < 500 quiet
 account     required      pam_permit.so

 password    requisite     pam_cracklib.so try_first_pass retry=3 type=
 password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
+# 20161231
+password    sufficient    pam_winbind.so cached_login use_authtok
 password    required      pam_deny.so

 session     optional      pam_keyinit.so revoke
 session     required      pam_limits.so
+# 20161231
+session     optional      pam_mkhomedir.so skel=/etc/skel umask=0022
 session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
 session     required      pam_unix.so

ログインできることを確認します。

# ssh -l administrator 127.0.0.1
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
RSA key fingerprint is -.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts.
Password:
Creating directory '/home/EXAMPLE/administrator'.
$ id
uid=16777216(administrator) gid=16777216(domain users) 所属グループ=16777216(domain users),
16777217(group policy creator owners),16777218(domain admins),16777219(schema admins),
16777220(enterprise admins),16777221(denied rodc password replication group)

なるほど、いい感じ。

# cd /home/
$ ll
合計 8
drwxr-xr-x  4 root   root   4096 12月 31 13:40 2016 EXAMPLE
drwx------. 3 kimura kimura 4096  2月  7 15:39 2016 kimura
$ ll EXAMPLE/
合計 8
drwxr-xr-x 2 administrator   domain users 4096 12月 31 13:38 2016 administrator
drwxr-xr-x 2 fumihiko.kimura domain users 4096 12月 31 13:40 2016 fumihiko.kimura

ローカルのアカウントでも、ADのアカウントでもログインできることを確認できました。

 電子メール連携

 次は、メールの送受信を試します。
同じく、yukio_sumaderaさんのページに例がありますので、同様を確認することで大丈夫そうです。
ありがたや…。早速実施してみます。

# rpm -qa|grep postfix
postfix-2.6.6-6.el6_5.x86_64

Postfixは導入されていましたので設定から開始します。

# cd /etc/postfix/
# ll
合計 140
-rw-r--r--. 1 root root 19579  2月 20 19:07 2014 access
-rw-r--r--. 1 root root 11681  2月 20 19:07 2014 canonical
-rw-r--r--. 1 root root  9904  2月 20 19:07 2014 generic
-rw-r--r--. 1 root root 18287  2月 20 19:07 2014 header_checks
-rw-r--r--. 1 root root 27014  2月 20 19:07 2014 main.cf
-rw-r--r--. 1 root root  5113  2月 20 19:07 2014 master.cf
-rw-r--r--. 1 root root  6816  2月 20 19:07 2014 relocated
-rw-r--r--. 1 root root 12500  2月 20 19:07 2014 transport
-rw-r--r--. 1 root root 12494  2月 20 19:07 2014 virtual
# cp -p main.cf main.cf_orig

設定を記述します。

# diff -urN main.cf_orig main.cf
--- main.cf_orig        2014-02-20 19:07:52.000000000 +0900
+++ main.cf     2016-12-31 14:12:50.154857718 +0900
@@ -74,6 +74,8 @@
 #
 #myhostname = host.domain.tld
 #myhostname = virtual.domain.tld
+# 20161231
+hostname = EXAMPLE.LOCAL

 # The mydomain parameter specifies the local internet domain name.
 # The default is to use $myhostname minus the first component.
@@ -81,6 +83,8 @@
 # parameters.
 #
 #mydomain = domain.tld
+# 20161231
+mydomain = EXAMPLE.LOCAL

 # SENDING MAIL
 #
@@ -97,6 +101,8 @@
 #
 #myorigin = $myhostname
 #myorigin = $mydomain
+# 20161231
+myorigin = $mydomain

 # RECEIVING MAIL

@@ -113,7 +119,10 @@
 #inet_interfaces = all
 #inet_interfaces = $myhostname
 #inet_interfaces = $myhostname, localhost
-inet_interfaces = localhost
+# 20161231
+##inet_interfaces = localhost
+inet_interfaces = all
+

 # Enable IPv4, and IPv6 if supported
 inet_protocols = all
@@ -161,10 +170,12 @@
 #
 # See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
 #
-mydestination = $myhostname, localhost.$mydomain, localhost
+##mydestination = $myhostname, localhost.$mydomain, localhost
 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
 #      mail.$mydomain, www.$mydomain, ftp.$mydomain
+# 20161231
+mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

 # REJECTING MAIL FOR UNKNOWN LOCAL USERS
 #
@@ -417,6 +428,8 @@
 #
 #home_mailbox = Mailbox
 #home_mailbox = Maildir/
+# 20161231
+home_mailbox = Maildir/

 # The mail_spool_directory parameter specifies the directory where
 # UNIX-style mailboxes are kept. The default setting depends on the

サービスを入れ直しします。

# service postfix restart
postfix を停止中:                                          [  OK  ]
postfix を起動中:                                          [  OK  ]

 次は、Dovecot2。
基本部分だけで十分なので、これまでのような設定は実装せずにいきます。

# yum install dovecot
...
依存性を解決しました

==================================================================
パッケージ                  アーキテクチャ         バージョン                        リポジトリー          容量
==================================================================
インストールしています:
 dovecot                     x86_64                 1:2.0.9-22.el6                    base                 1.9 M
依存性関連でのインストールをします。:
 portreserve                 x86_64                 0.0.4-11.el6                      base                  23 k

トランザクションの要約
==================================================================
インストール         2 パッケージ

総ダウンロード容量: 1.9 M
インストール済み容量: 5.8 M
これでいいですか? [y/N]

 設定ファイルを記載。

# cd /etc/dovecot/conf.d/
# ll
合計 104
-rw-r--r-- 1 root root  5157  6月 26 10:11 2010 10-auth.conf
-rw-r--r-- 1 root root  1691 12月 30 18:42 2010 10-director.conf
-rw-r--r-- 1 root root  2730  6月 26 10:11 2010 10-logging.conf
-rw-r--r-- 1 root root 14449  5月 11 03:56 2016 10-mail.conf
-rw-r--r-- 1 root root  2920 12月 30 18:42 2010 10-master.conf
-rw-r--r-- 1 root root  1794  5月 11 03:56 2016 10-ssl.conf
-rw-r--r-- 1 root root  1513 12月 30 18:42 2010 15-lda.conf
-rw-r--r-- 1 root root  2148 12月 30 18:42 2010 20-imap.conf
-rw-r--r-- 1 root root   469 12月 30 18:42 2010 20-lmtp.conf
-rw-r--r-- 1 root root  3532 12月 30 18:42 2010 20-pop3.conf
-rw-r--r-- 1 root root   676  6月 12 08:02 2010 90-acl.conf
-rw-r--r-- 1 root root   292  6月 12 08:02 2010 90-plugin.conf
-rw-r--r-- 1 root root  2251  6月 12 08:02 2010 90-quota.conf
-rw-r--r-- 1 root root   496  3月 26 00:04 2010 auth-checkpassword.conf.ext
-rw-r--r-- 1 root root   486  3月 26 00:04 2010 auth-deny.conf.ext
-rw-r--r-- 1 root root   802  3月 26 00:04 2010 auth-ldap.conf.ext
-rw-r--r-- 1 root root   558  3月 26 00:04 2010 auth-master.conf.ext
-rw-r--r-- 1 root root   329  3月 26 00:04 2010 auth-passwdfile.conf.ext
-rw-r--r-- 1 root root   785  3月 26 00:04 2010 auth-sql.conf.ext
-rw-r--r-- 1 root root   608  6月 12 08:02 2010 auth-static.conf.ext
-rw-r--r-- 1 root root  2106  3月 26 00:04 2010 auth-system.conf.ext
-rw-r--r-- 1 root root   302  3月 26 00:04 2010 auth-vpopmail.conf.ext

認証部分。毎度で差分のみで証跡残していますがこんな感じで。

# cp -p 10-auth.conf 10-auth.conf_orig
# diff -urN  10-auth.conf_orig  10-auth.conf
--- 10-auth.conf_orig   2010-06-26 10:11:29.000000000 +0900
+++ 10-auth.conf        2016-12-31 14:36:36.568669389 +0900
@@ -7,6 +7,8 @@
 # matches the local IP (ie. you're connecting from the same computer), the
 # connection is considered secure and plaintext authentication is allowed.
 #disable_plaintext_auth = yes
+# 20161231
+disable_plaintext_auth = no

 # Authentication cache size (e.g. 10M). 0 means it's disabled. Note that
 # bsdauth, PAM and vpopmail require cache_key to be set for caching to be used.
@@ -48,6 +50,8 @@
 # drop away the domain if it was given, or "%n-AT-%d" would change the '@' into
 # "-AT-". This translation is done after auth_username_translation changes.
 #auth_username_format =
+# 20161231
+auth_username_format = %n

 # If you want to allow master users to log in by specifying the master
 # username within the normal username string (ie. not using SASL mechanism's
@@ -75,9 +79,14 @@
 # Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon and
 # ntlm_auth helper. <doc/wiki/Authentication/Mechanisms/Winbind.txt>
 #auth_use_winbind = no
+# 20161231
+auth_use_winbind = yes

 # Path for Samba's ntlm_auth helper binary.
 #auth_winbind_helper_path = /usr/bin/ntlm_auth
+# 20161231
+auth_winbind_helper_path = /usr/bin/ntlm_auth
+

 # Time to delay before replying to failed authentications.
 #auth_failure_delay = 2 secs

同様に設定を加えます。

# cp -p 10-mail.conf 10-mail.conf_orig
# diff -urN 10-mail.conf_orig 10-mail.conf
--- 10-mail.conf_orig   2016-05-11 03:56:40.000000000 +0900
+++ 10-mail.conf        2016-12-31 14:50:28.509188755 +0900
@@ -28,6 +28,8 @@
 # <doc/wiki/MailLocation.txt>
 #
 #mail_location =
+# 20161231
+mail_location = maildir:~/Maildir

 # If you need to set multiple mailbox locations or want to change default
 # namespace settings, you can do it by defining namespace sections.

サービスを開始します。

# service dovecot start
Dovecot Imap を起動中:                                     [  OK  ]
# service dovecot status
dovecot (pid  2496) を実行中...

早速受信してみました。

Dec 31 14:51:22 mail-server dovecot: master: Dovecot v2.0.9 starting up (core dumps disabled)
Dec 31 14:56:17 mail-server dovecot: pop3-login: Login: user=<fumihiko.kimura>, method=PLAIN,
 rip=192.168.1.6, lip=192.168.1.2, mpid=2518
Dec 31 14:56:17 mail-server dovecot: pop3(fumihiko.kimura): Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0
Dec 31 14:56:17 mail-server dovecot: pop3-login: Login: user=<fumihiko.kimura>, method=PLAIN,
 rip=192.168.1.6, lip=192.168.1.2, mpid=2520
Dec 31 14:56:17 mail-server dovecot: pop3(fumihiko.kimura): Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0

メールの送信側も試しました。

Dec 31 15:04:33 mail-server postfix/pickup[2430]: 717D79FEC7: uid=0 from=<root>
Dec 31 15:04:33 mail-server postfix/cleanup[2545]: 717D79FEC7:
 message-id=<20161231060433.717D79FEC7@mail-server.EXAMPLE.LOCAL>
Dec 31 15:04:33 mail-server postfix/qmgr[2431]: 717D79FEC7: from=<root@EXAMPLE.LOCAL>, size=454, nrcpt=1 (queue active)
Dec 31 15:04:33 mail-server postfix/local[2547]: 717D79FEC7: to=<fumihiko.kimura@EXAMPLE.LOCAL>,
 orig_to=<fumihiko.kimura>, relay=local, delay=0.03, delays=0.02/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)
Dec 31 15:04:33 mail-server postfix/qmgr[2431]: 717D79FEC7: removed

送受信とも問題なしでした。
ローカルアカウントとドメインアカウントが同じだった場合にはどんな扱いになるのかや、AD上既に無効になっている場合の動きなどは未確認。
環境が動作するうちに確認したく思っています。

【改訂履歴】作成:2016/12/30 更新:2016/12/31

【参考リンク】

ActiveDirectoryと連携してLinuxサーバへSSH接続
ActiveDirectoryと連携したメールサービス(Postfix + Dovecot)を設定
 …ほぼ同内容で動作を確認させていただきました

CentOS(Linux)でドメインに参加する [ へっぽこSEのメモ帳 ]
LinuxマシンをActive Directoryに参加させる簡単な方法 いろんなサーバー設定研究所
 …参考にさせていただきました

Copyright © 1996,1997-2006,2007- by F.Kimura,