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