2014年5月14日水曜日

Samba4 で Active Directory / SerNet Repo でセットアップ

はじめに

Samba4.1 がリリースされていた。
またセットアップしてみようかなと Samba Wiki をぶらぶらしていると
Samba4 の yum リポジトリを公開しているサイトを見つけた。
おぉ!これは助かる!!
という訳で今回は、yum で Samba4 をしてみようと思います。
ではでは Getting Started!

yum リポジトリの設定

これがないと始まらない。
EnterpriseSamba.com というところが Samba4 yum リポジトリを公開しているようだ。
利用するためにはユーザ登録が必要になる。
このサイトの Samba のページに移動して register のリンクから  Sign up を行う。
メールアドレスの確認やなんやかんやあって一通りユーザ登録が終わったら Login してみる。
ログインしたページをよ~く見ると username と accesskey が表示されているので
これをしっかりメモっておく。
さて準備が整ったところで yum リポジトリの設定をします。
まず yum リポジトリを取得します。
以下のコマンドの USERNAME:ACCESSKEY の部分を
先ほどメモった username と accesskey に置き換えて実行します。
cd /etc/yum.repos.d
wget https://USERNAME:ACCESSKEY@download.sernet.de/packages/samba/4.1/centos/6/sernet-samba-4.1.repo
今度は、取ってきた yum リポジトリをエディタで開いて baseurl と gpgkey の
USERNAME:ACCESSKEY の部分を先ほどメモった username と accesskey に置き換えて保存します。
/etc/yum.repos.d/sernet-samba-4.1.repo
[sernet-samba-4.1]
name=SerNet Samba 4.1 Packages (centos-6)
type=rpm-md
baseurl=https://USERNAME:ACCESSKEY@download.sernet.de/packages/samba/4.1/centos/6/
gpgcheck=1
gpgkey=https://USERNAME:ACCESSKEY@download.sernet.de/packages/samba/4.1/centos/6/repodata/repomd.xml.key
enabled=1
最後に gpg build key の設定をして終わりです。
cd /root
wget http://ftp.sernet.de/pub/sernet-build-key-1.1-4.noarch.rpm
rpm -i sernet-build-key-1.1-4.noarch.rpm


インストール

といっても yum を実行するだけです。
yum install -y sernet-samba sernet-samba-ad  sernet-samba-client
/var/lib/samba ディレクトリにデータファイルがインストールされていると思います。
smb.conf は /etc/samba ディレクトリに出力されるようです。
ただ、サービス名が sernet-samba-ad、sernet-samba-smbd、sernet-samba-nmbd、sernet-samba-winbindd
となりソースからインストールした時と異なるのがちょっと微妙かなぁ。

PDC の構築

せっかくなので Primary Domain Controller も構築してみたいと思います。
環境

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

Samba 以外の設定でハマりたくないので SELinux と iptables は止めておく。
/etc/selinux/config
...
SELINUX=disabled
...
service iptables stop
service ip6tables stop
chkconfig iptables off
chkconfig ip6tables off

ネットワークの設定は次のような感じ。
/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
/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.10 pdc.mydomain.local pdc

Samba のサービスのなかで PDC で使わないものを止めておきます。
chkconfig sernet-samba-ad on
chkconfig sernet-samba-smbd off
chkconfig sernet-samba-nmbd off
chkconfig sernet-samba-winbindd off

このあたりで再起動してみる。
reboot

セットアップに必要なライブラリは一通り yum でインストールされているのだけど
Bind と NTP がインストールされていないので追加します。
Kerbors のコマンド類もインストールされていないのでそれも追加します。
NTP も signed ntp が サポートされたものが yum で提供されているようなので
合わせてインストールします。
yum install -y bind ntp krb5-workstation
サービスの起動設定をしておく。
chkconfig named on
chkconfig ntpd on

