システム奮闘記:その102
(2014年1月13日に掲載)
はじめに 今回はSamba4の導入経緯とインストール方法と そして簡単にAD(ActiveDirecoty)の説明を書く事にしました。 最初、Samba4をインストールした時は、2013年7月のため Samba-4.0.7のインストールの話になっています。 その後、この編集のために再現実験や検証のため Samba-4.1.3を触っています事から、両方のバージョンでの インストールの話を載せています。クライアントはHome版からProfessional版へ
ActiveDirectoryという言葉。 2000年、Microsoftカンファレンスのセミナーで知った。 NTドメインからActiveDirctoryに乗り換えの話が盛んに なりはじめた頃だった。 だが、2000年のマイクロソフトカンファレンスで セミナーを聞いてもチンプンカンプンだったため すっかり寝てしまっていたのだ。(今だから書ける話) Windowsサーバーを導入する予定はないし、当時は 断固としてWindows導入阻止! の立場だったので、ActiveDirectoryを勉強する気が起こらなかった。 それに勉強したくてもWindowsサーバーが触れる環境でもなかった。 2003年辺りになって、次の事を言われ始めた。 WindowsXPのPro版だとADが使える ADは組まないのですか? ActiveDirectoryと言われても、何なのかわからない。 それにHome版でなくPro版を使う利点が見えていなかったので 勤務先ではHome版しか購入していなかった。 WindowsXPで、Pro版を使う利点が見えない状態が続いたのだが 2009年、転機が訪れた。 シンクライアントの試験導入 だった。 仮想OSに使うWindowsXPがリモートデスクトップで 操作を行う必要性からPro版の必要性を感じた。
Home版とPro版の違い |
---|
ActiveDirectoryが使えるかどうか以外に リモートデスクトップが使えるかどうかもある。 だが、RealVNCを導入していたので遠隔操作には問題なかった。 だいぶ後になり、シンクライアントの試験導入の際 リモートデスクトップの重要性を知った。 詳しくは「システム奮闘記:その78」 (シンクライアントの試験導入)をご覧ください。 |
将来、シンクライアントを推進していく場合
Home版が邪魔になる。
そこで社内でパソコン購入規定を作成する際
Professional版は絶対条件
という文言をいれた。
VistaによるHome版撲滅の追い風 |
---|
WindowsVistaは重くて動きが悪い最悪のOSだ。 だが、Pro版に切り替えるのには追い風になった。 営業所のパソコンの遠隔操作にはRealVNCを使っていたのだが Vistaに入れてみた所、セキュリティー機能が働くため よく切断するため、使いものにならなくなった。 リモートデスクトップにならざるえなくなったので ある意味、Home版撲滅の理由には使えた。 |
NTドメイン構築
2006年、ニュースが飛び込んできた。 Samba4の開発開始 だった。 ITmedia (2006年01月27日)の記事。 「Active Directoryに対応した「Samba 4.0」プレビュー版公開」 ActiveDirectoryが無料で構築できる日は近いと思った。 だが、2006年にSamba4.0.0TP1が出たものの開発は 困難を極めていた。 Samba4を出るのを待ってNTドメイン構築を行わない方が良いか 一体、いつ出るのかわからないだけに、NTドメインを構築した方が良いのか 非常に迷う時期が続いた。 ついに痺れを切らした2011年、Samba4の完成を待たずに NTドメインを構築する事に踏み切った。
SambaでPDC構築の話について | |
---|---|
その91 | SambaでNTドメイン構築 |
その92 | SambaとOpenLDAPの連携でPDC構築 |
ところでActiveDirectoryだけでなく、NTドメインに参加させる場合も
クライアントはPro版でなければならない。
さて、2011年OSC東京・秋のSambaのセミナーで衝撃の話を聞いた。
Samba4はファイルサーバー機能がない
だった。
sambaなのにファイルサーバー機能がない。
日本Sambaユーザ会公開の資料
オープンソースカンファレンス2011 Tokyo/Springセミナー Samba最新動向&座談会
一体、どんな形になるのか不安と興味を覚えたのだが
見守るしかない私。
Samba4のファイルサーバー機能について |
---|
Samba4が正式リリースの際は無事、ファイルサーバー機能も 付いていた。大急ぎでSamba3のソースを流用したと思われる。 |
Samba4がいつ正式リリースされるのか、どんな形になるのか 首を長くして待っていると、2012年12月、正式リリースの ニュースが飛び込んできた。 Active Directoryサーバー機能搭載のOSS Samba 4.0リリース、Microsoftもテストに協力 なんと マイクロソフトが協力していた! だった。 オープンソースとマイクロソフト。 2000年頃は対立関係にあった。 特にザビエル頭のバルマーとやらは Linuxは癌 とホザいていた。
ザビエル頭のバルマー |
---|
だが、JWNTUGのOpenTalkで、マイクロソフト日本法人の人との話では
本音はオープンソースの人達との対立を避けたがっていた上
オープンソースに興味のある人もいたりした。(2002年頃の話)
その後、アメリカのマイクロソフト本社はオープンソースと
敵対しても得しない事から、歩み寄りをみせだした。
その動きになのか、日本ではマイクロソフトが
オープンソースカンファレンスに参加するようになった。
そしてオープンソースカンファレンス2012 Cloudでは
なんとマイクロソフト社で開催された!!
画期的というのか時代が変わったというのか。
マイクロソフトのクラウドガールとしてクラウディア姉さんが登場する。
2013年東京・春のオープンソースカンファレンスの懇親会。
クラウディア姉さん事、戸倉彩さんとツーショット。
クラウディア姉さん(戸倉彩さん)とツーショット |
---|
ルンルン気分の私。 そして日本人でSamba開発の中心メンバーの 高橋基信さんも右側に写っていた。 |
かつては反マイクロソフトを丸出しにしていた私なのだが 今ではすっかり マイクロソフトと融和 している感じだった。
ActiveDirectory
さて、Samba4が正式にリリースされるし、クラウディア姉さんこと 戸倉彩さんとのツーショットでご機嫌の私。 Samba4の準備のため、ActiveDirectoryの勉強をする事にした。 そこで以下のサイトを参考にする事にした。 にわか管理者のためのActive Directory入門 管理者のためのActive Directory入門:第5回 Active Directoryの導入準備(前編) (1/2) 読みはじめると、CALの略の意味が書いてある。 CALの意味なんて考えた事あらへん!! だった。 今まで、CALといえばクライアント接続許可で、 何台まで接続可能台数を表すのにCAL5台などは見ていたが Client Access Licenseの略 だというのは知らなかった。 サーバーからユーザー認証を受けた上でサーバー機能を利用できる クライアントの数がCAL数となる。 Windowsサーバーを使うと、CAL数が増えれば ライセンス費用も上昇するが、Sambaで構築すると 接続クライアント数に関わらず、無料で接続可能なのだ。ActiveDirectoeryの単位
NTドメインの場合、ドメインという領域が単位になっている。 ActiveDirectoryの場合、ドメインに加えてフォレストという単位がある。 ここで思った。 カタカナを使うな!! フォレストは「forest」なので「森」や「森林」の意味だ。 ドメインを木に見立てて、ドメインの集合体が「森」と表現しているようだ。 NTドメインの単位のドメインと、Activedirectoryの単位の ドメインとフォレストの比較を見てみた。
NTドメインの最小単位は「ドメイン」 |
---|
PDC(プライマリードメインコントローラー)があり それが同じドメイン内のパソコンの情報を管理している。 (ドメインの意味) ドメイン(Domain)は「領域」という意味がある。 そのため管理している範囲という意味で 「ドメイン」という言葉を当てているのだ。 |
ActiveDirectoryの場合は、ドメイン以外の単位を持っている
ActiveDirectoryの単位 |
---|
Activedirectoryの場合、親ドメインの下に子ドメインが ぶら下がる階層構造になっている。 ドメインという単位を見る場合もあれば 階層構造の全体を、フォレスト(森)という単位で見る場合もある。 |
NTドメインとActiveDirectoryの違い
まずは1人分の個人情報を格納できる量が異なる。
登録できる人数と格納できる1人あたりの情報量の比較 | |
---|---|
NTドメイン | 1人辺り1Kb分の情報量が割り当てられる。 NTドメインが格納できる個人情報量は 上限が40Mbなので、約4万人分の情報が格納できる。 |
AD |
1人あたり4Kbバイトなので、より多くの情報が格納できる。 そして仕様上、全体の上限が16Tbなので 日本人全員を軽く上回る人数分の情報が格納できる。 |
人数面で考えた場合、従業員数万人の大企業だとNTドメインでは ユーザー管理やパソコン管理ができないが、中小企業だと 十分すぎる程ある。 だが、1人当たりの情報量が4倍違うため ADの方がより多くの個人情報を格納できるので 企業規模に関らず、ADの方が便利というのだ。 マスターの複製もある。 SAMというデータベースの複製なのだが・・・ SAMって何やねん! という事で調べてみると Security Account Manager なのだ。
SAM(Security Account Manager)とは |
---|
WindowsNT/2000サーバーで各ユーザーの情報 すなわち、ファイルやフォルダーへのアクセス権限などの セキュリティー情報を管理するシステムの事だ。 そのデータベースの事を「SAM」と呼んでいる。 |
さて、NTドメインの場合、複製といったら下図の事を意味する
NTドメインの場合の複製 |
---|
主となるPDC(優先ドメインコントローラー)のデータベースを 予備のBDC(バックアップドメインコントローラー)に複製する事だ。 BDCからPDCへの複製はないのだ。 |
ActiveDirectoryの場合、以下のようになった。
Active Directoryの場合の複製 |
---|
片方のドメインコントローラーのデータベースが更新されると 整合性を保つため、複製される。 |
中小企業には、バックアップ用のドメインコントローラーは
必要はないが、頭に入れて置くのも良いと思う。
次にOUについて見てみた。
OUの意味はネットに書いてあった。
Organization Unit(組織単位)
の略だ。
同じドメイン内で組織別に区分けしているというのだ。
OU(組織単位)の概略 |
---|
組織別の括りを作って管理する方法だ。 10人くらいの会社なら組織別の括りは不要でも ある程度、大きな組織になると、組織別に括った方が ユーザー管理が行ないやすくなるのだ。 |
だが、もっと大きな組織になると、別の形で組織を分けた方が効率的だ。 そこで親ドメインの下に子ドメインをつける木構造が使われる。
ドメインの木構造の活用 |
---|
親ドメインを本社にして、子ドメインを営業所にする。 上図のように本社を親ドメインにして、神戸支店・大阪支店のように 区分けする事が可能なのだ。 親子ドメインの間には「信頼関係」というものがある。 |
ところで・・・
信頼関係とは何やねん?
という事で「信頼関係」が何なのか見てみる事にした。
Activedirectoryの信頼関係とは |
---|
KobeドメインがOsakaドメインを信頼する場合を考える。 この時、Kobeドメインから、Osakaドメインへ接続し Osakaドメインの利用者のアクセス権などが設定できる。 だが、反対にOsakaドメインからはKobeドメインの利用者の アクセス権などは触れない。 |
そこで相互にアクセス権の変更ができるようにするには 相互に信頼関係を構築すれば良いのだ。
相互に信頼関係とは |
---|
KobeドメインからOsakaドメインの利用者だけでなく OsakaドメインからKobeドメインの利用者のアクセス権の 設定が可能になる。 |
信頼関係がわかった所で、次に進む。 さて、もっと大きな組織になると、別々のドメインツリー(木構造)同士を 結びつける事ができる。
ドメインツリー同士を結びつける |
---|
系列子会社などをつなげる時などに使われるかもしれないし 大企業なら、事業部事にドメインを構築している場合が考えられるため 事業部ドメインの連携にも使われているかもしれない。 |
ここまで概略を見ていったが、いまいちピンと来ない。 自分で触ってみないと、実感として Active Directoryが何かわからへん! なのだ。 坐学だけでは理解は難しい。 だが、ActiveDirectoryを触りたくても、Samba4が公開されたばかりなので Samba4の書籍は出ていない上、ネット上にインストール方法などがなかった。 そこで思いついた。 Windowsの事は、Windowsから学ぶべし。 なので・・・ Windows2008R2の評価版をダウンロード なのだ。 そしてCDに焼いた後、Windows2008の評価版をインストールしたのだが 重たくて動かへん (TT) だった。 そのためActiveDictoryの勉強を諦めることにした。
Samba4のインストール
2013年7月、Samba4の事を思い出し、ネットで検索すると インストール方法などがネットで書かれていた。 そこでSamba4のインストールに挑戦してみる事にした。 以下の2つのサイトを参考にした。 Samba4でのActive Directory構築 RaspberryPi (Debian) にSAMBA4をインストールする(ActiveDirectoryのDCを構築する) Samba4 で Active Directory / インストール編 - わたしもやってみた Samba4のインストールに必要なライブラリまで書いているのが 非常に助かる。 そこでCentOS6.4上で、Samba4をソースコンパイルで インストールしてみる事にした。 まずは展開する。
展開を行なう |
---|
[root@samba4]# tar xvfz samba-4.0.7.tar.gz
samba-4.0.7/.testr.conf
samba-4.0.7/BUILD_SYSTEMS.txt
samba-4.0.7/COPYING
(途中、省略)
samba-4.0.7/source3/include/autoconf/README
samba-4.0.7/examples/VFS/configure
samba-4.0.7/examples/VFS/module_config.h.in
[root@samba4]#
[root@samba4]# cd samba-4.0.7
[root@samba4]#
|
この時のSambaの最新版は4.0.7でした。 |
だが、CentOS6.4のインストールの際、Samba4に必要な 各種パッケージソフトを、きちんとインストールしていないとエラーが出る。 そのためconfigureを行なう際に、こんなエラーが出たりする。
gccの開発環境が入っていない |
---|
[root@samba4]# ./configure --enable-debug --enable-selftest ./buildtools/wafsamba/samba_utils.py:397: DeprecationWarning: the md5 module is deprecated; use hashlib instead import md5 Checking for program gcc or cc : not found Checking for program icc : not found Checking for program ICL : not found Checking for program cc : not found /usr/local/src/samba-4.0.7/lib/replace/../../buildtools/wafsamba/wscript:210: error: could not configure a c compiler! [root@samba4]# |
「そんなアホな! gccは初期状態でインストールされて当然やろ」 と思いたくなるエラーなのだが、CentOS6.4のインストールの際 開発環境をインストールしなければ、こんな事になる。 |
そのためRPMを使って、gccやglibのインストールが必要になる。
glibc周辺の開発環境のインストール |
---|
[root@samba4]# rpm -ihv glibc-devel-2.12-1.107.el6.i686.rpm 警告: glibc-devel-2.12-1.107.el6.i686.rpm: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY エラー: 依存性の欠如: glibc-headers は glibc-devel-2.12-1.107.el6.i686 に必要とされています glibc-headers = 2.12-1.107.el6 は glibc-devel-2.12-1.107.el6.i686 に必要とされています [root@samba4]# rpm -ihv glibc-headers-2.12-1.107.el6.i686.rpm 警告: glibc-headers-2.12-1.107.el6.i686.rpm: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY 準備中... ########################################### [100%] 1:glibc-headers ########################################### [100%] [root@samba4]# rpm -ihv glibc-devel-2.12-1.107.el6.i686.rpm 警告: glibc-devel-2.12-1.107.el6.i686.rpm: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY 準備中... ########################################### [100%] 1:glibc-devel ########################################### [100%] [root@samba4]# |
RPMの場合、ライブラリ依存性を確認するため インストールの際に必要な物がなければ検出してくれる。(赤い部分) そこで青い部分のヘッダーをインストールしてから 再度、インストールのやりなおしを行なっている(桃色の部分) |
次にgccをインストールする。
gccのインストール |
---|
[root@samba4]# rpm -ihv gcc-4.4.7-3.el6.i686.rpm 警告: gcc-4.4.7-3.el6.i686.rpm: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY エラー: 依存性の欠如: cloog-ppl >= 0.15 は gcc-4.4.7-3.el6.i686 に必要とされています [root@samba4]# rpm -ihv cloog-ppl-0.15.7-1.2.el6.i686.rpm 警告: cloog-ppl-0.15.7-1.2.el6.i686.rpm: ヘッダ V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY エラー: 依存性の欠如: libppl.so.7 は cloog-ppl-0.15.7-1.2.el6.i686 に必要とされています libppl_c.so.2 は cloog-ppl-0.15.7-1.2.el6.i686 に必要とされています [root@samba4]# |
ここでも素直にインストールはさせてもらえそうにない。 そのため必要なライブラリをインストールしてから gccをインストールする。
gccのインストール |
---|
[root@samba4]# rpm -ihv ppl-0.10.2-11.el6.i686.rpm
警告: ppl-0.10.2-11.el6.i686.rpm: ヘッダ V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
準備中... ########################################### [100%]
1:ppl ########################################### [100%]
[root@samba4]# rpm -ihv cloog-ppl-0.15.7-1.2.el6.i686.rpm
警告: cloog-ppl-0.15.7-1.2.el6.i686.rpm: ヘッダ V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
準備中... ########################################### [100%]
1:cloog-ppl ########################################### [100%]
[root@samba4]# rpm -ihv gcc-4.4.7-3.el6.i686.rpm
警告: gcc-4.4.7-3.el6.i686.rpm: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
準備中... ########################################### [100%]
1:gcc ########################################### [100%]
[root@samba4]#
|
結構、手間だ。 そしてSamba4のインストールで、configureを行なった際 必要なライブラリがないため、警告が出る事がある。 だが、configureの処理は進むため、見落としがちになる。
Samba4のコンパイルで、configureの処理過程 |
---|
[root@samba4]# ./configure --enable-debug --enable-selftest (途中、省略) Checking whether ldap_set_rebind_proc takes 3 arguments : ok Active Directory support not available: LDAP support ist not available. Building without Active Directory support. Checking for pututline : ok |
処理過程の様子を見ると
ActiveDirectoryが構築できへん
というのだ。
OpenLDAP関係のライブラリがない事が原因だ。
そこで、OpenLDAP関係のライブラリのインストールを行なう。
OpenLdapのライブラリをインストール |
---|
[root@samba4]# rpm -ihv openldap-devel-2.4.23-31.el6.i686.rpm
警告: openldap-devel-2.4.23-31.el6.i686.rpm: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
エラー: 依存性の欠如:
cyrus-sasl-devel >= 2.1 は openldap-devel-2.4.23-31.el6.i686 に必要とされています
[root@samba4]#
|
ここでもエラーが出た。 でも、この程度では何とも思わない私。 ここでも必要なソフトのインストールを行なう。
OpenLDAPのライブラリのインストール (2) |
---|
[root@samba4]# rpm -ihv cyrus-sasl-devel-2.1.23-13.el6_3.1.i686.rpm 警告: cyrus-sasl-devel-2.1.23-13.el6_3.1.i686.rpm: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY 準備中... ########################################### [100%] 1:cyrus-sasl-devel ########################################### [100%] [root@samba4]# rpm -ihv openldap-devel-2.4.23-31.el6.i686.rpm 警告: openldap-devel-2.4.23-31.el6.i686.rpm: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY 準備中... ########################################### [100%] 1:openldap-devel ########################################### [100%] [root@samba4]# |
そして、Samba4のconfigureを行なう。
Samba4のconfigureの処理過程 |
---|
[root@samba4]# ./configure --enable-debug --enable-selftest (途中、省略) Checking for ldap_add_result_entry : ok Checking whether ldap_set_rebind_proc takes 3 arguments : ok Building with Active Directory support. Checking for pututline : ok |
OpenLDAPの依存性の部分で問題なく進んでいった。 configureが終わったので、次にmakeコマンドで コンパイルを行なう。
makeを行なう |
---|
[root@samba4]# make
WAF_MAKE=1 python ./buildtools/bin/waf build
Waf: Entering directory `/usr/local/src/samba-4.0.7/bin'
symlink: tevent.py -> python/tevent.py
(途中、省略)
[3796/3797] Parse::Pidl::NDR.3pm: pidl/lib/Parse/Pidl/NDR.pm -> bin/default/pidl/Parse::Pidl::NDR.3pm
[3797/3797] Parse::Pidl::Wireshark::NDR.3pm: pidl/lib/Parse/Pidl/Wireshark/NDR.pm -> bin/default/pidl/Parse::Pidl::Wireshark::NDR.3pm
Waf: Leaving directory `/usr/local/src/samba-4.0.7/bin'
'build' finished successfully (11m40.799s)
[root@samba4]#
|
コンパイルも問題なく終了したので、インストールを行なう。
インストール |
---|
[root@samba4]# make install
WAF_MAKE=1 python ./buildtools/bin/waf install
Waf: Entering directory `/usr/local/src/samba-4.0.7/bin'
* creating /usr/local/samba/etc
* creating /usr/local/samba/private
(途中、省略)
* installing bin/default/pidl/Parse::Pidl::Wireshark::NDR.3pm as /usr/local/samba/share/man/man3/Parse::Pidl::Wireshark::NDR.3pm
Waf: Leaving directory `/usr/local/src/samba-4.0.7/bin'
'install' finished successfully (3m30.522s)
[root@samba4]#
|
これでインストールは完了だ。
Samba4の内部の概略
Samba4は、どんな仕組みなのか、概略図を発見する。 CentOS6 Samba4の概要 これを見ても、ActiveDirectoryやWindowsサーバーの知識が 乏しいため、あまりピンと来なかったが、図を見て、多少は理解できた。 Samba4の仕組みだが、Samba3と変更点がある。 LDAPについて Samba3でNTドメインを組んだ時、ユーザー情報や NTドメインに参加するパソコンの情報を一括管理するため 外部のLDAPを活用していた。 以下のように、OpenLDAPを使って構築していたのだ。
samba3では外部のLDAPを活用 |
---|
OpenLDAPを活用して、ユーザー情報をSamba外部で保管する事ができる。 |
外部のLDAPサーバーを使う利点は、以下の点にあった。
Samba3とOpenLDAPによるユーザー情報の一元管理 |
---|
Windows関係はSamba3を経由してユーザー認証を行ない Linuxは直接、OpenLDAPに接続して、ユーザー認証を行なう。 |
Samba3とOpenLDAPについては「システム奮闘記:その92」をご覧ください。 PDC構築 Samba3 + OpenLDAP だが、Samba4では、ユーザー情報は、内部のLDAPを使う。
Samba4では内蔵のLDAPを使う |
---|
Samba4では内蔵のLDAPを使っている。 OpenLDAPといった外部のLDAPも使えるみたいだが その話は、今回は省略します。 |
DNSについて
そしてDNSだが、Samba3の時はDNSとは独立していた。
だが、Samba4ではDNSと連携している。
2通りの方法があるというのだ。
Samba4で内蔵DNSを使う場合 |
---|
Samba4で外部DNSを使う場合 |
だが、概略を見ても、必ずしも内容を理解しているとは限らない。 そのため、Samba4のDNS設定時に七転八倒した話を後述しています。WINSについて
マイクロソフトのネットワークではDNS以外にも NetBIOS名の名前解決手段として、WINSがあった。 だが、ActiveDirectoryでの名前解決は全てDNSが行なうため WINSは不要 になった。 「システム奮闘記:その28」でWINSの話を書いたのだが それが廃止になるので、過去の遺物になってしまう・・・。 (SambaでWINSとマスターブラウザ,PDC構築) だが、Samba4はWINSもサポートしているので、完全に無駄ではないが・・・Kerberos認証
Samba4では認証方法がKerberos認証が使われる。 Kerberosは「ケロベロス」と読む。 ケロベロスとは ギリシャ神話に出てくる冥界の番犬 なのだ。 そこから派生して認証方法の名前になった。 ちなみに知ったかぶりではありません。 ギリシャ神話の話なら・・・ かじった程度は知っているのらー (^^)
冥府の神・ハデス話は面白い |
---|
ギリシャ神話では、天の神のゼウス。海の神のポセイドン。 そして冥府の神のハデスがいる。ハデスは略奪婚が有名だ。 農耕の神・デメテルの娘を略奪して結婚したため、デメテルは 自暴自棄になり職務放棄。そのため下界では農作物が育たなくなった。 そこで協議の結果、デメテルの娘は、1年のうち、一時期だけ ハデスの所に住む事になった。この時期、デメテルは職務放棄するため 作物が育たなくなる。これが冬になったという話だ。 ちなみに、デメテルを慰めようと、人間の女性がストリップをした。 古事記の天の岩戸伝説で、塞ぎ込んだ天照大神の関心を惹くため 女神によるストリップが行なわれたのだが、それと同じだ。 大昔は、女が女に裸を見せる娯楽があった! と思ってしまうのだ。 |
という感じで、どんどん脱線するので閑話休題。 ギリシャ神話のケロベロスは、聞きかじった程度は知っているのだが 実際に、Kerberos認証の話となれば・・・ 触った事がないのでチンプンカンプン なのだ。 この時は、Kerberos認証の事を調べずに先に進んだ。 詳しい事は後述しています。Samba4の設定
Samba4のインストールが無事終わった所で設定を行なう。 まずはsamba-toolコマンドを使って初期設定を行なう事にした。 DNSサーバーは、現在、稼働している物を使う事にした。
samba-toolコマンドを使って初期設定 |
---|
[root@samba4]# ./samba-tool domain provision
Realm [EXAMPLE.CO.JP]: example.co.jp
Domain [example]: example
Server Role (dc, member, standalone) [dc]: dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: 192.168.X.Y
|
ここではDNS情報を外部から取得するのか Samba4の内蔵DNSを使うのか、一切、DNSを使わないのかの選択だ。 だが、この時、DNSとSamba4の関連性を理解していなかったため どういうわけか、DNSサーバーのIPアドレスを入力してしまった。 Samba4とDNSの関連については後述しています。 |
だが、DNSの設定で、誤ってIPアドレスを入力しても、エラーがでなかった。
そして、パスワードの設定を行なった後、処理が進むのだが・・・
エラーが出るのら (TT)
だった。
samba-toolコマンドを使って初期設定 |
---|
[root@samba4]# ./samba-tool domain provision Realm [EXAMPLE.CO.JP]: example.co.jp Domain [example]: example Server Role (dc, member, standalone) [dc]: dc DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: 192.168.X.Y Administrator password: Retype password: Looking up IPv4 addresses Looking up IPv6 addresses No IPv6 address will be assigned Setting up secrets.ldb Setting up the registry Setting up the privileges database Setting up idmap db Setting up SAM db Setting up sam.ldb partitions and settings Setting up sam.ldb rootDSE Pre-loading the Samba 4 and AD schema Adding DomainDN: DC=example,DC=co,DC=jp Adding configuration container Setting up sam.ldb schema Setting up sam.ldb configuration data Setting up display specifiers Modifying display specifiers Adding users container Modifying users container Adding computers container Modifying computers container Setting up sam.ldb data Setting up well known security principals Setting up sam.ldb users and groups Setting up self join ERROR(exception): uncaught exception - Invalid dns backend: '192.168.X.Y' File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/__init__.py", line 175, in _run return self.run(*args, **kwargs) File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/domain.py", line 398, in run use_rfc2307=use_rfc2307, skip_sysvolacl=False) File "/usr/local/samba/lib/python2.6/site-packages/samba/provision/__init__.py", line 2145, in provision skip_sysvolacl=skip_sysvolacl) File "/usr/local/samba/lib/python2.6/site-packages/samba/provision/__init__.py", line 1788, in provision_fill targetdir=targetdir, site=DEFAULTSITE) File "/usr/local/samba/lib/python2.6/site-packages/samba/provision/sambadns.py", line 1006, in setup_ad_dns raise Exception("Invalid dns backend: %r" % dns_backend) [root@samba4]# |
なんでやね・・・ と思った。 そこでネットで書いている設定方法を見てみると DNSサーバーのIPアドレスを入力するのではなく 名前解決の手法をどうするかの設定である事に気づいた。 そこでやりなおしをしてみた。 それでも・・・ エラーが出る だった。
samba-toolコマンドを使って初期設定 |
---|
[root@samba4]# ./samba-tool domain provision
Realm [EXAMPLE.CO.JP]: example.co.jp
Domain [example]: example
Server Role (dc, member, standalone) [dc]: dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.X.Y]: 192.168.X.Y
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=example,DC=co,DC=jp
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
ERROR(ldb): uncaught exception - 0000052D: Constraint violation - check_password_restrictions: the password is too short. It should be equal or longer than 7 characters!
File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/__init__.py", line 175, in _run
return self.run(*args, **kwargs)
File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/domain.py", line 398, in run
use_rfc2307=use_rfc2307, skip_sysvolacl=False)
File "/usr/local/samba/lib/python2.6/site-packages/samba/provision/__init__.py", line 2145, in provision
skip_sysvolacl=skip_sysvolacl)
File "/usr/local/samba/lib/python2.6/site-packages/samba/provision/__init__.py", line 1747, in provision_fill
next_rid=next_rid, dc_rid=dc_rid)
File "/usr/local/samba/lib/python2.6/site-packages/samba/provision/__init__.py", line 1435, in fill_samdb
"KRBTGTPASS_B64": b64encode(krbtgtpass.encode('utf-16-le'))
File "/usr/local/samba/lib/python2.6/site-packages/samba/provision/common.py", line 50, in setup_add_ldif
ldb.add_ldif(data, controls)
File "/usr/local/samba/lib/python2.6/site-packages/samba/__init__.py", line 224, in add_ldif
self.add(msg, controls)
[root@samba4]#
|
エラー内容で青い部分を見るとパスワードが短すぎる事が指摘された。 |
要するに 7文字未満のパスワードは作れない のだ。 そのため、いくら私が「眞鍋かをり」を愛していても kaori というパスワードにしたくても、7文字に達しないため エラーが出る。 そこで別のパスワードを考えてみた。 眞鍋かをりも好きだが、本命の南沢奈央ちゃんの関する パスワードにしてみた。
samba-toolコマンドを使って初期設定 |
---|
[root@samba4]# ./samba-tool domain provision
Realm [EXAMPLE.CO.JP]: example.co.jp
Domain [example]: example
Server Role (dc, member, standalone) [dc]: dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.X.Y]: 192.168.X.Y
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=example,DC=co,DC=jp
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
ERROR(ldb): uncaught exception - 0000052D: Constraint violation - check_password_restrictions: the password does not meet the complexity criteria!
File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/__init__.py", line 175, in _run
return self.run(*args, **kwargs)
File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/domain.py", line 398, in run
use_rfc2307=use_rfc2307, skip_sysvolacl=False)
File "/usr/local/samba/lib/python2.6/site-packages/samba/provision/__init__.py", line 2145, in provision
skip_sysvolacl=skip_sysvolacl)
File "/usr/local/samba/lib/python2.6/site-packages/samba/provision/__init__.py", line 1747, in provision_fill
next_rid=next_rid, dc_rid=dc_rid)
File "/usr/local/samba/lib/python2.6/site-packages/samba/provision/__init__.py", line 1435, in fill_samdb
"KRBTGTPASS_B64": b64encode(krbtgtpass.encode('utf-16-le'))
File "/usr/local/samba/lib/python2.6/site-packages/samba/provision/common.py", line 50, in setup_add_ldif
ldb.add_ldif(data, controls)
File "/usr/local/samba/lib/python2.6/site-packages/samba/__init__.py", line 224, in add_ldif
self.add(msg, controls)
[root@samba4]#
|
エラー内容で赤い部分を見るとパスワードが簡単すぎると指摘された。 |
7文字以上のパスワードでも 簡単すぎると受け付けてくれへん!! のだ。 そのため、いくら本命の南沢奈央ちゃんの minamizawa naochan-love だと完全にはねられる。 いくら好きな人の名前をパスワードにしても 私の愛情表現は却下されるのらー (TT) というわけで、複雑なパスワードを考える事にした。 そういえば、Windows2008R2の評価版をインストールした後、 administratorのパスワード設定の際、パスワードが簡単だと怒られる。 そこで複雑なパスワードを設定してみる事にした。
samba-toolコマンドを使って初期設定 |
---|
[root@samba4]# ./samba-tool domain provision Realm [EXAMPLE.CO.JP]: example.co.jp Domain [example]: example Server Role (dc, member, standalone) [dc]: dc DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: DNS forwarder IP address (write 'none' to disable forwarding) [192.168.X.Y]: 192.168.X.Y Administrator password: Retype password: Looking up IPv4 addresses Looking up IPv6 addresses No IPv6 address will be assigned Setting up secrets.ldb Setting up the registry Setting up the privileges database Setting up idmap db Setting up SAM db Setting up sam.ldb partitions and settings Setting up sam.ldb rootDSE Pre-loading the Samba 4 and AD schema Adding DomainDN: DC=example,DC=co,DC=jp Adding configuration container Setting up sam.ldb schema Setting up sam.ldb configuration data Setting up display specifiers Modifying display specifiers Adding users container Modifying users container Adding computers container Modifying computers container Setting up sam.ldb data Setting up well known security principals Setting up sam.ldb users and groups Setting up self join Adding DNS accounts Creating CN=MicrosoftDNS,CN=System,DC=example,DC=co,DC=jp Creating DomainDnsZones and ForestDnsZones partitions Populating DomainDnsZones and ForestDnsZones partitions Setting up sam.ldb rootDSE marking as synchronized Fixing provision GUIDs A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf Once the above files are installed, your Samba4 server will be ready to use Server Role: active directory domain controller Hostname: samba4 NetBIOS Domain: EXAMPLE DNS Domain: example.co.jp DOMAIN SID: S-1-5-21-1369468931-2664940459-980754913 [root@samba4]# |
パスワードを複雑にしたおかげで
無事、設定が終わった!
のだ。
まずはSamba4を起動させる。
Samba4の起動 |
---|
[root@samba4]# /usr/local/samba/sbin/samba [root@samba4]# |
ソースコンパイルで、特にSambaの中核の実行ファイを格納する ディレクトリ設定をしなければ「/usr/local/samba/sbin」に格納される。 |
バージョンを見る。
Sambaコマンドでバージョンを見る |
---|
[root@samba4 sbin]# /usr/local/samba/sbin/samba -V Version 4.0.7 [root@samba4 sbin]# |
バージョンが「4.0.7」だとわかる。 |
そしてネットに書いている通り、意味もわからずに 以下のコマンドを打ってみた。
サーバー上で使用可能な共有リストの確認 |
---|
[root@samba4]# /usr/local/samba/bin/smbclient -L localhost -U% Domain=[EXAMPLE] OS=[Unix] Server=[Samba 4.0.7] Sharename Type Comment --------- ---- ------- netlogon Disk sysvol Disk IPC$ IPC IPC Service (Samba 4.0.7) Domain=[EXAMPLE] OS=[Unix] Server=[Samba 4.0.7] Server Comment --------- ------- Workgroup Master --------- ------- [root@samba4]# |
インストールを説明しているサイトでは 「サーバー上で使用可能な共有リストの確認」の作業と 書いてあったが、この時点では、チンプンカンプンだった。 |
次にKerberos認証が正常に動いているかどうかの確認だ。 その前に、Samba4で生成されたKerberosのファイルを 所定の位置へコピーする必要がある。
Kerberosのファイルを所定の位置へコピー |
---|
root@samba4]# cp /usr/local/samba/private/krb5.conf /etc/krb5.conf cp: `/etc/krb5.conf' を上書きしてもよろしいですか(yes/no)? yes [root@samba4] |
初期設定時に/etc/krb5.confが存在する事があるが 上書きして全く問題はない。 |
さて、Kerberosが動くかどうか確認する。 もちろん、本の丸写し。
Kerberosの動作確認 |
---|
[root@samba4]# kinit administrator@example.co.jp Password for administrator@example.co.jp: kinit: KDC reply did not match expectations while getting initial credentials [root@samba4]# |
なんでエラーが出るねん (TT) 散々、悩んだ挙句、ある事に気がついた。 ドメイン名を大文字で打たなければならない というわけで大文字で打ってみた。
Kerberosの動作確認 |
---|
[root@samba4]# kinit administrator@EXAMPLE.CO.JP Password for administrator@EXAMPLE.CO.JP: Warning: Your password will expire in 41 days on Thu Jan 23 15:10:57 2014 [root@samba4]# |
見事、成功!! Kerberosの動作確認が取れた。 だが、この処理が・・・ 何の処理か知らへんかった! のだ。 一体、どういう処理なのかは後述しています。 ちなみにファイルの中身は以下のようになっている。
krb5.confの中身 |
---|
[root@samba4]# more krb5.conf [libdefaults] default_realm = EXAMPLE.CO.JP dns_lookup_realm = false dns_lookup_kdc = true [root@samba4]# |
これでSamba4の設定が終わった。 次にクライアントをSamba4で構築したActiveDirectoryに 参加させてみる。
クライアントをActiveDirectoryに参加させる |
---|
Samba4の内蔵DNSを使うため、優先DNSサーバーを Samba4のIPアドレスを割り当てる。 |
CentOS6系の潜む罠
CentOS6系でSambaサーバー構築する場合、注意が必要だ。 初期状態で、そのままSamba4を起動させても Windowsがドメインに参加できへん という事になる。 実際、WindowsXPをActiveDirectoryに参加させてみると 以下のようになった。
WindowsXPでActivedirectoryに参加 |
---|
ドメイン名を入力する。
ドメイン名を入力 |
---|
ドメイン名は「example」なので、それを入力。 |
すると・・・
こんなエラーが出た!
エラー内容 |
---|
エラーの詳細を見てみる。
エラーの詳細 |
---|
DNS検索ができていない感じがした。 |
そこでDNS検索をしてみる事にした。
Samba4上でDNS検索をする |
---|
[root@samba4]# nslookup > www.example.co.jp. Server: 127.0.0.1 Address: 127.0.0.1#53 ** server can't find www.example.co.jp.: NXDOMAIN > exit [root@samba4]# |
DNSサーバーが機能していないのがわかる。 |
だが、なぜDNSサーバーが機能しないのか。
その原因が何なのか、さっぱりわからない。
さんざん、悩んだ上、ふと気づいた。
ファイヤウォールの設定ではないか?
CentOS6.4の場合、インストール時に初期設定で
ファイヤウォール機能とSELinuxの機能が働く。
そこでファイヤウォールの状態を見てみる事にした。
ファイヤウォールの状態を見てみる |
---|
[root@samba4]# /etc/rc.d/init.d/iptables status テーブル: filter Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) num target prot opt source destination [root@samba4]# |
青い部分は、他のサーバーに接続した際の応答を受け入れる設定。 赤い部分は、1から4以外のパケットを全て拒否する設定。 |
そこでファイヤウォール機能を停止させるため iptablesコマンドで、ファイヤウォール機能を無効にした。 iptablesの設定については「システム奮闘記:その21」をご覧ください。 (ファイヤウォール iptablesの使い方) そしてSELinuxを無効化する。 その時、以下のサイトの内容を丸写しした。 SELinux、ファイアウォールの状態確認と無効方法
SELinuxの有無の確認 |
---|
[root@samba4]# getenforce
Enforcing
[root@samba4]#
|
SELinuxが有効になっている。 |
そこでSELiuxを無効にする事にした。
SELinuxの無効化 |
---|
[root@samba4]# setenforce 0 [root@samba4]# getenforce Permissive [root@samba4]# |
赤い部分は、SELinuxを無効化するコマンド。 青い部分は、状況の確認コマンド。 |
あとは起動時にSELinuxを無効化する設定を行なため /etc/sysconfig/selinuxファイルの記述を以下のように変更する。
初期状態でSELinuxの無効化する設定 |
---|
設定前の/etc/sysconfig/selinux |
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
|
設定後の/etc/sysconfig/selinux |
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disable
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
|
CentOS6系の場合、初期状態ではiptablesによるファイヤウォール機能と SELinuxが有効になっているので、それを解除しないと 折角、Samba4でActiveDirectoryを構築できても、 クライアントであるWindowsがAcivedirectoryに参加できない状態になるのだ。WindowsXPをSamba4のActiveDirectoryに参加
iptables(ファイヤウォール)の無効化とSELinuxの無効化を行ない 気を取り直して、再度、WindowsXPをADドメインに参加をしてみる。
WindowsXPでActivedirectoryに参加 |
---|
「変更(C)」を選ぶ。 |
そしてドメイン名を入力する。
ドメイン名を入力 |
---|
ドメイン名は「example」なので、それを入力。 |
ドメイン参加のための認証画面が出てくる。
Activedirectoryへ参加のための認証 |
---|
ユーザー名は管理者の「administrator」を入力。 そしてパスワードを入力する。 |
Activedirectoryに参加が成功したら以下の画面が出てくる。
成功した時の表示 |
---|
そして再起動を促す画面が出てくる。
再起動を促す画面 |
---|
ここでWindowsXPを再起動させる。 |
ここではWindowsXPでActivedirectoryに参加させてみたが Windows7でも同じ手順で行なう。
Samba4の遠隔管理ツール
Samba4をActiveDirectoryサーバーとして運用する時 クライアントのWindowsパソコンからリモート管理できるソフトがある。 それはWindows2003サーバー用の管理ツールだ。 以下のサイトからダウンロードできる。 WindowsXP用管理ツール Windows7用管理ツール Windows2003サーバーを遠隔管理するソフトを使って Samba4の管理を行なうのだから、何とも不思議な感じがする。
RSATについて |
---|
Windows2008用の管理ツールのRSATを使う事もできます。 それについては後述しています。 |
Samba4でのDNS設定について
ActiveDirectoryでは名前解決のためDNSを使っている。 そのため、Samba4ではDNSと連携しているのだ。 Samba4をインストールした後、設定の際、DNSをどうするかを 尋ねてくる。
samba-toolコマンドを使って初期設定 |
---|
[root@samba4]# ./samba-tool domain provision Realm [EXAMPLE.CO.JP]: example.co.jp Domain [example]: example Server Role (dc, member, standalone) [dc]: dc DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: |
この時、DNSをどうするのか決める必要がある。 選択肢は4つある。
4つの選択肢 | |
---|---|
SAMBA_INTERNAL | Samba4の内蔵DNSを使う |
BIND9_FLATFILE | 外部のDNSサーバーを使う |
BIND9_DLZ | 外部のDNSサーバーを使う 上のBIND9_FLATFILEとの違いは後述しています。 |
NONE | DNSサーバーを使わない |
それぞれの場合を見ていく事にした。
SAMBA_INTERNALの場合
Samba4の内蔵DNSを活用するのだが、基本的な物しか
ホスト情報が入っていない。
そのため以下のように他のDNSサーバーに問い合わせる。
DNS検索の問い合わせを転送 |
---|
Samba内部のDNSに登録がない場合は 問い合わせの転送先として登録している DNSサーバーへの問い合わせを行なう。 |
実際、Samba4の設定の時、以下の設定を行なうのは、そのためだ。
「SAMBA_INTERNAL」の場合、転送先のDNSサーバーを指定する |
---|
[root@samba4]# ./samba-tool domain provision
Realm [EXAMPLE.CO.JP]: example.co.jp
Domain [example]: example
Server Role (dc, member, standalone) [dc]: dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.X.Y]: 192.168.X.Y
|
この時の「192.168.X.Y」は/etc/resolv.confに登録している DNSサーバーで良いのかを尋ねてくる。 転送先のDNSサーバーを指定する。 |
そしてActiveDirectoryに参加したクライアントは DNSサーバーの設定をSambaにするのだが、名前解決の手順は 以下のようになると考えた。
名前解決の手順 |
---|
クライアントの問い合わせで、Samba4に内蔵されている
DNSサーバーで対応できない場合は、Samba4で設定した 転送先のDNSサーバーに問い合わせする手順になると考えた。 |
実際、高エネルギー加速器研究機構のサイトのDNS検索を行なってみる。
高エネルギー加速器研究機構のサイトのDNS検索は |
---|
[root@samba4]# nslookup > www.kek.jp. Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: www.kek.jp canonical name = wlb50www.kek.jp. Name: wlb50www.kek.jp Address: 130.87.104.83 > |
Samba4の内蔵DNSには登録されていないが 転送先の問い合わせがあるため、該当のIPアドレスが検索できた。 |
これで問題なしと思った。
だが、DNS検索をしてある事に気づいた。
同じドメイン内のホストの検索ができへん
だった。
同一ドメイン内のホストのDNS検索の結果 |
---|
[root@samba4]# nslookup > www.example.co.jp. Server: 127.0.0.1 Address: 127.0.0.1#53 ** server can't find www.example.co.jp.: NXDOMAIN > |
「そんなホストは、あらへん!」という回答だ。 |
一体、どういう事なのか。
考えた末、ある事に気づいた。
Samba4内蔵のDNSは同一ドメイン内を全て管理
なのだ。
図式化すると以下のようになる。
Samba4内蔵のDNSは同一ドメイン内を全て管理 |
---|
同一ドメイン内では、Samba4の内蔵DNSが名前解決しようとする。 |
そのため、同一ドメインで、Samba4のDNSに登録されていない ホスト名の名前解決した場合、以下のようになる。
こんな風になる |
---|
Samba4内蔵のDNSサーバーに登録されていない場合 問い合わせが転送されずに回答してしまう。 |
そのためSamba4の内部DNSは、同一ドメインのホスト情報を 全て登録しておく必要がある。 Samba4の内蔵DNSの設定だが、Windows2003サーバーの 遠隔管理ソフトを使えば、簡単に設定ができる。
管理ツールでDNSの設定 |
---|
接続先として、DNSサーバーである、Samba4のIPアドレスを入力。 |
そしてDNSの設定画面が出てくる。
DNSの設定画面 |
---|
DNSの正引きの設定画面を開く。
DNSの正引きの設定画面 |
---|
ここを触れば、正引きの設定ができる。 BINDの設定ファイルを触らなくても、遠隔地からでも GUI上で設定できるので、便利だと思う。 |
Samba4の設定で、Samba4の内蔵DNSを使う場合は 小規模のシステムが向いていると思った。
BIND9_FLATFILEの場合 これは外部のDNSを活用する場合の設定なのだが 次に説明するBIND9_DLZも、外部のDNSを活用する。 BIND9_DLZとの違いは何やねん? なのだ。 色々、調べてみたのだが・・・ 違いが書いているサイトが見つからへん! だった。 色々、調べても見つからないので、そんな事ばかりしても 時間の無駄なので、わからんままだが、とりあえず設定してみる事にした。
Samba4の設定におけるDNSの指定 |
---|
[root@samba4]# /usr/local/samba/bin/samba-tool domain provision
Realm [EXAMPLE.CO.JP]: EXAMPLE.CO.JP
Domain [EXAMPLE]: EXAMPLE
Server Role (dc, member, standalone) [dc]: dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_FLATFILE
|
samba-toolを使った設定が終わると、privateディレクトリに Samba4用のDNSの設定ファイルが生成される。
samba-toolで設定した時の様子 |
---|
[root@samba4]# /usr/local/samba/bin/samba-tool domain provision Realm [EXAMPLE.CO.JP]: EXAMPLE.CO.JP Domain [EXAMPLE]: EXAMPLE Server Role (dc, member, standalone) [dc]: dc DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_FLATFILE (途中、省略) The zone reload and thaw was successful. See /usr/local/samba/private/named.conf for an example configuration include file for BIND and /usr/local/samba/private/named.txt for further documentation required for secure DNS updates Setting up sam.ldb rootDSE marking as synchronized Fixing provision GUIDs A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf Once the above files are installed, your Samba4 server will be ready to use Server Role: active directory domain controller Hostname: samba4 NetBIOS Domain: EXAMPLE DNS Domain: example.co.jp DOMAIN SID: S-1-5-21-3914795830-3071257242-1407501996 [root@samba4]# |
実際にどんなファイルが生成されたのか見てみる。
/usr/local/samba/privateを見てみる |
---|
[root@samba4]# ls dns idmap.ldb named.txt secrets.keytab spn_update_list dns.keytab krb5.conf privilege.ldb secrets.ldb tls dns_update_list named.conf sam.ldb secrets.tdb hklm.ldb named.conf.update sam.ldb.d share.ldb [root@samba4]# |
生成されたBIND関連のファイルがあった。 |
BINDとの連携方法を記述しているnamed.txtの中身を見てみる。
named.txtの中身を見てみる |
---|
# # Steps for BIND 9.8.x and 9.9.x ----------------------------------------- # # 1. Insert following lines into the options {} section of your named.conf # file: tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab"; # # Common Steps for BIND 9.x.x -------------------------------------------- # # 2. Set appropriate ownership and permissions on the dns.keytab file. # Note that the most distributions have BIND configured to run under a # non-root user account. For example, Fedora 9 runs BIND as the user # "named" once the daemon relinquishes its rights. Therefore, the file # dns.keytab must be readable by the user that BIND run as. If BIND # is running as a non-root user, the "dns.keytab" file must have its # permissions altered to allow the daemon to read it. Under Fedora 9, # execute the following commands: chgrp named /usr/local/samba/private/dns.keytab chmod g+r /usr/local/samba/private/dns.keytab # 3. Ensure the BIND zone file(s) that will be dynamically updated are in # a directory where the BIND daemon can write. When BIND performs # dynamic updates, it not only needs to update the zone file itself but # it must also create a journal (.jnl) file to track the dynamic updates # as they occur. Under Fedora 9, the /var/named directory can not be # written to by the "named" user. However, the directory /var/named/dynamic # directory does provide write access. Therefore the zone files were # placed under the /var/named/dynamic directory. The file directives in # both example zone statements at the beginning of this file were changed # by prepending the directory "dynamic/". # 4. If SELinux is enabled, ensure that all files have the appropriate # SELinux file contexts. The dns.keytab file must be accessible by the # BIND daemon and should have a SELinux type of named_conf_t. This can be # set with the following command: chcon -t named_conf_t /usr/local/samba/private/dns.keytab |
1番目、2番目の色を塗った部分だけを行なう。 3番目はダイナミックDNSなので、うちの会社では行なっていないし 4番目はSELinuxを導入している場合なので、うちの会社は行なっていないので 3と4の設定は行なわなかった。 |
という事で、実際に、BINDの設定ファイルである named.confファイルに追加を行なう。
named.confのoption部分に以下の行を追加する |
---|
options {
listen-on port 53 { 192.168.X.Y; 127.0.0.1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab";
};
|
赤い部分が追加した所。 |
そして正引き部分の設定に以下の追加を行なう。
named.confの正引き部分に以下を追加する |
---|
zone "example.co.jp" IN {
type master;
file "example.co.jp.db";
allow-transfer { none; };
notify no;
include "/usr/local/samba/private/named.conf.update";
};
|
赤い部分が追加した物。 本来なら、もう1つ別の記述も必要なのだが それは後述しています。 |
named.confに以下の行を追加する |
---|
#allow-update { none; }; update-policy { grant *.CO.JP wildcard *.168.192.in-addr.arpa. PTR; }; |
実際に稼働するかどうか確かめてみるのだが・・・
SRVレコード検索ができへん!
SRVレコード検索ができなかった様子 |
---|
[root@samba4]# host -t SRV _ldap._tcp.example.co.jp. Host _ldap._tcp.example.co.jp. not found: 3(NXDOMAIN) [root@samba4]# |
なぜダメなのかが、わからない。 だが、色々、触っているうちに、あるファイルを発見した。 /usr/local/samba/private/dns ディレクトリのファイルだ。
/usr/local/samba/private/dnsディレクトリ |
---|
[root@samba4]# ls example.co.jp.zone [root@samba4]# |
正引き用のファイルとして、Samba4の設定時に生成されるファイルだ。 |
そこでexample.co.jp.zoneファイルの中身を見てみる。
example.co.jp.zoneファイルの中身 |
---|
; -*- zone -*- ; generated by provision.pl $ORIGIN example.co.jp. $TTL 1W @ IN SOA samba4 hostmaster ( 2013082816 ; serial 2D ; refresh 4H ; retry 6W ; expiry 1W ) ; minimum IN NS samba4 IN A 192.168.X.Y ; samba4 IN A 192.168.X.Y gc._msdcs IN A 192.168.X.Y gc._msdcs IN CNAME samba4 309f549a-f604-4bb3-959a-7c9000f53a35._msdcs IN CNAME samba4 ; ; global catalog servers _gc._tcp IN SRV 0 100 3268 samba4 _gc._tcp.Default-First-Site-Name._sites IN SRV 0 100 3268 samba4 _ldap._tcp.gc._msdcs IN SRV 0 100 3268 samba4 _ldap._tcp.Default-First-Site-Name._sites.gc._msdcs IN SRV 0 100 3268 samba4 ; ; ldap servers _ldap._tcp IN SRV 0 100 389 samba4 _ldap._tcp.dc._msdcs IN SRV 0 100 389 samba4 _ldap._tcp.pdc._msdcs IN SRV 0 100 389 samba4 _ldap._tcp.f5f45a21-9a12-47ed-877b-5d6c92080d7e.domains._msdcs IN SRV 0 100 389 samba4 _ldap._tcp.Default-First-Site-Name._sites IN SRV 0 100 389 samba4 _ldap._tcp.Default-First-Site-Name._sites.dc._msdcs IN SRV 0 100 389 samba4 ; ; krb5 servers _kerberos._tcp IN SRV 0 100 88 samba4 _kerberos._tcp.dc._msdcs IN SRV 0 100 88 samba4 _kerberos._tcp.Default-First-Site-Name._sites IN SRV 0 100 88 samba4 _kerberos._tcp.Default-First-Site-Name._sites.dc._msdcs IN SRV 0 100 88 samba4 _kerberos._udp IN SRV 0 100 88 samba4 ; MIT kpasswd likes to lookup this name on password change _kerberos-master._tcp IN SRV 0 100 88 samba4 _kerberos-master._udp IN SRV 0 100 88 samba4 ; ; kpasswd _kpasswd._tcp IN SRV 0 100 464 samba4 _kpasswd._udp IN SRV 0 100 464 samba4 ; ; heimdal 'find realm for host' hack _kerberos IN TXT EXAMPLE.CO.JP |
このファイルを正引き用のファイルとして使う必要がある。 そこでnamed.confファイルに反映させるため、 以下の記述をする。
named.confの正引き部分に以下を追加する |
---|
zone "example.co.jp" IN { type master; # file "example.co.jp.db"; file "/usr/local/samba/private/dns/example.co.jp.zone"; allow-transfer { none; }; notify no; include "/usr/local/samba/private/named.conf.update"; }; |
青い部分は、Samba4が生成した正引き用ファイルを反映させる所だ。 今まであった正引きファイルを無効にしておいた。 |
そしてBINDを起動させてみるのだが、今度は・・・
起動せぇへん (TT)
そこで原因を調べるため、ログを見る事にした。
/var/log/messagesの中身(抜粋) |
---|
Dec 26 18:33:55 cent5 named[28167]: /usr/local/samba/private/dns/example.co.jp.zone:17: gc._msdcs.example.co.jp: bad owner name (check-names) |
エラーの内容は、Samba4で生成したファイルの17行目が問題だという。 |
そこで該当のファイルの17行目を見てみる。
example.co.jp.zoneファイルの中身 |
---|
; -*- zone -*-
; generated by provision.pl
$ORIGIN example.co.jp.
$TTL 1W
@ IN SOA samba4 hostmaster (
2013082816 ; serial
2D ; refresh
4H ; retry
6W ; expiry
1W ) ; minimum
IN NS samba4
IN A 192.168.X.Y
;
samba4 IN A 192.168.X.Y
gc._msdcs IN A 192.168.X.Y
gc._msdcs IN CNAME samba4
309f549a-f604-4bb3-959a-7c9000f53a35._msdcs IN CNAME samba4
;
; global catalog servers
_gc._tcp IN SRV 0 100 3268 samba4
_gc._tcp.Default-First-Site-Name._sites IN SRV 0 100 3268 samba4
_ldap._tcp.gc._msdcs IN SRV 0 100 3268 samba4
_ldap._tcp.Default-First-Site-Name._sites.gc._msdcs IN SRV 0 100 3268 samba4
;
; ldap servers
_ldap._tcp IN SRV 0 100 389 samba4
_ldap._tcp.dc._msdcs IN SRV 0 100 389 samba4
_ldap._tcp.pdc._msdcs IN SRV 0 100 389 samba4
_ldap._tcp.f5f45a21-9a12-47ed-877b-5d6c92080d7e.domains._msdcs IN SRV 0 100 389 samba4
_ldap._tcp.Default-First-Site-Name._sites IN SRV 0 100 389 samba4
_ldap._tcp.Default-First-Site-Name._sites.dc._msdcs IN SRV 0 100 389 samba4
;
; krb5 servers
_kerberos._tcp IN SRV 0 100 88 samba4
_kerberos._tcp.dc._msdcs IN SRV 0 100 88 samba4
_kerberos._tcp.Default-First-Site-Name._sites IN SRV 0 100 88 samba4
_kerberos._tcp.Default-First-Site-Name._sites.dc._msdcs IN SRV 0 100 88 samba4
_kerberos._udp IN SRV 0 100 88 samba4
; MIT kpasswd likes to lookup this name on password change
_kerberos-master._tcp IN SRV 0 100 88 samba4
_kerberos-master._udp IN SRV 0 100 88 samba4
;
; kpasswd
_kpasswd._tcp IN SRV 0 100 464 samba4
_kpasswd._udp IN SRV 0 100 464 samba4
;
; heimdal 'find realm for host' hack
_kerberos IN TXT EXAMPLE.CO.JP
|
青い部分がエラーになった所だ。 |
なぜエラーが出るのか、わからない。 こんな時は、とりあえず青い部分を無効にした。
ファイルの書き換え作業 |
---|
書き換え間 |
samba4 IN A 192.168.X.Y
gc._msdcs IN A 192.168.X.Y
gc._msdcs IN CNAME samba4
|
書き換え後 |
samba4 IN A 192.168.X.Y
#gc._msdcs IN A 192.168.X.Y
gc._msdcs IN CNAME samba4
|
再度、BINDを起動させてみる。すると・・・
BINDが起動した!
そこでSRVレコードを検索してみた。
SRVレコードを検索 |
---|
[root@samba4]# host -t SRV _ldap._tcp.example.co.jp _ldap._tcp.example.co.jp has SRV record 0 100 389 samba4.example.co.jp. [root@samba4]# |
問題なくできた! さて、DNSサーバーの設定もできた。 Activedirectoryに参加したWindowsXPのマシンから 管理ツールを使ってDNSの設定ができないかと試してみた。 だが・・・ 接続できへん!! だった。
Windows2003の管理ツールでDNS設定ができない |
---|
DNSサーバーに接続できないと表示される。 |
一体、原因はどこにあるのか。 色々、調べてみるうちに、あの事を知る。 rndcデーモンが原因では? だが、rndcデーモン周辺を触ったりしたのだが それでも・・・ 管理ツールでDNSの設定ができへん あとでわかった話。 「BIND9_FLATFILE」の設定では、管理ツールが使えないのだ。 直接、BINDのファイルを書き換える必要があるのだ。 ところで、まだ、この時点では、BIND9_DLZとの違いは、わからなかった。
BIND9_DLZの場合 こちらも、わからないが、悩んでいても仕方がないので とりあえず、設定してしまえ! で設定してみる事にした。 Samba4の設定を行なう。
samba-toolで設定 |
---|
[root@samba4]# ./samba-tool domain provision
Realm [EXAMPLE.CO.JP]: EXAMPLE.CO.JP
Domain [EXAMPLE]: EXAMPLE
Server Role (dc, member, standalone) [dc]: dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=example,DC=co,DC=jp
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=example,DC=co,DC=jp
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
See /usr/local/samba/private/named.conf for an example configuration include file for BIND
and /usr/local/samba/private/named.txt for further documentation required for secure DNS updates
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf
Once the above files are installed, your Samba4 server will be ready to use
Server Role: active directory domain controller
Hostname: samba4
NetBIOS Domain: EXAMPLE
DNS Domain: example.co.jp
DOMAIN SID: S-1-5-21-4268047112-2932975829-3954046480
[root@samba4]#
|
エラーもなく設定が完了した。 さて、どんなファイルが生成されたのか見てみる事にした。
/usr/local/samba/privateを見てみる |
---|
[root@samba4]# ls
dns idmap.ldb privilege.ldb secrets.ldb tls
dns.keytab krb5.conf sam.ldb secrets.tdb
dns_update_list named.conf sam.ldb.d share.ldb
hklm.ldb named.txt secrets.keytab spn_update_list
[root@samba4]#
|
BINDの設定方法を説明している「named.txt」を見てみる |
named.txtのファイルの中身を見てみる。
named.txtの中身 |
---|
# Additional informations for DNS setup using BIND # If you are running a capable version of BIND and you wish to support # secure GSS-TSIG updates, you must make the following configuration # changes: # # Steps for BIND 9.8.x and 9.9.x ----------------------------------------- # # 1. Insert following lines into the options {} section of your named.conf # file: tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab"; # # Common Steps for BIND 9.x.x -------------------------------------------- # # 2. Set appropriate ownership and permissions on the dns.keytab file. # Note that the most distributions have BIND configured to run under a # non-root user account. For example, Fedora 9 runs BIND as the user # "named" once the daemon relinquishes its rights. Therefore, the file # dns.keytab must be readable by the user that BIND run as. If BIND # is running as a non-root user, the "dns.keytab" file must have its # permissions altered to allow the daemon to read it. Under Fedora 9, # execute the following commands: chgrp named /usr/local/samba/private/dns.keytab chmod g+r /usr/local/samba/private/dns.keytab # 3. Ensure the BIND zone file(s) that will be dynamically updated are in # a directory where the BIND daemon can write. When BIND performs # dynamic updates, it not only needs to update the zone file itself but # it must also create a journal (.jnl) file to track the dynamic updates # as they occur. Under Fedora 9, the /var/named directory can not be # written to by the "named" user. However, the directory /var/named/dynamic # directory does provide write access. Therefore the zone files were # placed under the /var/named/dynamic directory. The file directives in # both example zone statements at the beginning of this file were changed # by prepending the directory "dynamic/". # 4. If SELinux is enabled, ensure that all files have the appropriate # SELinux file contexts. The dns.keytab file must be accessible by the # BIND daemon and should have a SELinux type of named_conf_t. This can be # set with the following command: chcon -t named_conf_t /usr/local/samba/private/dns.keytab |
赤い部分は、BINDのnamed.confファイルへの記述部分。 青い部分は、Samba4の設定時に生成されたファイルの 所有者やグループ名、権限の変更。 ピンクの部分はSELinuxに関連するが、私は使っていないので省略 |
そして次に生成されたnamed.confの中身を見てみる事にした。
/usr/local/samba/privateを見てみる |
---|
[root@samba4]# ls
dns idmap.ldb privilege.ldb secrets.ldb tls
dns.keytab krb5.conf sam.ldb secrets.tdb
dns_update_list named.conf sam.ldb.d share.ldb
hklm.ldb named.txt secrets.keytab spn_update_list
[root@samba4]#
|
named.confを見てみる |
named.confの中身が、BIND9_FLATFILEの時の 生成内容との違いがあるのか見てみる事にした。
生成されたnamed.confの中身 |
---|
# This DNS configuration is for BIND 9.8.0 or later with dlz_dlopen support. # # This file should be included in your main BIND configuration file # # For example with # include "/usr/local/samba/private/named.conf" # # This configures dynamically loadable zones (DLZ) from AD schema # Uncomment only single database line, depending on your BIND version # dlz "AD DNS Zone" { # For BIND 9.8.0 database "dlopen /usr/local/samba/lib/bind9/dlz_bind9.so"; # For BIND 9.9.0 # database "dlopen /usr/local/samba/lib/bind9/dlz_bind9_9.so"; }; |
BIND9_FLATFILEの時に生成された内容とは大きく異なる。 これを、BINDで使っている、named.confファイルに書き込めば良いのだ。 |
そしてnamed.confを以下のように記述する。
named.confの記述 |
---|
options { listen-on port 53 { 192.168.X.Y; 127.0.0.1; }; #listen-on-v6 port 53 { ::1; }; directory "/var/named"; allow-query { any; }; recursion yes; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; dlz "AD DNS Zone" { # For BIND 9.8.0 # database "dlopen /usr/local/samba/lib/bind9/dlz_bind9.so"; # For BIND 9.9.0 database "dlopen /usr/local/samba/lib/bind9/dlz_bind9_9.so"; }; include "/etc/rndc.key"; |
BIND9.9を使った。 実験として即席DNSで作っているため セキュリティーを考慮した設定をしていませんので 決して、ツッコミをしないでください (^^) |
そしてBINDを起動させる。 無事、起動しているかどうか確認してみる。
DNS検索をしてみる |
---|
[root@samba4]# host -t SRV _ldap._tcp.example.co.jp _ldap._tcp.example.co.jp has SRV record 0 100 389 samba4dns.example.co.jp. [root@samba4]# |
DNS検索ができているのが確認できた。 |
この状態だとSambaに関するDNS情報は含まれているが
各種ホスト名は登録しなければならない。
そこでWindowsサーバー管理ツールでDNS設定を行なってみる。
問題なく設定できるやん!
DNSの設定画面 |
---|
さて、BIND9_DLZを採用する際の注意点だが、Berkeley DBが インストールされているのが前提だ。
BerkeleyDBの確認(CentOS5.10) |
---|
[root@samba4]# rpm -iq db4 Name : db4 Relocations: (not relocatable) Version : 4.3.29 Vendor: CentOS Release : 10.el5_5.2 Build Date: 2010年07月13日 01時11分25秒 Install Date: 2013年12月19日 15時13分20秒 Build Host: builder17.centos.org Group : System Environment/Libraries Source RPM: db4-4.3.29-10.el5_5.2.src.rpm Size : 2125602 License: GPL Signature : DSA/SHA1, 2010年07月15日 07時26分01秒, Key ID a8a447dce8562897 URL : http://www.sleepycat.com/ Summary : C 用の Berkeley DB データベースライブラリ (バージョン 4) Description : Berkeley Database (Berkeley DB) は、プログラム可能なツールキットで、 従来のアプリケーションとクライアント/サーバーアプリケーションの両方に対し、 組込みデータベースを提供します。 Berkeley DB には、B+tree、 拡張線形ハッシュ、固定長、および可変長レコードのアクセスメソッドと トランザクションが収録されており、ロック、ログ作成、共有メモリのキャッシング、 データベースの復旧を行います。 Berkeley DB は、C、C++、Java、Perl API を サポートしています。 このデータベースは、Python や Perl などの多数の アプリケーションで使用されているため、すべてのシステムにインストールする 必要があります。 [root@samba4]# |
そして、BINDをソースコンパイルする際は Berkeley DBが使えるよう、configureの際の 以下のオプションをつける必要がある。
BINDコンパイルの際、configureに必要なオプション |
---|
configure --sysconfdir=/etc --localstatedir=/var --with-dlz-bdb
|
赤い部分が必須のオプションになる。 |
DNSの指定は何がお薦めか? Samba4とDNSとの連携で3つの方法がある事を紹介した。 では、3つのうち、どれが良いのか。 用途によって、どれが良いかが決まるのが結論だ。
3つの選択肢 | |
---|---|
SAMBA_INTERNAL | Windowsの管理ツールから 手軽にDNS登録ができる。 小規模向け。 |
BIND9_FLATFILE | 中規模・大規模向けだが DNS設定はDNSサーバーの設定ファイルを触るため BINDの設定を知らない人には不向き。 |
BIND9_DLZ | 中規模・大規模向けだ。 Windows管理ツールでもDNSの設定が可能だ。 でも、大量に登録する際は、コピペが使えないので 結構、手間かもしれない。 |
実は、この区分けは日本Sambaユーザ会公開の資料に載っていたのだ。 オープンソースカンファレンス2011 Tokyo/Springセミナー Samba最新動向&座談会 資料を見ただけでは、わからない。 やっぱり自分で確かめないと気がすまないのだ。 ちなみに、うちの会社は 「BIND9_FLATFILE」を採用 したのだ。 BINDをテキストファイルの方が見やすいし emacsやviで変更できるので、妙な安心感がある。
DNS SRVレコード
Samba4を使う際、DNSの設定箇所でSRVレコードの設定があった。 SRVって何やねん? そこで調べてみる事にした。 日経ITPro SRVレコード SRVの略は Service Resource Record だった。 そして MXレコードを任意のサービス向けに一般化した物 と説明が書いているのだが、それだけだと・・・ だから何やねん! なのだ。 そこで調べてみる事にした。 DNS SRV レコードの作成と確認(TechNet) DNSの設定で、サービスとポート番号の指定ができるようだ。 Linux(UNIX)の /etc/services ファイルと同じ役目をしている感じだ。 DNSでポート番号の指定ができるとは知らなかった。 他のサイトも見つけた。 実用 BIND 9で作るDNSサーバ(14):DNSの拡張仕様、SRVレコードとENUM DNSの拡張仕様だ。 これで意味がわかってきた。 図式化すると以下にようになる。
メール配信する際の問題点 |
---|
メールアドレスの場合、ホスト名を抜いたドメイン部分のみの場合が多い。 もし、複数台のマシンがある場合、「maori」(眞鍋かをり)に送るべきなのか 「mao」(南沢奈央)に送るべきなのか、「mayumi」(小野真弓)に送るべきなのか 判断が付かない。 |
そこでMXレコードが役に立つ。
MXレコードの役目 |
---|
DNSのMXレコードを記述していれば、kaoriに配信すれば良い事がわかる。 |
MXレコードを使ったDNS検索の結果、以下のように 無事、メールが配信できるのだ。
メールは無事、配信できる |
---|
MXレコードのお蔭でメールは配信できる。 |
MXレコードを応用した形で、サービス名で問い合わせた場合 該当のサーバーのIPアドレスと、ポート番号が返答するための設定が SRVレコードになる。
SRVレコード |
---|
サービス名を問い合わせると、サービスを提供するサーバーの IPアドレスと、ポート番号が返ってくるのだ。 |
BINDの正引きファイルにおける、SRVレコードの記述方法は 以下のようになる。
BINDの正引きファイルにおける、SRVレコードの記述方法 |
---|
; ldap servers _ldap._tcp IN SRV 0 100 389 samba4 |
サービス名(LDAP)、プロトコル名(TCP)、IN、SRVの後に 優先度、ウエイト(正直、よくわからないが)、ポート番号の順だ。 |
ウエイトとは何やねん! なのだが、別の機会で取り上げたいと思います。Kerberos認証
Kerberos認証が何なのか、わからずに使うと 認証時の不具合が生じても対応できない。 そこで概略だけでも知ろうと、Kerberos認証の仕組みを調べてみたら 以下のサイトを発見した。 情報セキュリティ入門 ケルベロス認証 (日経ITPro) Active Directoryの認証の仕組み(CodeZine) Kerberos認証の仕組みは以下の通りになる。
Kerberos認証を導入しない場合 |
---|
クライアントは個々のサーバーに対して認証を行なう。 そして、一度、接続を切った場合、再度、接続を行なう場合は 再度、認証が必要になる。 |
結構、これは手間になる。 それを解消するのに、Kerberos認証が使われる。 まずはKerberos認証を導入した際のサーバー、クライアントの 構成を知る必要がある。
Kerberosを導入した時の構成図 |
---|
水色の領域はレルム(realm)と呼ばれ、Kerberos認証を行なう サーバー、クライアント全体だ。 黄色の領域には、認証サーバーとチケット発行サーバーがある。 この2つのサーバーをKDCと呼ぶ。 認証サーバーは(AS:Authentication Server)と呼ぶ。 チケット発行サーバーは(TGS:Ticket Granting Server)と呼ぶ KDCが認証するサーバー、クライアントをプリンシパル(principal)と呼ぶ |
ところで・・・ レルム(realm)って何やねん? 英単語を調べたら 領域、範囲、分野、部門 の意味だった。 そして・・・ プリンシパル(principal)とは何やねん? だ。 「主な」や「重要な」という意味があるのだが、英単語の意味を調べてみた。 主役、部門長の意味がある だった。形容詞だけと思っていたら、名詞の意味もあった。 だが、KDCが認証するサーバーとクライアントをプリンシパルと呼ぶが どういう関連づけなのか、わからへん!! なのだ。 わからんと悩んでも前に進まないので、実際に、どういう仕組みで 認証が行なわれるのか。以下のようになる。
Kerberos認証の仕組み |
---|
クライアントがサーバーAに接続したい場合を考える。 |
まずはクライアントは認証サーバー(AS)に認証要求を行なう 認証サーバーは、認証に問題なければ、TGTと呼ばれる物を発行する (TGT:Ticket Granting Ticket)とは、チケット発行のためのチケットの意味だ チケット発行サーバーにチケットを発行してもらうための 大もとのチケットになる。 TGTは一定時間内は何度でも使える |
認証サーバーに発行してもらったTGTをチケット発行サーバー(GTS)に渡す。 そしてチケット発行サーバー(GTS)から、接続したいサーバーAの 接続チケットを発行してもらう。 |
チケット発行サーバーに発行してもらったチケットを使い サーバーAへの接続を行なう。そして接続を許可してもらう。 |
その後、サーバーBに接続したい場合 |
次にサーバーBへの接続が必要になった場合を考える。 認証サーバーに発行してもらったTGT(チケット発行のチケット)は 一定時間内なら何度でも使える。 そこで、クライアントは所持しているTGTを、チケット発行サーバーに渡す。 サーバーBへ接続チケットをもらう。 |
そしてサーバーBへの接続チケットを、サーバーBに渡す。 そしてサーバーBへの接続を許可してもらう。 |
一見すると手間のかかる手順のようだが・・・ 一度、認証してしまえば、後は接続が容易 というわけだ。 Kerberos認証で大事な事がある。 時間同期は必要 なのだ。 クライアント、サーバーの時間設定を正確にする必要がある。
クライアントとサーバーの時間がずれている場合 |
---|
上図のように時間にズレがあるとする。 |
すると以下の事が起こってしまう。
接続拒否される |
---|
上図のように時間にズレがあると、接続が拒否される。 |
だが、これは偽チケットなどを防ぐための物だ。
時間のズレは、どこまで許されるのか。
マイクロソフトのTechNetでは
最大5分
のようだ。
アカウント ポリシー ‐ Kerberos ポリシーの設定 - TechNet
ところでLinux上でKerberosの動作を見る事はできる。
kinitコマンドとklistコマンドだ。
kinitコマンド |
---|
[root@samba4]# kinit administrator@EXAMPLE.CO.JP Password for administrator@EXAMPLE.CO.JP: Warning: Your password will expire in 41 days on Wed Sep 4 11:34:01 2013 [root@samba4]# |
kinitはTGT(チケット発行サーバーに接続するためのチケット)を 発行するコマンドだ。41日間有効になっている。 |
そしてklistは有効期限内のTGTの一覧を見るコマンドだ。
klistコマンド |
---|
[root@samba4]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@EXAMPLE.CO.JP Valid starting Expires Service principal 07/24/13 13:36:15 07/24/13 23:36:15 krbtgt/EXAMPLE.CO.JP@EXAMPLE.CO.JP renew until 07/25/13 13:36:07 [root@samba4]# |
先ほど、発行したTGTが一覧に出ている。 |
無事、Kerberos認証が行なわれているのが確認できる。
Samba4のインストール
Samba4.0系を触っていたのは、2013年7月と8月。 だが、Sambaの話が書けない間に・・・ Samba4.1系が出ている!! だった。 しかも、Samba4.1からは・・・ 管理ツールのSWATが廃止 になってる。 まぁ、私はSWATを使った事がないので、不便にはならないが。 そこで今回の話の、まとめとしてSamba4.1.3のインストールを 紹介する事にした。 といっても、Samba4.0系と全く同じなのだが。 まずはソースファイルを展開する事から始まる。 /usr/local/srcディレクトリ上に samba-4.1.3.tar.gz ファイルを置く。そして展開を行なう。
tar.gzファイルの展開 |
---|
[root@samba4]# tar xvfz samba-4.1.3.tar.gz
samba-4.1.3/.clang_complete
samba-4.1.3/.testr.conf
samba-4.1.3/BUILD_SYSTEMS.txt
samba-4.1.3/COPYING
samba-4.1.3/MAINTAINERS.txt
samba-4.1.3/Makefile
(途中、省略)
samba-4.1.3/docs/manpages/idmap_tdb2.8
samba-4.1.3/docs/manpages/vfs_shadow_copy2.8
samba-4.1.3/docs/manpages/vfs_recycle.8
samba-4.1.3/docs/manpages/idmap_tdb.8
[root@samba4]#
|
ディレクトリを移動した後、configureを行なう。
configureを行なう |
---|
[root@samba4]# ./configure --enable-debug --enable-selftest
./buildtools/wafsamba/samba_utils.py:397: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
Checking for program gcc or cc : /usr/bin/gcc
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for gcc : ok
(途中、省略)
Checking for -lc not needed : ok
Checking configure summary : ok
Checking compiler accepts -g : yes
Checking compiler for PIE support : yes
'configure' finished successfully (1m10.940s)
[root@samba4]#
|
そしてソースコンパイルを行なうため、makeを行なう。
makeを行なう |
---|
[root@samba4]# make
WAF_MAKE=1 python ./buildtools/bin/waf build
./buildtools/wafsamba/samba_utils.py:397: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
Waf: Entering directory `/usr/local/src/samba-4.1.3/bin'
symlink: tevent.py -> python/tevent.py
symlink: samba/__init__.py -> python/samba/__init__.py
symlink: samba/common.py -> python/samba/common.py
(途中、省略)
[3984/3985] Generating manpages/pam_winbind.conf.5
Note: Writing pam_winbind.conf.5
[3985/3985] Generating manpages/winbind_krb5_locator.7
Note: Writing winbind_krb5_locator.7
Waf: Leaving directory `/usr/local/src/samba-4.1.3/bin'
'build' finished successfully (14m2.748s)
[root@samba4]#
|
コンパイルが成功した。 そしてインストールを行なう。
インストールを行なう |
---|
[root@samba4]# make install
WAF_MAKE=1 python ./buildtools/bin/waf install
./buildtools/wafsamba/samba_utils.py:397: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
Waf: Entering directory `/usr/local/src/samba-4.1.3/bin'
* creating /usr/local/samba/etc
(途中、省略)
* installing bin/default/pidl/Parse::Pidl::NDR.3pm as /usr/local/samba/share/man/man3/Parse::Pidl::NDR.3pm
* installing bin/default/pidl/Parse::Pidl::Wireshark::NDR.3pm as /usr/local/samba/share/man/man3/Parse::Pidl::Wireshark::NDR.3pm
Waf: Leaving directory `/usr/local/src/samba-4.1.3/bin'
'install' finished successfully (3m34.774s)
[root@samba4]#
|
そしてSamba4の設定を行なう。
Samba4の設定 |
---|
[root@samba4]# pwd
/usr/local/samba/bin
[root@samba4]# ./samba-tool domain provision
Realm [EXAMPLE.CO.JP]: EXAMPLE.CO.JP
Domain [EXAMPLE]: EXAMPLE
Server Role (dc, member, standalone) [dc]: dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [127.0.0.1]: 192.168.X.Y
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=example,DC=co,DC=jp
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=example,DC=co,DC=jp
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf
Once the above files are installed, your Samba4 server will be ready to use
Server Role: active directory domain controller
Hostname: samba4
NetBIOS Domain: EXAMPLE
DNS Domain: example.co.jp
DOMAIN SID: S-1-5-21-4073675939-1853264219-3860708613
[root@samba4]#
|
次にBINDと連携なのだが、設定は前述しているため
ここでは省略します!
さて、コンパイルと設定が終わったSamba4なのだが
動作確認を行なってみる。
Sambaを確認 |
---|
[root@samba4]# /usr/local/samba/sbin/samba -V Version 4.1.3 [root@samba4]# |
そしてSambaを稼働させる。
Sambaを稼働させる |
---|
[root@samba4]# /usr/local/samba/sbin/samba [root@samba4]# |
Sambaに内蔵されているDNSが問題なく稼働するか確認を行なう。
DNSが問題なく稼働するか確認 |
---|
[root@samba4]# host -t SRV _ldap._tcp.example.co.jp. _ldap._tcp.example.co.jp has SRV record 0 100 389 samba4.example.co.jp. [root@samba4]# |
SRVレコードが問題なく検索できた。 |
Samba4に内蔵されているKerberosの動作確認を行なう。
Kerberosの動作確認 |
---|
[root@samba4]# kinit administrator@EXAMPLE.CO.JP Password for administrator@EXAMPLE.CO.JP: Warning: Your password will expire in 41 days on Thu Jan 23 15:10:57 2014 [root@samba4]# |
無事、確認できた。
管理ツール RSATの紹介
FacebookでSamba4の事をつぶやくと Sambaユーザ会の小田切さんから 管理ツールRSATがあるよ と教えていただいた。 RSATとは何か。 Remote Server Administration Toolsの略 以下のサイトからダウンロードする。 マイクロソフト公式ダウンロードセンター だが、RSATをインストールしても、アイコンに出てくるわけではない。 スタートボタンのプログラムメニューにも出てこない。 一体、どないすればエエねん と思った。 だが、以下のサイトを発見。 RSATツールでWindows Server 2008をリモート管理する(@IT) 真似してみる事にした。 まずはスタートボタンを押してコントロールパネルを選ぶ。
スタートボタンからコントロールパネルを選ぶ |
---|
コントロールパネルの画面が開く。
コントロールパネルの画面 |
---|
ここで赤く囲んだ「プログラム」を選ぶ。 |
プログラムの画面を開く。
プログラムの画面 |
---|
赤く囲んだ「Windowsの機能の有効化または無効化」を選ぶ |
Windows機能の画面を開く。
Windows機能の画面 |
---|
そこでリモートサーバー管理ツールの階層にある物を 全て印をつける。
Windows機能の画面 |
---|
リモートサーバー管理ツールの階層にある物を全て印をつける |
そして画面を閉じる。 その後、スタートボタンの所で、マウスを右クリックする
スタートボタンの所で、マウスを右クリック |
---|
そしてプロパティーを選ぶ。 |
プロパティー画面を開く。
「スタート」メニューのプロパティー画面 |
---|
赤く囲んだ「カスタマイズ(C)」を選ぶ。 |
カスタマイズ画面を開く。
カスタマイズ画面 |
---|
赤く囲んだ「[全てのプログラム]メニューと[スタート]メニューに表示する」に印をつける。 |
最初に戻ってスタートボタンを押す
管理ツールが追加されている |
---|
管理ツールを選ぶと、沢山の選択肢が出てくる。
管理ツールを選んだ画面 |
---|
RSATのインストールの際の注意点
RSATをインストールする前に、RSATを使うクライアントの DNS設定に注意が必要だ。
DNSサーバーをSamba4ではなく別のサーバーにしている場合 |
---|
クライアントの設定 |
ActiveDirectoryに参加させる時、DNSサーバーの設定変更を 忘れた場合を考えてみる。 |
もし、DNSサーバーを別のサーバーにしたままでRSATを使おうとしても 以下のエラーが出る。
エラーの内容 |
---|
最初、このエラーが出た時、なぜ問題なのかがわからず 結構、時間を費した。ひょんな事でDNSサーバーの設定に気づき DNSサーバーをSamba4のマシンにしたら、このエラーがでなくなった。 |
RSATを使ってユーザー登録
沢山あるRSATの機能の中で、今回はユーザー登録を行なってみた。
ActiveDirectoryユーザーとコンピューター画面 |
---|
「example.co.jp」の部分をクリックしてみる。 |
すると、いくつかの分類が出てくる。 ユーザー登録を行なうので、「Users」部分をクリックしてみる
「Users」部分をクリックしてみる |
---|
ユーザー登録を行なってみる。
ユーザー登録画面の呼び出し |
---|
すると以下の画面が出てくる
ユーザー登録画面 |
---|
姓、名、ユーザーログオン名を登録する。 |
誰にするのか。やっぱりここは 愛する南沢奈央ちゃん (♥o♥) なのだ
ユーザー登録の入力 |
---|
愛する南沢奈央ちゃんの名前で登録する |
そしてパスワードの設定を行なう
パスワード設定画面 |
---|
7文字になっている。
南沢奈央ちゃんに愛を示すため、パスワードを
naochan
にしたのだ。
そして先に進める。
ユーザーを作成時の最終画面 |
---|
いよいよ登録だ。 |
だが・・・
パスワード設定が拒否された
パスワード設定が拒否 |
---|
パスワードが短い上、単純なので、パスワードを作り直せの意味だ。 |
南沢奈央ちゃんへの愛が通じなかった (TT)
そこで複雑なパスワードを考えて登録してみる。
複雑なパスワードで登録 |
---|
同じパスワード登録といっても種類がある。 ここで暫定的に決めて、あとでユーザーに変更してもらう方法や ユーザーには変更不可のパスワードにするか等の設定ができる。 |
パスワードが認められた結果
無事、ユーザ登録が完了
したのだった。
ユーザー登録されている様子 |
---|
赤く囲んだ部分が、今回、登録したユーザー「南沢奈央」だ。 |
RSATによるDNSの設定
うちはSamba4のDNS機能で「BIND9_FLATFILE」を採用したため BINDの設定ファイルを、直接、触る必要があるため、この機能は使えない。 だが「SAMBA_INTERNAL」や「BIND9_DLZ」を選択した場合は RSATを使って、DNSの設定が可能になる。 そこで少しだけ紹介する事にした。
DNSサーバーへの接続 |
---|
DNSサーバー(Samba4サーバー)のIPアドレスを入力する |
DNSサーバーへの接続すると、以下の画面になる。
DNSサーバー設定画面 |
---|
該当のDNSサーバーのIPアドレスをクリックすると 正引き、逆引きなど各種設定画面が出てくる。
DNSの各種設定が出てくる |
---|
正引きゾーンの事を「前方参照ゾーン」というようだ。 知らなかった。 |
そして正引き(前方参照ゾーン)をクリックする
正引き(前方参照ゾーン)の設定画面 |
---|
ここでDNSサーバーに各ホストやレコード登録ができるのだ。 |
他にもRSATの機能があるのだが、私が理解している範囲は ユーザー登録とDNS設定だけなのだ。
最後に 今回、Samba4の話を書きました。 まだ1台もActiveDirectoryに参加させていませんが これから進めていきたいと思います。 以下の写真のように力強くオープンソース活用を 推進していきたいと思います!
2010年の神戸祭 |
---|