2019年2月20日
  • Just another WordPress site

Samba4 でのActive Directory Domain Controllerの作成について【追記】

※レイアウトが崩れていたため、訂正しました。現在、14.04LTSに挑戦中です。

以前に、Samba4 でのActive Directory Domain Controllerの作成について記事を投稿しましたが、某社のミスで仮想サーバーがまるごと消去されてしまいましたので、再投稿します。その後、いろいろ分かったことを踏まえて、記事内容を追加したいと思います。

  1.  ハードウェア
    • マザーボード:Asrock 990FX/Extreme
    • CPU AMD FX-8320
    • Memory 32GB
  2. 環境

samba4

【1】Samba4のコンパイル
Ubuntu13.04でゲットできるSamba4はRC版なので、正式版(ソース版)を公式サイトからダウンロードする。投稿時点では4.0.7になっていました。コンパイルにあたっては、次のソフトをapt-get installでゲットしておく必要があるようです(ソフトウェアデザイン2013年02月号に高橋元信さんの書かれた「Samba4ファーストインプレッション」による)

libattr1-dev libacl1-dev python-dev attr krb5-user dnsutils libpopt-dev

なお、krb5-userをインストールする際に、Realm名と管理サーバー名を聞かれるので、サイト管理者はSAMBA4SVR.COM, ubuntu.samba4svr.comにしました。後から思うと、SAMBA4ADDC.COM, ubuntusvr.samba4addc.comにしておけば良かったと思って、後悔しています。
コンパイルの仕方はホームディレクトリに適当なディレクトリを作って、その中に圧縮ファィルをダウンロードします。そして、次のようにコンパイルすれば良いです。

※Ubuntu 15.10では、python-devとかその他にもライブラリが必要です。./configureに失敗した場合は必要なライブラリを指示してくれますので、その指示に従ってください。

$ tar xzvf samba-4.0.7.tar.gz
$ cd samba-4.0.7
$ ./configure
$ make
$ sudo make install

終わるまで20分程度かかりますので、コーヒーでも飲みましょう。インストール先は標準で/usr/local/sambaとなります。

【2】Active Directory Domain Controller(ADDC)の作成
最もシンプルなやり方で、次のようにすれば良いです。

$ sudo ln -s /usr/local/samba/bin/samba-tool /usr/bin 
$ sudo mv /usr/bin/smbclient /usr/bin/smbclient3
$ sudo ln -s /usr/local/samba/bin/smbclient /usr/bin
$ sudo samba-tool domain provision

ここで、レルム名を聞かれるので、SAMBA4SVR.COMと大文字で入力。DNSについては内蔵DNSを使う設定になっていますが、bindと連携させるために、BIND9_FLATFILEを選び、最後に英数字記号の入ったパスワードを入れます。そうすると、後はSamba4が必要なファイルを作ってくれて、/usr/local/bin/samba/privateに置いてくれます。

【3】bind9のインストールと連携

$ sudo apt-get install bind9
でbind9をインストールします。設定ファイルは/etc/bindに入っています。このうち、named.confの中身を次のようにします。
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.default-zones";
include "/etc/bind/named.conf.local";
include "/usr/local/samba/private/named.conf";
include "/etc/bind/rndc.key";

 

DNS設定のために不可欠なzoneファイルは/usr/local/samba/private/dns/samba4svr.com.zoneです。これが、bind9で読めるように、次の設定をします。

$ sudo chown root:bind /usr/local/samba/private/named.conf
$ sudo chown root:bind -R /usr/local/samba/private/dns

次に、/etc/bind/named.conf.optionsの最後に次の諸行を付加します。

tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab"; //←必須①
allow-query { any; };
allow-recursion { any; };
forwarders { 192.168.1.1; }; //ルーターのアドレス、外部へのnameserverのIPアドレス
//dnssec-validation no;

/usr/local/samba/private/named.txtによると、①は必須です。ただ、サイト管理者の場合、これだけでは、ADドメインに参加できなかったので(エラーが発生)、参考文献に書いてあった次の4行をつけました。最後を//でコメントしているのは、二重設定のようでbind9が起動しなかったためです。

【3】Bind9の動作の確認

bind9の動作を次のようにして確認します。

$ sudo service bind9 restart
$ host -t SRV _ldap._tcp.samba4svr.com.
_ldap._tcp.samba4svr.com has SRV record 0 100 389 ubuntu.samba4svr.com.
$ host -t SRV _ldap._tcp.dc._msdcs.samba4svr.com.
_ldap._tcp.dc._msdcs.samba4svr.com has SRV record 0 100 389 ubuntu.samba4svr.com.
$ host -t SRV _kerberos._udp.samba4svr.com.
_kerberos._udp.samba4svr.com has SRV record 0 100 88 ubuntu.samba4svr.com.
$ host -t A ubuntu.samba4svr.com.
ubuntu.samba4svr.com has address 192.168.1.2