では、ドメインコントローラーの設定します。
まず、Samba が Active Directory モードで起動するように sernet-samba ファイルを編集します。
/etc/default/sernet-samba
...
SAMBA_START_MODE="ad"
...
smb.conf などドメインコントローラーに必要なファイル一式を出力します。
samba-tool domain provision \
  --use-rfc2307 \
  --function-level=2008_R2 \
  --use-ntvfs \
  --realm=MYDOMAIN.LOCAL \
  --domain=MYDOMAIN \
  --server-role=dc \
  --dns-backend=BIND9_DLZ \
  --adminpass 'passwd-123'
--use-ntvfs
--function-level=2008_R2 にした場合 --use-ntvfs オプションも必要になるみたいです。
出力された smb.conf をチェックする。
testparm
smb.conf は以下のような感じ。
/etc/samba/smb.conf
[global]
 workgroup = MYDOMAIN
 realm = MYDOMAIN.LOCAL
 netbios name = PDC
 server role = active directory domain controller
 server services = rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate, smb
 dcerpc endpoint servers = epmapper, wkssvc, rpcecho, samr, netlogon, lsarpc, spoolss, drsuapi, dssetup, unixinfo, browser, eventlog6, backupkey, dnsserver, winreg, srvsvc
 idmap_ldb:use rfc2307 = yes
 
 winbind use default domain = yes
 template shell = /bin/bash

[netlogon]
 path = /var/lib/samba/sysvol/fummy.local/scripts
 read only = No

[sysvol]
 path = /var/lib/samba/sysvol
 read only = No

Kerberos の設定ファイルが出力されているので差し替える。

mv /etc/krb5.conf /etc/krb5.conf.original
cp /var/lib/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 の設定は次のような感じ。
ソースからインストールした時と変わらないのだけど
ファイル Path が違っているのでそのあたりを確認する。
/etc/named.conf
options {
  ...
  listen-on port 53 { any; };
  ...
  allow-query     { any; };
  ...
  tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
};
...
include "/var/lib/samba/private/named.conf";
dns.keytab の権限の設定をする。
chgrp named /var/lib/samba/private/
chgrp named /var/lib/samba/private/named.conf
chmod g+r /var/lib/samba/private/dns.keytab
chown -R named:named /var/lib/samba/private/dns
/etc/rndc.key を生成する。
rndc-confgen -a -r /dev/urandom
resolv.conf の設定をする。
/etc/resolv.conf
domain mydomain.local
nameserver 127.0.0.1

Samba4、Bindを再起動する。

service sernet-samba-ad start
service named restart

ここで NTP の設定もしておこう。
ここもソースからインストールした時と変わらないのだけど
ntp_signd ディレクトリの Path が違っているのでそのあたりを確認する。
/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 /var/lib/samba/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
NTP との連動ために ntp_signd ディレクトリの権限を変更する。
時刻合せした後、NTP を起動する。
chmod 750 /var/lib/samba/ntp_signd
ntpdate ntp.nict.jp
service ntpd start

DNS を更新する。
samba_dnsupdate --verbose --all-names
更新した DNS の設定を確認する。
not found: 3(NXDOMAIN) とかが返ってこないことを確認する。
host -t SRV _ldap._tcp.mydomain.local.
host -t SRV _kerberos._udp.mydomain.local.
host -t A pdc.mydomain.local.

Kerberos のチケットを一旦クリアした後、初期化と確認をします。
administrator@MYDOMAIN.LOCAL のパスワードは今回の場合、passwd-123 になります。
kdestroy
kinit administrator@MYDOMAIN.LOCAL
klist

とりあえず以下のコマンドで ログインできれば設定は OK だ。
smbclient //localhost/netlogon -U administrator
以下のようにして administrator のパスワードの期限を無効にしておく方が検証には便利かも?
samba-tool user setexpiry --noexpiry administrator

