2013年4月20日土曜日

Samba4 で Active Directory / PDC編 - わたしもやってみた -

はじめに

ここからが本番! Primary Domain Controller を構築したいと思います。
前提としては、Samba4 と Bind のインストール、 NTP の時間合わせが済んでいる済んでいることになります。
まだの場合は、 『Samba4 で Active Directory / インストール編 - わたしもやってみた -』 を参考に

Samba4 HOWTO にある Samba AD DC HOWTO をベースに
先人の方々の情報も踏まえつつ、わたしもやってみたいと思います。
ではでは Getting Started!!

環境

OS ContOS 6.4(CentOS-6.4-i386-minimal.iso)
Samba 4.0.5
Bind 9.8.2
NTP ntp-4.2.6p5
レルム MYDOMAIN.LOCAL
ドメイン MYDOMAIN
Host pdc
IP 192.168.0.10
Gateway 192.168.0.1
DNS 127.0.0.1


環境設定

ネットワークを設定する。

まず IP の設定
/etc/sysconfig/network-scripts ディレクトリにある ifcfg-eth0 ファイルを以下のように変更する。

/etc/sysconfig/network-scripts/ifcfg-eth0
...
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.10
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
...

次にホスト名の設定
/etc/sysconfig ディレクトリにある network ファイルを以下のように変更する。

/etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=pdc

そして IP とホスト名の関連付け
/etc ディレクトリにある hosts ファイルを以下のように変更する。

/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.10 pdc pdc.mydomain.local

ここで一度、再起動する。

reboot

ホスト名と IP 確認する。

hostname
ping pdc
ping pdc.mydomain.local


Samba4 の設定

さて… ドメインコントローラーの設定をしますかぁ
/usr/local/samba/etc ディレクトリに smb.conf が無いことを確認する。
有れば削除する。
Server Role は ドメインコントローラー とします。
バックエンドの DNS は Bind とします。
では、以下のコマンドで、smb.conf や その他諸々のファイルを生成します。

/usr/local/samba/bin/samba-tool domain provision \
  --use-rfc2307 \
  --realm=MYDOMAIN.LOCAL \
  --domain=MYDOMAIN \
  --server-role=dc \
  --dns-backend=BIND9_DLZ \
  --adminpass 'passwd-123'

オプションについて

ここでのミソは、--use-rfc2307 を指定しているところです。
これを指定しておくと CentOS で自身のドメインにログインするのに
必要な設定を smb.conf に出力してくれるようです。

とりあえず、生成された smb.conf を確認してみる。

/usr/local/samba/bin/testparm

Kerberos の設定ファイル krb5.conf を差し替える。

mv /etc/krb5.conf /etc/krb5.conf_org
cp /usr/local/samba/private/krb5.conf /etc/krb5.conf

krb5.conf は以下のような感じ。

/etc/krb5.conf
[libdefaults]
  default_realm = MYDOMAIN.LOCAL
  dns_lookup_realm = false
  dns_lookup_kdc = true

Bind の設定

/etc ディレクトリにある named.conf を開き以下の部分を追加、変更する。

/etc/hosts
options {
  ...
  listen-on port 53 { any; };
  ...
  allow-query     { any; };
  ...
  tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab";
};
...
include "/usr/local/samba/private/named.conf";

dns.keytab の権限を変更する。

chgrp named /usr/local/samba/private/dns.keytab
chmod g+r /usr/local/samba/private/dns.keytab

/etc/rrndc.key を生成する。

rndc-confgen -a -r /dev/urandom

resolv.conf の設定をする。 /etc ディレクトリにある resolv.conf を開き以下のように変更する。

/etc/resolv.conf
domain mydomain.local
nameserver 127.0.0.1

サービスの起動設定をする。

chkconfig named on


確認

とりあえず、Samba4、Bind を再起動する。

service samba4 restart
service named restart

DNS を更新する。

/usr/local/samba/sbin/samba_dnsupdate --verbose --all-names

NTP と連動するために ntp_signd ディレクトリの権限を変更する。

chmod 750 /usr/local/samba/var/lib/ntp_signd

Samba4、Kerberos、Bind の設定を確認する。
まず、Bind から
以下のコマンドでホスト、IP が返ってくるか確認する。

