2013年4月22日月曜日

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

はじめに

今回は、Member Server を構築したいと思います。
そして 『Samba4 で Active Directory / PDC編- わたしもやってみた -』 で構築した
Primary Domain Controller に CentOS をドメイン参加させたいと思います。
ドメインコントローラーから見るとコンピューターアカウントになります。
前提としては、 Primary Domain Controller の構築が終わっていること
そして Samba4 と Bind のインストール、NTP の時間合わせが済んでいることとします。
まだの場合は、 『Samba4 で Active Directory / インストール編 - わたしもやってみた -』 を参考に

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

環境

Domain

レルム MYDOMAIN.LOCAL
ドメイン MYDOMAIN


Primary Server

OS ContOS 6.4(CentOS-6.4-i386-minimal.iso)
Samba 4.0.5
Bind 9.8.2
NTP ntp-4.2.6p5
Host pdc
IP 192.168.0.10
Gateway 192.168.0.1
DNS 127.0.0.1


Member Server

OS ContOS 6.4(CentOS-6.4-i386-minimal.iso)
VMware Player 5.0.2
Samba 4.0.5
Bind 9.8.2
NTP ntp-4.2.6p5
Host mbr01
IP 192.168.0.100
Gateway 192.168.0.1
DNS 192.168.0.10


環境設定

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

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

/etc/sysconfig/network-scripts/ifcfg-eth0
...
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.100
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=mbr01

そして 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.100 mbr01 mbr01.mydomain.local

今回は Primary Server の DNS を利用しようと思うので Bind を止めておく。

service named stop
chkconfig named off

そして DNS を Primary Server に設定する。
/etc ディレクトリにある resolv.conf を以下のように変更する。

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

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

reboot

ホスト名と IP 確認する。

hostname
ping mbr01
ping mbr01.mydomain.local


Kerberos の設定

Kerberos の設定ファイル krb5.conf を差し替える。
とりあえず、今の設定をバックアップして

mv /etc/krb5.conf /etc/krb5.conf_org

そして以下のような内容で /etc ディレクトリに krb5.conf を作成する。

/etc/krb5.conf
[logging]
  default = FILE:/var/log/krb5libs.log
  kdc = FILE:/var/log/krb5kdc.log
  admin_server = FILE:/var/log/kadmind.log

[libdefaults]
  default_realm = MYDOMAIN.LOCAL
  dns_lookup_realm = true
  dns_lookup_kdc = true
  ticket_lifetime = 24h
  forwardable = yes

[appdefaults]
  pam = {
    debug = false
    ticket_lifetime = 36000
    renew_lifetime = 36000
    forwardable = true
    krb4_convert = false
  }

ここで ログインと チケットの一覧を確認しておく。
administrator のパスワードは、 Primary Domain Controller 構築の時に
samba-tool domain provision で指定したものになる。

kinit administrator@MYDOMAIN.LOCAL
klist


Samba4 の設定

Member Server の設定をする。
とりあえず、samba-tool domain provision を使って
smb.conf を生成することにした。
/usr/local/samba/etc ディレクトリに smb.conf が無いことを確認する。
有れば削除する。
では、以下のコマンドで、smb.conf を生成します。

/usr/local/samba/bin/samba-tool domain provision\
  --realm=MYDOMAIN.LOCAL \
  --domain=MYDOMAIN \
  --server-role=member \
  --dns-backend=NONE \
  --adminpass 'passwd-123'

生成された smb.conf を以下のように変更する。

/usr/local/samba/etc/smb.conf
[global]
  workgroup = MYDOMAIN
  security = ads
  realm = MYDOMAIN.LOCAL
  encrypt passwords = yes

  netbios name = MBR01
  server role = member server
  passdb backend = samba_dsdb
  server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate

  idmap config *:backend = tdb
  idmap config *:range = 70001-80000

  #idmap config MYDOMAIN:backend = ad
  #idmap config MYDOMAIN:schema_mode = rfc2307
  #idmap config MYDOMAIN:range = 500-40000

  idmap config MYDOMAIN:backend = rid
  idmap config MYDOMAIN:range = 10000 - 19999

  #winbind nss info = rfc2307
  #winbind trusted domains only = no

  winbind use default domain = yes
  winbind enum users  = yes
  winbind enum groups = yes

  template homedir = /home/%U
  template shell = /bin/bash