ここで、nxdomainなどと言われたら、DNSの設定が間違っています。設定を見なおして見ましょう。

【重要】かなりの確率で上記コマンドが正常に実行されない場合があります。これは、デスクトップ環境の場合、dnsmasqという簡易DNSが動作しており、bind9とバッティングしているためです。その場合は、次の設定ファイル/etc/NetworkManager/NetworkManager.confを編集し、その中のdnsmasqをコメントアウトしてください。そして、Ubuntuを再起動してください。

また、bind9を起動させる場合に、apparamortが効いてぎ動作しなくなる場合があります。その場合は、/etc/apparmor.d/usr.sbin.namedを調節する必要があります。取り敢えず、次のように最後に付け加えるとうまく動作してくれました。

# vim:syntax=apparmor
# Last Modified: Fri Jun  1 16:43:22 2007
#include <tunables/global>

/usr/sbin/named {
  #include <abstractions/base>
  #include <abstractions/nameservice>

  capability net_bind_service,
  capability setgid,
  capability setuid,
  capability sys_chroot,
  capability sys_resource,

  # /etc/bind should be read-only for bind
  # /var/lib/bind is for dynamically updated zone (and journal) files.
  # /var/cache/bind is for slave/stub data, since we're not the origin of it.
  # See /usr/share/doc/bind9/README.Debian.gz
  /etc/bind/** r,
  /var/lib/bind/** rw,
  /var/lib/bind/ rw,
  /var/cache/bind/** lrw,
  /var/cache/bind/ rw,

  # gssapi
  /etc/krb5.keytab kr,
  /etc/bind/krb5.keytab kr,

  # ssl
  /etc/ssl/openssl.cnf r,

  # GeoIP data files for GeoIP ACLs
  /usr/share/GeoIP/** r,

  # dnscvsutil package
  /var/lib/dnscvsutil/compiled/** rw,

  /proc/net/if_inet6 r,
  /proc/*/net/if_inet6 r,
  /usr/sbin/named mr,
  /{,var/}run/named/named.pid w,
  /{,var/}run/named/session.key w,
  # support for resolvconf
  /{,var/}run/named/named.options r,

  # some people like to put logs in /var/log/named/ instead of having
  # syslog do the heavy lifting.
  /var/log/named/** rw,
  /var/log/named/ rw,

  # Site-specific additions and overrides. See local/README for details.
  #include <local/usr.sbin.named>

  # Samba4 FLATFILE and Active Directory Zones (default source installation)
  /usr/local/samba/lib/** rw,
  /usr/local/samba/private/dns.keytab r,
  /usr/local/samba/private/named.conf r,
  /usr/local/samba/private/named.conf.update r,
  /usr/local/samba/private/dns/** rwk,
}

なお、併せてkerberosの動作の確認も必要です。取り敢えず、おまじないです。

$ sudo kinit Administrator@SAMBA4SVR.COM
Password for Administrator@SAMBA4SVR.COM:
Warning: Your password will expire in 41 days on Wed Aug 28 02:44:10 2013
$ sudo klist
 Ticket cache: FILE:/tmp/krb5cc_0
Default principal: Administrator@SAMBA4SVR.COM
Valid starting Expires Service principal 17/07/2013 09:32 17/07/2013 19:32 krbtgt
SAMBA4SVR.COM@SAMBA4SVR.COM
renew until 18/07/2013 09:32

Administratorのパスワードはsamba-tool domain provisionで設定したものです。

【4】Samba4の起動スクリプト
恥ずかしながら、次のようなsmbスクリプトもどきを書いて、実行権限を与えた後、/usr/binに放り込みました。

#!/bin/bash
if [ -f /usr/local/samba/var/run/samba.pid ]; then
    /bin/rm /usr/local/samba/var/run/samba.pid
    killall samba 
fi
/usr/bin/sudo service bind9 stop
/usr/local/samba/sbin/samba
# service nmbd restart
sleep 5
/usr/bin/sudo service bind9 start

何故か、sleepがついています。samba起動直後にbind9を再起動させるとうまく行かなかったことの名残りです。

Related Post

コメント一覧

UbuntuでPython/PHPを楽しもう » Ubuntu15.04とSamba4.3.0を使って、AD DCを構築する方法【その①】2015年10月20日 1:57 PM / 返信

[…] す。この設定を前提には、SambaによるActive Directory Domain Conroller(AD DC)の構築方法につきましてはこちらの投稿記事こちら(http://www2.it-ishin.com/archives/2013/07/17/84.html)を参照しにしました。 […]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA