Samba4.0でドメインコントローラーの実現

2013年5月14日

2012/12/11にSamba4.0がリリースされました。6年の歳月を費やしたそうです。
私自身Sambaには苦い思い出しかないのですが、ActiveDirectoryのドメインコントローラー機能が出来るそうです。

主な機能は以下となります。

  • グループポリシー機能
  • RSATによるAD DC管理
  • DRSによる複製機能
  • BIND9と連携したDNS自動更新機能
  • RODC(Read Only Domain Controller)機能
  • s3fs(Samba3 File Server)モジュールによるファイルサーバー機能
  • Samba3からのユーザー、端末情報の移行

 

Samba4.0のリリースにより、WindowsサーバーライセンスとCAL(クライアントアクセスライセンス)が不要になるので、コスト削減が出来るかもしれない。

基本的な構築方法は以下となります。

Samba4.0のインストール

EPELリポジトリを有効にする

# rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# wget http://wing-net.ddo.jp/wing/6/EL6.wing.repo
# vi EL6.wing.repo
-----------------------
[wing]
name=EL $releasever - $basearch - wing Repository
baseurl=http://wing-net.ddo.jp/wing/$releasever/$basearch/
enabled=1 ←1にする
gpgcheck=0
priority=2

[wing-source]
name=EL $releasever - $basearch - wing source Repository
baseurl=http://wing-net.ddo.jp/wing/$releasever/SRPMS/
enabled=1 ←1にする
gpgcheck=0
priority=2
-----------------------

yumでインストール

# yum install samba4 samba4-client samba4-common samba4-dc samba4-dc-libs samba4-libs samba4-python ldb-tools krb5-workstation

インストール結果

# rpm -qa | grep samba4
samba4-libs-4.0.5-1.el6_7.wing.x86_64
samba4-dc-4.0.5-1.el6_7.wing.x86_64
samba4-common-4.0.5-1.el6_7.wing.x86_64
samba4-4.0.5-1.el6_7.wing.x86_64
samba4-python-4.0.5-1.el6_7.wing.x86_64
samba4-dc-libs-4.0.5-1.el6_7.wing.x86_64
samba4-client-4.0.5-1.el6_7.wing.x86_64

Samba4設定に入る前の事前準備

DNS情報とDOMAIN名をifcfg-eth0に記述します。

# cd /etc/sysconfig/network-scripts/
# vi ifcfg-eth0
-----------------------
DNS1="127.0.0.1"
DNS2="192.168.255.10"
DOMAIN="is-dc.local"
-----------------------

# /etc/init.d/network restart

あと、忘れてはいけないのが、時刻同期。時刻が正確でないと、正常稼働しません。
ntpなどで時刻同期がされるようにしてください。

samba4の設定

samba-toolを利用し、ドメインを構築します。
今回ドメインを『is-dc.local』とします。サーバー自身のホスト名は『test-is』で、IPは『192.168.255.34』となります。

# samba-tool domain provision
----------------------------------------------
Realm [EXAMPLE.JP]: is-dc.local ←ドメイン入力
 Domain [is-dc]: ←Enter
 Server Role (dc, member, standalone) [dc]: ←Enter
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: ←Enter
 DNS forwarder IP address (write 'none' to disable forwarding) [127.0.0.1]: ←Enter
Administrator password: ※英数字記号じゃないとダメ
Retype password: ※英数字記号じゃないとダメ
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=is-dc,DC=local
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=is-dc,DC=local
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              test-is
NetBIOS Domain:        IS-DC
DNS Domain:            is-dc.local
DOMAIN SID:            S-1-5-21-**********-**********-**********
----------------------------------------------

不要なログが出るのでsmb.confを修正

# vi /etc/samba/smb.conf
----------------------------------------------
# Global parameters
[global]
        workgroup = IS-DC
        realm = IS-DC.LOCAL
        netbios name = TEST-IS
        server role = active directory domain controller
        dns forwarder = 127.0.0.1
        printing = bsd  ←追加

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

[sysvol]
        path = /var/lib/samba/sysvol
        read only = No
----------------------------------------------
# /etc/init.d/samba restart

Kerberosの設定

# vi 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 = IS-DC.LOCAL
 dns_lookup_realm = false
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 IS-DC.LOCAL = {
  kdc = test-is.is-dc.local  ←Hostname + DNS Domain
 }

[domain_realm]
 .is-dc.local = IS-DC.LOCAL
 is-dc.local = IS-DC.LOCAL
----------------------------------------------

Kerberosの設定が正しいか確認

# kinit administrator@IS-DC.LOCAL
Password for administrator@IS-DC.LOCAL:
Warning: Your password will expire in 41 days on Wed Jun 19 15:18:33 2013

正常にチケットが取得出来ればklistで以下の様に表示される

# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@IS-DC.LOCAL

Valid starting     Expires            Service principal
05/08/13 15:34:21  05/09/13 01:34:21  krbtgt/IS-DC.LOCAL@IS-DC.LOCAL
        renew until 05/15/13 15:34:14

 

DNSの登録状況の確認

# samba-tool dns query 127.0.0.1 is-dc.local @ A -U administrator
Password for [IS-DC\administrator]:
  Name=, Records=1, Children=0
    A: 192.168.255.43 (flags=600000f0, serial=1, ttl=900)
  Name=_msdcs, Records=0, Children=0
  Name=_sites, Records=0, Children=1
  Name=_tcp, Records=0, Children=4
  Name=_udp, Records=0, Children=2
  Name=DomainDnsZones, Records=0, Children=2
  Name=ForestDnsZones, Records=0, Children=2
  Name=test-is, Records=1, Children=0
    A: 192.168.255.43 (flags=f0, serial=1, ttl=900)

ユーザ追加

# samba-tool user add testuser
New Password:※英数字記号じゃないとダメ
Retype Password:※英数字記号じゃないとダメ
User 'testuser' created successfully

ユーザリスト

# samba-tool user list
Administrator
testuser
krbtgt
Guest

※Windows端末をドメイン参加させる場合、ネットワークアダプタのWins設定で、構築したドメコンのIPを指定する必要がある。