smb.conf について

idmap config MYDOMAIN:backend = rid
RID で id と gid のマップングをすることにした。
MYDOMAIN ユーザの id と gid は、10000 ~ 19999 の範囲に
それ以外は、70001 ~ 80000 の範囲にマップングするようにした。
template homedir = /home/%U
Samba4 をドメインコントローラーで構成した場合、
%U がユーザ名に展開されず、/home ディレクトリ 直下に %U ディレクトリができしまったのだけど
Member Server の場合、これが問題なく展開された。
ユーザディレクトリは /home 以下に生成されます。

今回は、Samba4 を使わず Winbind を使うことになりそうなので
Samba4 を止めておく。

service samba4 stop
Winbind について

Member Server として、Samba4 を構成する場合、
直接 winbind を使うことになるようだ。
ソースは、Samba4 のものをビルドしているけど
これって Samba3 なの?

最後に Member Server としてドメイン参加する。

/usr/local/samba/bin/net ads join -U administrator


Winbind の設定

モジュールをコピーする。

cp /usr/local/samba/lib/libnss_winbind.so /lib
ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2
ln -s /usr/local/samba/lib/security/pam_winbind.so /lib/security
ldconfig

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

authconfig --enablewinbindauth --update

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

authconfig --enablemkhomedir --update

nsswitch.conf を編集する。
/etc ディレクトリにある nsswitch.conf を以下の部分を変更する。

/etc/nsswitch.conf
...
passwd: compat winbind
group:  compat winbind
...

やっぱり、起動スクリプトは、ほしいということで
yum でインストールされる samba 3.6.9 の Winbind の起動スクリプトを元に作成した。
変更したところは、smb.conf と winbindd のパスになる。
/etc/rc.d/init.d ディレクトリに 以下のような内容でファイルを作成し winbind の名前で保存する。

/etc/rc.d/init.d/winbind
#!/bin/sh
#
# chkconfig: - 27 73
# description: Starts and stops the Samba winbind daemon
#        #
# pidfile: /var/run/winbindd.pid
# config:  /usr/local/samba/etc/smb.conf


# Source function library.
. /etc/rc.d/init.d/functions

# Avoid using root's TMPDIR
unset TMPDIR

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 1

# Check that smb.conf exists.
[ -f /usr/local/samba/etc/smb.conf ] || exit 6

[ -f /etc/sysconfig/samba ] && . /etc/sysconfig/samba

RETVAL=0


start() {
        KIND="Winbind"
 echo -n $"Starting $KIND services: "
 daemon /usr/local/samba/sbin/winbindd "$WINBINDOPTIONS"
 RETVAL=$?
 echo
 [ $RETVAL -eq 0 ] && touch /var/lock/subsys/winbindd || RETVAL=1
 return $RETVAL
} 

stop() {
        echo
 KIND="Winbind"
 echo -n $"Shutting down $KIND services: "
 killproc winbindd
 RETVAL=$?
 [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/winbindd
 echo ""
 return $RETVAL
} 

restart() {
 stop
 start
} 

reload() {
        echo -n $"Reloading smb.conf file: "
 killproc winbindd -HUP
 RETVAL=$?
 echo
 return $RETVAL
} 

rhstatus() {
 status winbindd
 return $?
} 

# Allow status as non-root.
if [ "$1" = status ]; then
       rhstatus
       exit $?
fi

# Check that we can write to it... so non-root users stop here
[ -w /usr/local/samba/etc/smb.conf ] || exit 4

case "$1" in
  start)
   start
 ;;
  stop)
   stop
 ;;
  restart)
   restart
 ;;
  reload)
   reload
 ;;
  status)
   rhstatus
 ;;
  condrestart)
   [ -f /var/lock/subsys/winbindd ] && restart || :
 ;;
  *)
 echo $"Usage: $0 {start|stop|restart|reload|status|condrestart}"
 exit 2