ドメインユーザを追加してログインしてみる。
Windows からだとこの状態でもログインできるのだけれども 
CentOS からだと、もうすこし設定が必要だ。
Winbind を使ってドメインユーザがログインできるように PAM の設定する。
LANG=en_US.UTF-8 authconfig --enablewinbindauth --update
LANG=en_US.UTF-8 authconfig --enablemkhomedir --update
authconfig について
authconfig コマンドで Winbind の PAM 設定をすると
「サービス winbind に関する情報の読み込み中にエラーが発生しました: 
そのようなファイルやディレクトリはありません
winbind: 認識されていないサービスです。
error reading information on service winbind: No such file or directory
winbind: unrecognized service」
というようなエラーメッセージが表示されると思います。
原因はきっと winbind のサービス名が sernet-samba-winbindd になっているからだと思います。
なので sernet-samba-winbindd のサービス名を winbind に変更して authconfig を実行してみると
今度は「sernet-samba ファイルの SAMBA_START_MODE の設定を ad から classic に変更してほしい」的な
警告が出ます。
エラーメッセージや警告は出るものの PAM 設定自体はできている。
また、Samba AD にした場合、Winbind そのものを使う訳でもない。
この辺りは PAM 設定でなく yum のパッケージング(winbind の起動スクリプト?)の問題だと思う。
エラーメッセージや警告が気になるからといって PAM を手動で設定するのはちょっと…
またいつの日にかこの問題が解消されることを期待しましょう。
nsswitch.conf を以下のように編集して
/etc/nsswitch.conf
... 
passwd:     compat winbind
shadow:     files
group:      compat winbind
...
ドメインユーザを追加したら
samba-tool user add user01
ドメインログイン!!!
ssh user01@pdc
administrator でドメインログイン
やっぱり administrator は ssh で 自身の PDC に CentOS からドメインログインできなかった。
普通に追加したドメインユーザであればログインはできるのに。
まぁこれはこんなもんなんだろう。

Member Server の構築

Member Server も構築してみたいと思います。
先ほど構築した PDC にドメイン参加する形になります。
環境

OS ContOS 6.5(CentOS-6.5-x86_64-minimal.iso)
VMware Player 6.0.2
Samba 4.1.7
Bind 9.8.2
NTP 4.2.6p5
レルム MYDOMAIN.LOCAL
ドメイン MYDOMAIN
Host mbr01
IP 192.168.0.100
Gateway 192.168.0.1
DNS 192.168.0.10


PDC の時と同様に SELinux と iptables は一旦止めておいた方がハマらないと思う…
ネットワークの設定は次のような感じ。
/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
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=mbr01
/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.100 mbr01.mydomain.local mbr01
DNS は PDC のものを利用しようと思うので DNS を PDC に設定する。
/etc/resolv.conf
domain mydomain.local
nameserver 192.168.0.10
ipv6 を無効化しておきます。
以下のような内容で disable-ipv6.conf を作成します。
/etc/modprobe.d/disable-ipv6.conf
options ipv6 disable=1
ipv6 の無効化
ドメイン参加時に
「print_kdc_line: can't resolve name for kdc with non-default port [::]. Error 
名前またはサービスが不明です」的なエラーメッセージは出るものの 
ipv6 を無効にしなくてもドメイン参加はできているようです。
Samba のサービスのなかで Member Server で使わないものを止めておきます。
chkconfig sernet-samba-ad off
chkconfig sernet-samba-smbd off
chkconfig sernet-samba-nmbd off
chkconfig sernet-samba-winbindd on

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

追加で必要なライブラリをインストールする。
yum install -y ntp krb5-workstation
サービスの起動設定をしておく。
chkconfig ntpd on
今回の Member Server では Bind を使わないのでインストールしている場合は OFF っておいてください。

まずは、Kerberos の設定から行います。
mv /etc/krb5.conf /etc/krb5.conf.original
以下のような内容で 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
  }