host -t SRV _ldap._tcp.mydomain.local.
host -t SRV _kerberos._udp.mydomain.local.
host -t A pdc.mydomain.local.

ここでうまくいかない場合は、named.conf、resolv.conf、hosts を再確認して DNS を再更新してみる。

次に Kerberos の確認をする。
以下のコマンドで ログインと チケットの一覧を確認する。
administrator のパスワードは、samba-tool domain provision で指定したものになる。

kinit administrator@MYDOMAIN.LOCAL
klist

ここでうまくいかない場合は… う~ん krb5.conf かなぁ?
それとも smb.conf を削除して、Samba4 の設定からやり直し??

最後に Samba4 の確認をする。
以下のコマンドで ログインしてみる。
administrator のパスワードは、samba-tool domain provision で指定したものになる。
quit で終了できる。

/usr/local/samba/bin/smbclient //localhost/netlogon -Uadministrator

ここでうまくいかない場合は… 今回は無かったことに…


Windows XP でドメインログイン

Windows XP からドメインにログインしてみる。

コントロールパネル / ネットワーク接続 で DNS のIPを 192.168.0.10 (PDC)にする。
コントロールパネル / システム で コンピューター名タブを選択する。

  • 「変更」ボタンを押す。
  • ドメインに「MYDOMAIN.LOCAL」を入力し「OK」ボタンを押す。
    • ユーザ / パスワードは以下のものを入力する。
      • ユーザ名 :Administrator
      • パスワード:Samba4のAdministratorのパスワード

Windows を再起動する。
Windows のログイン画面でログイン先に MYDOMAIN を選択し Samba4 のAdministratorでログインする。


CentOS でドメインログイン

CentOS で自身のドメインにログインしてみる。

ssh administrator@pdc

これがうまくいかない。
さてさて、ここからが今回の山場!
Winbind と posixAccount の設定をしなくては、ならないようだ。

最初に Winbind と PAM の設定をする。
まずは モジュールのコピー

ln -s /usr/local/samba/lib/libnss_winbind.so.2 /lib/libnss_winbind.so
ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2
ln -s /usr/local/samba/lib/security/pam_winbind.so /lib/security
libnss_winbind.so.2 と pam_winbind.so について

これらのモジュールがインストールされていない場合があった。
きっと、再 make になるのだろうけど その際は、configure.developer を使うのだろうか?
configure の時に --with-ads --with-shared-modules=idmap_ad オプションを
指定しておくと とりあえず、インストールはされた。
openldap-devel がインストールされていれば、
特にオプションを指定しなくてもインストールされるのかもしれない。
ビルドスクリプトを解析するば分かるのだろうけど、そこまでは…

この状態で authconfig を実行すれば Winbind の PAM 関連のファイルがいい感じに更新される。

authconfig --enablewinbindauth --update

もう一点、初回ログイン時にホームディレクトリが自動作成されるに authconfig しておく。

authconfig --enablemkhomedir --update

/etc/pam.d ディレクトリにある password-auth-ac、system-auth-ac
あたりがいい感じになっているはず。
合わせて /etc/nsswitch.conf を以下のように変更する。

/etc/nsswitch.conf
...
passwd:     files winbind
group:      files winbind
shadow:     files
...

次に posixAccount スキーマ情報をドメインユーザに追加する。
ドメインユーザでCentOSにログインするには、posixAccount スキーマ情報が必要になるようだ。
Active Directory に登録されているドメインユーザ情報には、これがない。
とりあえず、administrator に posixAccount スキーマ を追加して gidNumber と uidNumber を登録してみる。
gidNumber と uidNumber は、ドメインユーザ情報の primaryGroupID と objectSid から決定する。
Samba4 には、LDAP 関連のコマンドが含まれているのでこれを利用する。
まず administrator のドメインユーザ情報を表示して primaryGroupID と objectSid を調べる。

/usr/local/samba/bin/ldbsearch -H /usr/local/samba/private/sam.ldb samaccountname=administrator

次に /root/work ディレクトリあたりに addPosixAcount.ldif 的なファイルを以下の内容で作成する。