esac

exit $?

サービスに登録しておく。

chmod 755 /etc/rc.d/init.d/winbind
chkconfig --add winbind
chkconfig winbind on
smbd と nmbd について

Samba4 を Member Server として構成しファイル、プリンタ共有をする場合、
smbd と nmbd を直接使うことになるようだ。
うむむ… ここまでくると、Member Server の場合は、
yum で samba3 をインストールする方が無難なのか?


CentOS でドメインログイン

まず、Winbind を起動する。

service winbind start

とりあえず、ドメインユーザとグループを確認しておこう。

/usr/local/samba/bin/wbinfo -u
/usr/local/samba/bin/wbinfo -g

では!ドメインログイン!!

ssh administrator@mbr01

uid と gid のマッピングはキャッシュされるようで
マッピングを変えてもすぐに反映されない。
そんな時は、以下のようにキャッシュを確認して

/usr/local/samba/bin/net cache list

そして、削除!

/usr/local/samba/bin/net cache flush


おわりに

なんだかんだで Samba4 はいい感じになっていると思う。
けど今後、まだ、どんどん進化していきそう。
とり残されないようにウォッチしていこう。

参考URL
https://wiki.samba.org/index.php/Samba4
https://wiki.samba.org/index.php/Samba4/Domain_Member

2013年4月21日日曜日

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

はじめに

今回は、Backup Domain Controller を構築したいと思います。
そして 『Samba4 で Active Directory / PDC編- わたしもやってみた -』 で構築した
Primary Domain Controller にドメイン参加させたいと思います。
前提としては、Primary Domain Controller の構築が終わっていること
そして Samba4 と Bind のインストール、NTP の時間合わせが済んでいることになります。
まだの場合は、 『Samba4 で Active Directory / インストール編 - わたしもやってみた -』 を参考に

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

環境

Domain

レルム MYDOMAIN.LOCAL
ドメイン MYDOMAIN


Primary Server

OS ContOS 6.4(CentOS-6.4-i386-minimal.iso)
Samba 4.0.5
Bind 9.8.2
NTP ntp-4.2.6p5
Host pdc
IP 192.168.0.10
Gateway 192.168.0.1
DNS 127.0.0.1


Backup Server

OS ContOS 6.4(CentOS-6.4-i386-minimal.iso)
VMware Player 5.0.2
Samba 4.0.5
Bind 9.8.2
NTP ntp-4.2.6p5
Host bdc01
IP 192.168.0.11
Gateway 192.168.0.1
DNS 192.168.0.10


環境設定

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

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

/etc/sysconfig/network-scripts/ifcfg-eth0
...
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.11
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=bdc01

今回は Primary Server の DNS を利用しようと思うので Bind を止めておく。

service named stop
chkconfig named off

そして DNS を Primary Server に設定する。
/etc ディレクトリにある resolv.conf を以下のように変更する。

/etc/resolv.conf
domain mydomain.local
nameserver 192.168.0.10
DNS について

今回、Primary Server に Primary Domain Controller と DNSを置いているけど
ホントは、別のサーバーにした方がいいのだろうと思う。
せっかくバックアップを構築していても Primary Server が落ちたら
DNS も死ぬので Backup Domain Controller もうまく動かなくなるのかなぁと思う。
とりあえず、データのバックアップは、しているのだし
自動フェイルオーバーまで考えなければ問題ないか?

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

reboot

Kerberos の設定

Kerberos の設定ファイル krb5.conf を差し替える。
とりあえず、今の設定をバックアップして

mv /etc/krb5.conf /etc/krb5.conf_org

そして以下のような内容で /etc ディレクトリに krb5.conf を作成する。

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

ここで ログインと チケットの一覧を確認しておく。
administrator のパスワードは、 Primary Domain Controller 構築の時に
samba-tool domain provision で指定したものになる。

