はじめに
ここからが本番! 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 ファイルを以下のように変更する。
... 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 ファイルを以下のように変更する。
NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=pdc
そして IP とホスト名の関連付け
/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/hostsoptions { ... 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.confdomain 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
これらのモジュールがインストールされていない場合があった。
きっと、再 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 を以下のように変更する。
... 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.ldifdn: cn=Administrator,cn=Users,dc=mydomain,dc=local changetype: modify add: objectclass objectclass: posixAccount - add: gidNumber gidNumber: 10513 - add: uidNumber uidNumber: 10500
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 スキーマ情報の拡張がされていれば、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
- 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/