/root/work/addPosixAcount.ldif
dn: cn=Administrator,cn=Users,dc=mydomain,dc=local
changetype: modify
add: objectclass
objectclass: posixAccount
-
add: gidNumber
gidNumber: 10513
-
add: uidNumber
uidNumber: 10500
gidNumber と uidNumber について

gidNumber は、ドメインユーザ情報の primaryGroupID を元に
また、uidNumber は、ドメインユーザ情報の objectSid の下4桁(ハイフン「-」で区切られた最後の部分)を元にして
RID のルールを想定して 10000 ~ 19999 の範囲に割り振るようにした。
例えば primaryGroupID が 513 であれば、10513 に objectSid の下4桁が 500 であれば 10500 にという感じになる。

そして ldbmodify コマンドで addPosixAcount.ldif ファイルの内容を LDAP に反映する。

/usr/local/samba/bin/ldbmodify -H /usr/local/samba/private/sam.ldb /root/work/addPosixAcount.ldif
msSFU30XXX スキーマ情報

msSFU30XXX スキーマ情報の拡張がされていれば、posixAcount スキーマ情報を追加しなくても
CentOS でドメインにログインできるのかもしれない。
新規に追加したユーザーに posixAcount スキーマ情報を追加しなくてもドメインにログインできたからだ。
なぜか administrator では、無理だった。
わたしの検証環境は、msSFU30XXX スキーマ情報の拡張された状態になっていると思う。
いろいろ試行錯誤していて Windows のツールでもって msSFU30XXX スキーマ情報を拡張したと思っている。
いつかの時点までは、新規に追加したユーザーでも posixAcount スキーマ情報がなければ
ドメインにログインできなかったように思う。
それも、今となっては、定かではない。
とりあえず、全部の PC で uid と gid が統一できるので posixAcount スキーマ情報は、
追加しておく方がよいと思う。(まぁ gid は微妙ですが…)

smb.conf は、以下のようにしておく。

/usr/local/samba/etc/smb.conf
# Global parameters
[global]
  workgroup = MYDOMAIN
  realm = MYDOMAIN.LOCAL
  netbios name = PDC
  server role = active directory domain controller
  server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate
  idmap_ldb:use rfc2307 = yes

  winbind use default domain = yes

  #template homedir = /home/%U
  template shell = /bin/bash

[netlogon]
  path = /usr/local/samba/var/locks/sysvol/mydomain.local/scripts
  read only = No

[sysvol]
  path = /usr/local/samba/var/locks/sysvol
  read only = No
smb.conf について

idmap_ldb:use rfc2307 = yes
この設定が漏れていたため、なかなかドメインログインできず結構ハマった。
samba-tool domain provision の時に --use-rfc2307 オプションを指定してさえいれば…
template homedir = /home/%U
%U がユーザ名に展開されず、/home ディレクトリ 直下に %U ディレクトリができしまう…
設定が抜けているのか ビルドに失敗しているのか バグ?なのか
とりあえず、触らぬ神に祟り無しでデフォルトのままにしています。
ユーザディレクトリは /home/MYDOMAIN 以下に生成されます。
gidNumber
なぜが gid に反映されない。
これもよく分かりません…
まぁサーバーごとに違う gid になる訳でないのでいいかな?

ドメインログイン前に Samba4 を再起動して

service samba4 restart

ログイン可能なユーザなんかを表示したりしてみて

getent passwd

ドメインログイン!!

ssh administrator@pdc

最後に uid と gid を確認しておこう。

id


おわりに

これで、Active Directory を学んでいくには十分過ぎる環境が揃ったと思う。
微妙なところがいくつか残ったがこのあたりは追々潰していこう。
新しいのと入れ替えると解消されるかなぁ。
なぁ~んて。

参考URL
https://wiki.samba.org/index.php/Samba4
http://wiki.samba.org/index.php/Samba4/HOWTO
https://wiki.samba.org/index.php/Samba4/Winbind
http://opentodo.net/2013/01/samba4-as-ad-domain-controller-on-centos-6/
http://wiki.samba.gr.jp/mediawiki/index.php
http://d.hatena.ne.jp/rti7743/20110425/1303688263
http://d.hatena.ne.jp/dicdak/20090628/1246206482
http://web.chaperone.jp/w/index.php?samba%2Fuser
http://itpro.nikkeibp.co.jp/article/COLUMN/20070125/259692/