kinit administrator@MYDOMAIN.LOCAL
klist

Samba4 の設定

Backup Domain Controller の設定に入ります。
ここでのポイントは、smb.conf や その他諸々のファイルの生成に
samba-tool domain provision を使わないことです。
代わりに samba-tool domain join を使います。
/usr/local/samba/etc ディレクトリに smb.conf が無いことを確認する。
有れば削除する。
念のため Samba4 を停止しておく。

service samba4 stop

では、以下のコマンドで、smb.conf や その他諸々のファイルを生成します。

/usr/local/samba/bin/samba-tool domain join mydomain.local DC \
  -Uadministrator \
  --realm=mydomain.local \
  --dns-backend=BIND9_DLZ
オプションについて

--dns-backend=BIND9_DLZ を指定しているけど
今回は、Backup Server の DNS を使用していないので不要かも?
とりあえず Bind 関連のファイルを生成しておくことにした。

smb.conf は、以下のようになる。

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

[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


DNS の設定

Backup Server の IP、ホスト名を DNS に登録していきます。
まず、IP とホスト名の関連付けから

/usr/local/samba/bin/samba-tool dns add \
  192.168.0.10 \
  mydomain.local \
  bdc01 A 192.168.0.11 \
  -Uadministrator

登録できたか確認する。

host -t A bdc01.mydomain.local.

Backup Domain Controller の objectGUID とホスト名の関連付けもする。
ldbsearch で objectGUID を調べる。

/usr/local/samba/bin/ldbsearch \
  -H /usr/local/samba/private/sam.ldb \
  '(invocationid=*)' \
  --cross-ncs objectguid

ここで CN=BDC01 の record を探す。
objectGUID が 737506d0-bfe6-40c8-815d-08c3dff7a67f だった場合
以下のような感じで objectGUID とホスト名の関連付けをする。

/usr/local/samba/bin/samba-tool dns add \
  192.168.0.10 \
  _msdcs.mydomain.local \
  737506d0-bfe6-40c8-815d-08c3dff7a67f \
  CNAME bdc01.mydomain.local \
  -Uadministrator

登録できたか確認する。

host -t CNAME 737506d0-bfe6-40c8-815d-08c3dff7a67f._msdcs.mydomain.local.

一応 ホスト名と ping で IP の確認もしておこう。

hostname
ping bdc01
ping bdc01.mydomain.local


レプリケーションの確認

とりあえず、Primary Domain Controller のSamba4、Bind を再起動する。

ssh root@pdc
service named restart
service samba4 restart
exit

Backup Domain Controller のSamba4、も再起動する。

service samba4 restart

レプリケーションを確認する。

/usr/local/samba/bin/samba-tool drs showrepl

Primary Domain Controller で追加したドメインユーザが
Backup Domain Controller にレプリケートされるか確認する。
まず、Primary Domain Controller でドメインユーザを追加する。

ssh root@pdc
/usr/local/samba/bin/samba-tool user add user01
exit

そして Backup Domain Controller で確認する。

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


CentOS でドメインログイン

Backup Domain Controller の場合も
Primary Domain Controller と同じく
ドメインユーザー情報に posixAccount スキーマ情報を追加して、
Winbind と PAM の設定が必要になるようです。
このあたりは、 『Samba4 で Active Directory / インストール編 - わたしもやってみた -』 を参考に


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/

2013年4月19日金曜日

Samba4 で Active Directory / インストール編 - わたしもやってみた -

はじめに

いつの間にか Samba4 がリリースされているではないか!
これで念願の Active Directory だ!!
仕事場では、あぁそれ Active Directory ね。
ふ~んって羨ましそうに横目にみていたのが
なんとわが家にも!
いい時代になったなぁと。

今回は、ビルドとインストール。
Samba4 HOWTO にある Build_Samba をベースに
先人の方々の情報も踏まえつつ、わたしもやってみたいと思います。
ではでは 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


環境設定

とりあえず SELinux と Fire Wall を止めておく。
ActiveDirectoryが構築できてから設定しょう…

まずは、SELinux から
/etc/selinux ディレクトリにある config ファイルを開き 以下のように変更する。

/etc/selinux/config
...
SELINUX=disabled
...

そして、Fire Wall

service iptables stop
service ip6tables stop
chkconfig iptables off
chkconfig ip6tables off

一応、確認する。

getenforce
iptables -L
ip6tables -L


ビルドに必要なライブラリーを揃える

何はともあれ yum の update から

yum update

そして、必要なライブラリーのインストール
…結構盛りだくさん。

yum install gcc libacl-devel libblkid-devel gnutls-devel \
      readline-devel python-devel gdb pkgconfig krb5-workstation \
      zlib-devel setroubleshoot-server \
      setroubleshoot-plugins policycoreutils-python \
      libsemanage-python setools-libs-python setools-libs \
      popt-devel libpcap-devel sqlite-devel libidn-devel \
      libxml2-devel libacl-devel libsepol-devel libattr-devel \
      keyutils-libs-devel cyrus-sasl-devel cups-devel

Samba4 の HOWTO 的には以上でよいらしいのだけど configure で perl が必要だといわれる。
また、バックエンドの DNS に Bind を使いたい。
それから、--with-ads も使いたい。などその他諸々で以下のライブラリーを追加することにした。

yum install bind bind-libs bind-utils wget\
      perl autoconf automake openldap-devel pam-devel


ビルドとインストール

いよいよ、Samba4 を make する。
作業フォルダは /root/work とします。
では、ソースを取ってきて展開するところまで

mkdir /root/work
cd /root/work
wget http://www.samba.org/samba/ftp/stable/samba-4.0.5.tar.gz
tar -zxvf samba-4.0.5.tar.gz
ソースの取得について

git から取ってくるのがいいらしいのだけど、チェックアウト?に時間が掛かったので
wget で gz にアーカイブされたものを取ってくることにした。

次に configure

cd /root/work/samba-4.0.5
./configure --with-ads --with-shared-modules=idmap_ad \
            --enable-debug --enable-selftest

仕上げに make と make install

make
make install

これで /usr/local/samba/ にインストールされる。
インストールできているか Version を確認してみる。

/usr/local/samba/bin/smbclient --version


起動スクリプトの作成

やっぱり、起動スクリプトは、ほしい。
ソースからインストールするとこのへんが無かったりするので大変だ!
/etc/rc.d/init.d ディレクトリに 以下のような内容でファイルを作成し samba4 の名前で保存する。

/etc/rc.d/init.d/samba4
#! /bin/bash
#
# samba4       Bring up/down samba4 service 
#
# chkconfig: - 90 10
# description: Activates/Deactivates all samba4 interfaces configured to \
#              start at boot time.
#
### BEGIN INIT INFO
# Provides: 
# Should-Start: 
# Short-Description: Bring up/down samba4
# Description: Bring up/down samba4
### END INIT INFO
# Source function library.
. /etc/init.d/functions

if [ -f /etc/sysconfig/samba4 ]; then
 . /etc/sysconfig/samba4
fi

CWD=$(pwd)
prog="samba4"

start() {
     # Attach irda device 
     echo -n $"Starting $prog: "
 /usr/local/samba/sbin/samba
 sleep 2
 if ps ax | grep -v "grep" | grep -q /samba/sbin/samba ; then success $"samba4 startup"; else failure $"samba4 startup"; fi
     echo
}
stop() {
     # Stop service.
     echo -n $"Shutting down $prog: "
 killall samba
 sleep 2
 if ps ax | grep -v "grep" | grep -q /samba/sbin/samba ; then failure $"samba4 shutdown"; else success $"samba4 shutdown"; fi
     echo
}
status() {
 /usr/local/samba/sbin/samba --show-build
}

# See how we were called.
case "$1" in
start)
 start
     ;;