Kerberos のチケットをクリアしてから初期化と確認をします。
administrator@MYDOMAIN.LOCAL のパスワードは今回の場合、passwd-123 になります。
kdestroy
kinit administrator@MYDOMAIN.LOCAL
klist

では Member Server の設定をします。
きっと Winbind を使うことになりそうなので
Samba が Classic モードで起動するように sernet-samba ファイルを編集します。
/etc/default/sernet-samba
...
SAMBA_START_MODE="classic"
...
smb.conf は以下のような感じ。
/etc/samba/smb.conf
[global]
  netbios name = MBR01
  workgroup = MYDOMAIN
  security = ads
  realm = MYDOMAIN.LOCAL
  encrypt passwords = yes

  idmap config *:backend = tdb
  idmap config *:range = 70001-80000
  idmap config MYDOMAIN:default = yes
  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 shell = /bin/bash
ドメインに参加します。
net ads join -U administrator
DNS を確認しておきます。
dig mbr01.mydomain.local
samba-tool について
Setup_a_Samba_AD_Member_Server によると 
samba-tool コマンドを使った Member Server のドメイン参加は、まだ未対応のようで
現段階では、traditional な方法でのセットアップになるみたいだ。
以下のように smb.conf など Member Server に必要なファイル一式を出力するとか
samba-tool domain provision \
  --realm=MYDOMAIN.LOCAL \
  --domain=MYDOMAIN \
  --server-role=member \
  --dns-backend=NONE \
  --adminpass 'passwd-123'
以下のようにしてドメイン参加もできないみたいだ。
samba-tool domain join mydomain.local MEMBER \
  -U administrator \
  --password=passwd-123 \
  --realm=mydomain.local
NTP の設定もしておこう。
/etc/ntp.conf
server 127.127.1.0
fudge  127.127.1.0 stratum 10

server pdc.mydomain.local iburst prefer

driftfile /var/lib/ntp/ntp.drift
logfile   /var/log/ntp

restrict default ignore
restrict 127.0.0.1
restrict pdc.mydomain.local mask 255.255.255.255 nomodify notrap nopeer noquery

設定が終わったら時刻合せをして Winbind、NTP を起動する。
ntpdate ntp.nict.jp
service ntpd start
service sernet-samba-winbindd start

ドメインユーザを追加してログインできるか確かめてみる。
Winbind の PAM を設定することになるのだけど
この状態で authconfig を使うとサービス名が違うたら無いたらふぅたらいわれる。
別に設定はできるので問題ないと思うのだが
うるさいと感じる場合はサービス名を変更してしまう。
service sernet-samba-winbindd stop
cd /etc/rc.d/init.d
cp sernet-samba-winbindd winbind
chkconfig --del sernet-samba-winbindd
chkconfig --add winbind
chkconfig winbind on
chkconfig --list
service winbind start
静になったところで Winbind の PAM の設定する。
LANG=en_US.UTF-8 authconfig --enablewinbindauth --update
LANG=en_US.UTF-8 authconfig --enablemkhomedir --update
nsswitch.conf を以下のように編集したら
/etc/nsswitch.conf
... 
passwd:     compat winbind
shadow:     files
group:      compat winbind
...
あとは PDC 側でドメインユーザを追加したら
ssh root@pdc
samba-tool user add user02
ログインして Member Server に戻ってこれればとりあえず OK だ。
ssh user02@mbr01


おわりに

微妙なところ(サービス名など)もあったが yum を使うと格段にセットアップが楽になった。
検証用には十分楽しめると思う。
しかし実運用となると MS AD を使いたいというのが本音か?!
参考URL
http://folgaizer.wordpress.com/2013/12/12/samba4-on-centos-6-4/
http://www.reddrop.net/howto_samba4_ActiveDirectory_Bind_DLZ
https://wiki.samba.org/index.php/Setup_a_Samba_AD_Member_Server
http://web.chaperone.jp/w/index.php?samba4%2Fuser