stop)
 stop
     ;;
status)
 status irattach
 ;;
restart|reload)
 stop
 start
 ;;
*)
     echo $"Usage: $0 {start|stop|restart|status}"
     exit 1
esac

exit 0

サービスに登録する。

chmod 755 /etc/rc.d/init.d/samba4
chkconfig --add samba4
chkconfig samba4 on


NTP のインストール

これで、終わりと思いきや、まだ NTP の設定が必要なようです。
Active Directory では、それぞれのPCの時間が合っていないとうまく動かないとのことです。
yum でインストールしたいところなのですが
yum で入る NTP は、signed ntp が サポートされていないらしく(Version 4.2.6以上)
これがないと Active Directory の時間合わせがうまく動かないようです。
ここも、ソースからのインストールになってしまいます。

まずは、ソースを取ってきて展開するところまで
同じく作業フォルダは /root/work とします。

cd /root/work
wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.6p5.tar.gz
tar -zxvf ntp-4.2.6p5.tar.gz

次に configure そして make と make install

cd /root/work/ntp-4.2.6p5
./configure --enable-ntp-signd
make
make install

ここでもやはり、起動スクリプトがほしい…
/etc/rc.d/init.d ディレクトリに 以下のような内容でファイルを作成し ntp の名前で保存する。

/etc/rc.d/init.d/ntp
#! /bin/bash
#
# ntp Bring up/down ntp service
#
#chkconfig: - 99 30
#description: Bring up/down ntp
#
### BEGIN INIT INFO
# Provides:
# Should-Start:
# Short-Description: Bring up/down ntp
# Description: Bring up/down ntp
### END INIT INFO
# Source function library.
. /etc/init.d/functions
 
CWD=$(pwd)
NTPD=/usr/local/bin/ntpd
prog="ntp"
start() {
 # Attach irda device
 echo -n $"Starting $prog: "
 $NTPD -p /var/run/ntpd.pid
 sleep 2
 if ps ax | grep -v "grep" | grep -q $NTPD ; then success $"ntp startup"; else failure $"ntp startup"; fi
 echo
}
stop() {
# Stop service.
 echo -n $"Shutting down $prog: "
 kill -9 `cat /var/run/ntpd.pid` > /dev/null 2>&1
 sleep 2
 if ps ax | grep -v "grep" | grep -q $NTPD ; then failure $"ntp shutdown"; else success $"ntp shutdown"; fi
 echo
}
# See how we were called.
case "$1" in
start)
 start
 ;;
stop)
 stop
 ;;
restart|reload)
 stop
 start
 ;;
*)
 echo $"Usage: $0 {start|stop|restart}"
 exit 1
esac

exit 0

サービスに登録する。

chmod 755 /etc/rc.d/init.d/ntp
chkconfig --add ntp
chkconfig ntp on

設定ファイルを作成する。
ソースからインストールすると何もないようです…
/etc ディレクトリに 以下のような内容でファイルを作成し ntp.conf の名前で保存する。

/etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 10
server 0.pool.ntp.org iburst prefer
server 1.pool.ntp.org iburst prefer
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp
ntpsigndsocket /usr/local/samba/var/lib/ntp_signd/
restrict default kod nomodify notrap nopeer mssntp
restrict 127.0.0.1
restrict 0.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 1.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery

早速、確認の意味も含め時刻を合わせてみる。

ntpdate ntp.nict.jp


おわりに

やっぱり、ソースのインストールとなるといろいろ大変だなぁというのが正直なところ。
起動スクリプト、コマンドパス、ファイルパス、バージョンアップ…
yum でインストールできる日が早く来ないかなぁと思う。
イケイケの Fedora に 慎重派の CentOS わたしは、そんなイメージだ。
CentOS の yum は、まだ、先にかなぁ。

参考URL
https://wiki.samba.org/index.php/Samba4
https://wiki.samba.org/index.php/Build_Samba
https://wiki.samba.org/index.php/Samba_4/OS_Requirements
https://wiki.samba.org/index.php/Samba4/InitScript
https://wiki.samba.org/index.php/Configure_NTP
http://opentodo.net/2013/01/samba4-as-ad-domain-controller-on-centos-6/
http://d.hatena.ne.jp/rti7743/20110425/1303688263