Category Archives: samba

Samba 4.4.xでActive Directoryを1から立てる


2014年2月、samba 4.1.xが最新だった時代に「Samba 4.xでActive Directoryを1から立てる」という記事を書いてから2年。
現状の最新はsamba 4.4.5となっている。

現在もこの手順で問題無いかの確認をした。
結論としては、必須パッケージが列挙されているところが改善され、抜けていたところもちゃんと含まれるようになっていた、という以外は、まったく同じ状態で実行できた。


Linux上でSambaを使ってActive Directoryサーバを立てるメリット
Windows Serverを買わなくてもActive Directoryを作れる
 ライセンス費用の低減
Active Directoryユーザの作成などのユーザ管理をWindowsマシンからWindows標準ツールで行える
 ユーザ作成/変更、コンピュータアカウントの作成、DNS管理など、Active Directoryの管理を行う際に
 良く使う動作については、Linuxのコマンドではなく、WindowsのActive Directory管理ツールで行える
 具体的にはADに参加しているWindowsマシンにWindows機能のActive Directory管理ツールを追加インストールしたあと、
 ADの管理者ユーザでログオンすることでAD管理を行うことができる
設定が難しくない
 いまのsambaは、DNSサーバとLDAPサーバ機能が統合されており、AD名とAD上の役割と
 管理者パスワードを決めてしまえば、あとは良きに計らってくれるので
 設定の難易度が非常に低い

ちなみに、デメリット、もあります
ActiveDirectoryの全機能が搭載されていない
 ドメイン/フォレストの機能レベルが「Windows Server 2008 R2」までとなっている。
 さらに、Failoverクラスタを作成する際に必要な機能、とかが実装されていない。

それでは、実際の手順について・・・
元ネタは公式ページの「Setup a Samba Active Directory Domain Controller」となります。

0. CentOS6の最小インストールを実施

1. /etc/hostsの修正
自ホスト名を/etc/hostsに追加
追加の際は、ショートのホスト名と、ドメイン付きのFQDNの両方を列挙すること。

[root@adserver ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.17.44.40    adserver adserver.adosakana.local
[root@adserver ~]#

2. 好みに応じて使うツールをインストール
セッションが途中で切れても良い様に「screen」と、ファイルダウンロードするためにwget(curlでもいいのですが)をインストールします。

[root@adserver ~]# yum install wget screen
<略>
[root@adserver ~]#

3. 必要なパッケージをインストール
Samba公式の「Operating system requirements/Dependencies – Libraries and programs」に記載されているパッケージをインストール

[root@adserver ~]# yum install perl gcc attr libacl-devel libblkid-devel \
    gnutls-devel readline-devel python-devel gdb pkgconfig \
    krb5-workstation zlib-devel setroubleshoot-server libaio-devel \
    setroubleshoot-plugins policycoreutils-python \
    libsemanage-python perl-ExtUtils-MakeMaker perl-Parse-Yapp \
    perl-Test-Base popt-devel libxml2-devel libattr-devel \
    keyutils-libs-devel cups-devel bind-utils libxslt \
    docbook-style-xsl openldap-devel autoconf python-crypto pam-devel
<略>
[root@adserver ~]#

4. sambaのtar.gzをダウンロード

[root@adserver ~]# wget https://download.samba.org/pub/samba/stable/samba-4.4.5.tar.gz
--2016-xx-xx xx:xx:xx--  https://download.samba.org/pub/samba/stable/samba-4.4.5.tar.gz
download.samba.org をDNSに問いあわせています... 144.76.82.156
download.samba.org|144.76.82.156|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 20715838 (20M) [application/gzip]
`samba-4.4.5.tar.gz' に保存中
100%[======================================>] 20,715,838   390K/s 時間 60s
2016-xx-xx xx:xx:xx (338 KB/s) - `samba-4.4.5.tar.gz' へ保存完了 [20715838/20715838]
[root@adserver ~]#

5. configure実施

[root@adserver ~]# tar xfz samba-4.4.5.tar.gz
[root@adserver ~]# cd samba-4.4.5
[root@adserver samba-4.4.5]# ./configure
<略>
[root@adserver samba-4.4.5]#

6. make &amp make install

[root@adserver samba-4.4.5]# make
<略>
[3956/3956] Generating man/nmblookup4.1
Note: Writing nmblookup4.1
Waf: Leaving directory `/root/samba-4.4.5/bin'
'build' finished successfully (23m25.531s)
[root@adserver samba-4.4.5]# make install
<略>
* installing bin/default/pidl/Parse::Pidl::Wireshark::NDR.3pm as /usr/local/samba/share/man/man3/Parse::Pidl::Wireshark::NDR.3pm
Waf: Leaving directory `/root/samba-4.4.5/bin'
'install' finished successfully (6m26.187s)
[root@adserver samba-4.4.5]#

7. インストール完了確認

sambaのバージョン確認

[root@adserver ~]# /usr/local/samba/sbin/samba -V
Version 4.4.5
[root@adserver ~]#

8. Active Directoryのセットアップ
ドメイン「adosakana.local」を作成します。
また、sambaの機能を使ってAD DNSを構築するので「SAMBA_INTERNAL」を選択します。

なお、「–use-rfc2307」はADにNIS連携機能を追加するオプションです。AD上にUnix用のUID/GID/shell情報なども格納できるようにします。Samba環境では有効にしておくべきものです。

[root@adserver ~]# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive
Realm [ADOSAKANA.LOCAL]:
 Domain [ADOSAKANA]:
 Server Role (dc, member, standalone) [dc]:
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
 DNS forwarder IP address (write 'none' to disable forwarding) [172.30.50.100]:
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
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=adosakana,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=adosakana,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 /usr/local/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              adserver
NetBIOS Domain:        ADOSAKANA
DNS Domain:            adosakana.local
DOMAIN SID:            S-1-5-21-98280047-2622333268-1688910966
[root@adserver ~]#

9. sambaを起動

[root@adserver ~]# ps -ef|grep samba
root     26275  6434  0 14:20 pts/0    00:00:00 grep samba
[root@adserver ~]# /usr/local/samba/sbin/samba
[root@adserver ~]# ps -ef|grep samba
root     26277     1 66 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26278 26277  2 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26279 26277  2 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26280 26278 44 14:20 ?        00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root     26281 26277  1 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26282 26277  0 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26283 26277 35 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26284 26277  0 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26285 26277  2 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26286 26277  2 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26287 26277  1 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26288 26277  0 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26289 26287 25 14:20 ?        00:00:00 /usr/local/samba/sbin/winbindd -D --option=server role check:inhibit=yes --foreground
root     26290 26277  0 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26291 26277  4 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26292 26277  1 14:20 ?        00:00:00 /usr/local/samba/sbin/samba
root     26294 26291  0 14:20 ?        00:00:00 python /usr/local/samba/sbin/samba_dnsupdate
root     26295 26291  0 14:20 ?        00:00:00 python /usr/local/samba/sbin/samba_spnupdate
root     26297  6434  0 14:20 pts/0    00:00:00 grep samba
[root@adserver ~]#

10.動作確認
CentOS内部からSMB接続を行うテストを実施。

[root@adserver ~]# /usr/local/samba/bin/smbclient --version
Version 4.4.5
[root@adserver ~]# /usr/local/samba/bin/smbclient -L localhost -U%
Domain=[ADOSAKANA] OS=[Windows 6.1] Server=[Samba 4.4.5]
        Sharename       Type      Comment
        ---------       ----      -------
        netlogon        Disk
        sysvol          Disk
        IPC$            IPC       IPC Service (Samba 4.4.5)
Domain=[ADOSAKANA] OS=[Windows 6.1] Server=[Samba 4.4.5]
        Server               Comment
        ---------            -------
        Workgroup            Master
        ---------            -------
[root@adserver ~]#

Samba 4.1.x時代は「OS=Unix」だったものが、Samba 4.4.xでは「OS=Windows 6.1」に変わっていました。

netlogon共有にAdministrator権限でアクセスできるか確認。

[root@adserver ~]# /usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter Administrator's password:
Domain=[ADOSAKANA] OS=[Windows 6.1] Server=[Samba 4.4.5]
  .                                   D        0  Tue Jul 19 14:19:16 2016
  ..                                  D        0  Tue Jul 19 14:19:26 2016
                29086704 blocks of size 1024. 25482608 blocks available
[root@adserver ~]#

11.AD DNSの動作テスト
AD DNSが想定通りに動作しているかテストします。

まず、どんなzoneが登録されているのか確認

[root@adserver ~]# /usr/local/samba/bin/samba-tool dns zonelist 127.0.0.1 -U Administrator
Password for [ADOSAKANA\Administrator]:
  2 zone(s) found
  pszZoneName                 : adosakana.local
  Flags                       : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
  ZoneType                    : DNS_ZONE_TYPE_PRIMARY
  Version                     : 50
  dwDpFlags                   : DNS_DP_AUTOCREATED DNS_DP_DOMAIN_DEFAULT DNS_DP_ENLISTED
  pszDpFqdn                   : DomainDnsZones.adosakana.local
  pszZoneName                 : _msdcs.adosakana.local
  Flags                       : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
  ZoneType                    : DNS_ZONE_TYPE_PRIMARY
  Version                     : 50
  dwDpFlags                   : DNS_DP_AUTOCREATED DNS_DP_FOREST_DEFAULT DNS_DP_ENLISTED
  pszDpFqdn                   : ForestDnsZones.adosakana.local
[root@adserver ~]#

Active Directoryで使用するDNSのSRVレコードが登録されているかをhostコマンドを使って確認。

[root@adserver ~]# host -t SRV _ldap._tcp.adosakana.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
_ldap._tcp.adosakana.local has SRV record 0 100 389 adserver.adosakana.local.
[root@adserver ~]# host -t SRV _kerberos._udp.adosakana.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
_kerberos._udp.adosakana.local has SRV record 0 100 88 adserver.adosakana.local.
[root@adserver ~]#

ADサーバのホスト名が登録されているか確認

[root@adserver ~]# host -t A adserver.adosakana.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
adserver.adosakana.local has address 172.17.44.40
[root@adserver ~]#

12. DNSサーバの変更
ADサーバの/etc/resolv.confを、ADサーバ自身を使う様に書き換え

13. /etc/krb5.conf の変更
/usr/local/samba/private/krb5.conf に元となるものがあるので、それを使用する。

[root@adserver ~]# cat /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 = EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
[realms]
 EXAMPLE.COM = {
  kdc = kerberos.example.com
  admin_server = kerberos.example.com
 }
[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM
[root@adserver ~]# cat /usr/local/samba/private/krb5.conf
[libdefaults]
        default_realm = ADOSAKANA.LOCAL
        dns_lookup_realm = false
        dns_lookup_kdc = true
[root@adserver ~]# cp /usr/local/samba/private/krb5.conf /etc/krb5.conf
cp: `/etc/krb5.conf' を上書きしてもよろしいですか(yes/no)? y
[root@adserver ~]# cat /etc/krb5.conf
[libdefaults]
        default_realm = ADOSAKANA.LOCAL
        dns_lookup_realm = false
        dns_lookup_kdc = true
[root@adserver ~]#

14. Kerberosの動作確認

kinitコマンドを実行して確認します。

[root@adserver ~]# kinit administrator@ADOSAKANA.LOCAL
Password for administrator@ADOSAKANA.LOCAL:
Warning: Your password will expire in 41 days on Tue Aug 30 14:19:24 2016
[root@adserver ~]#

正常に設定されていれば、上記の様にAdministratorユーザのパスワード有効期限が表示されます。

ドメイン名指定の大文字/小文字を間違えると下記の様なエラーとなります。

[root@adserver ~]# kinit administrator@adosakana.local
Password for administrator@adosakana.local:
kinit: KDC reply did not match expectations while getting initial credentials
[root@adserver ~]#

また、DNSサーバ指定が誤っている場合は下記の様なエラーです。

[root@adserver ~]# kinit administrator@ADOSAKANA.LOCAL
kinit: Cannot resolve servers for KDC in realm "ADOSAKANA.LOCAL" while getting initial credentials
[root@adserver ~]#

「klist」コマンドを実行することでも確認出来ます。

[root@adserver ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@ADOSAKANA.LOCAL
Valid starting     Expires            Service principal
07/19/16 14:28:32  07/20/16 00:28:32  krbtgt/ADOSAKANA.LOCAL@ADOSAKANA.LOCAL
        renew until 07/20/16 14:28:28
[root@adserver ~]#

15. フォレストとドメインの機能レベル確認
作成したActive Directoryのドメインの機能レベルとフォレストの機能レベルを確認します。

[root@adserver ~]# /usr/local/samba/bin/samba-tool domain level show
Domain and forest function level for domain 'DC=adosakana,DC=local'
Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
[root@adserver ~]#

Samba 4.4.5では、Windows Sevrer 2008R2と設定されているようです。
(Samba 4.1.x時代はWindows Server 2003でした)

以上で設定は終了です。

samba 4.xのデータバックアップ手法


samba 4.xにおけるデータのバックアップ手法を調べた。

まず、公式記述:「Backup and Recovery

公式記述の要点
・ドメインコントローラを複数用意すれば、どれか1台でも残っていればデータは保持されるので失われることはないよ
・sambaの内部データベースとしてLDBとTDBの2種類ある
・標準ではインストールされないがsourceにsamba_backupというスクリプトが用意されている
・samba_backupを実行すると/usr/local/backupsにtar.bz2形式のバックアップができる
・リストアは、tarコマンドを使って行う

で、samba_backupを使うには、ソースファイルのディレクトリから/usr/local/sbinなどにコピーする必要があります。

[root@ホスト名 samba-4.1.16]# cp ./source4/scripting/bin/samba_backup /usr/local/sbin/
[root@ホスト名 samba-4.1.16]# mkdir /usr/local/backups
[root@ホスト名 samba-4.1.16]# chmod 750 /usr/local/backups
[root@ホスト名 samba-4.1.16]# 

ただ・・・このまま実行すると

samba_backup: line 54: tdbbackup: コマンドが見つかりません
Error while backuping ./private/idmap.ldb

といったエラーが出力されるかも?

これは、tdbbackupがPATHに無いため。
samba_backupスクリプトのWHERE=~行の次ぐらいに
「PATH=/usr/local/samba/sbin:/usr/local/samba/bin:$PATH」といった記述を追加して、tdbbackupコマンドにパスを通します。

[root@ホスト名samba-4.1.15]# /usr/local/sbin/samba_backup
[root@ホスト名 samba-4.1.15]# ls -l /usr/local/backups/
合計 5912
-rw-r--r--. 1 root root     415  3月 12 10:12 2015 etc.120315.tar.bz2
-rw-r--r--. 1 root root 6043216  3月 12 10:12 2015 samba4_private.120315.tar.bz2
-rw-r--r--. 1 root root     481  3月 12 10:12 2015 sysvol.120315.tar.bz2
[root@ホスト名 samba-4.1.15]#

samba 4.xでドメイン/フォレストの機能レベルを変更する


2016/07/19追記

Samba 4.4.5における現状についてを「Samba 4.4.xでActive Directoryを1から立てる」にて公開中です。


Samba 4.xでActive Directoryを1から立てる」で作成したActive Directoryは、ドメインの機能レベル/フォレストの機能レベルが共に「Windows Server 2003」となっていた。

Sambaのコマンドで確認すると、以下の様になっていた。

[root@adtest ~]# /usr/local/samba/bin/samba-tool domain level show
Domain and forest function level for domain 'DC=adosakana,DC=local'
Forest function level: (Windows) 2003
Domain function level: (Windows) 2003
Lowest function level of a DC: (Windows) 2008 R2
[root@adtest ~]#

で・・・2014年5月現在、機能レベルの変更をWindowsから行うことはできないらしい。

samba公式Wikiの「Raising the functional levels」に「Hint: This way does not work at the moment! 」として注意書きがついている。

samba-toolコマンドで変更する、とのこと。
samba 4.1.7の段階で指定できる機能レベルは’2003′, ‘2008’, ‘2008_R2’の3種類。

まずは、ドメインレベルの上昇から・・・

[root@adtest ~]# /usr/local/samba/bin/samba-tool domain level raise --domain-level=2008_R2
Domain function level changed!
All changes applied successfully!
[root@adtest ~]# /usr/local/samba/bin/samba-tool domain level show
Domain and forest function level for domain 'DC=adosakana,DC=local'
Forest function level: (Windows) 2003
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
[root@adtest ~]#

続いて、フォレストレベル・・・

[root@adtest ~]# /usr/local/samba/bin/samba-tool domain level raise --forest-level=2008_R2
Forest function level changed!
All changes applied successfully!
[root@adtest ~]# /usr/local/samba/bin/samba-tool domain level show
Domain and forest function level for domain 'DC=adosakana,DC=local'
Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
[root@adtest ~]#

ちなみに、先にフォレストレベルを上げようとすると、以下の様なエラーとなります。

[root@adtest ~]# /usr/local/samba/bin/samba-tool domain level raise --forest-level="2008_R2"
ERROR: Forest function level can't be higher than the domain function level(s). Please raise it/them first!
[root@adtest ~]#

Samba 4.0で必要なポートとRHEL用iptables設定


Samba 4.0で必要なポートについて、Sambaの公式wiki「Samba port usage」を参考に設定を作成した。

とりあえず、上記のページから必要なポートについて引用

ServicePortprotocol
DNS53tcp/udp
Kerberos88tcp/udp
End Point Mapper (DCE/RPC Locator Service)135tcp
NetBIOS Name Service137udp
NetBIOS Datagram138udp
NetBIOS Session139tcp
LDAP389tcp/udp
SMB over TCP445tcp
Kerberos kpasswd464tcp/udp
LDAPS (only if “tls enabled = yes”)636tcp
Global Cataloge3268tcp
Global Cataloge SSL (only if “tls enabled = yes”)3269tcp
Multicast DNS5353tcp/udp

また、Microsoft公式の「Windows のサービス概要およびネットワーク ポート要件」も参照して、必要そうなポートについて、以下のように設定した。

# for DNS
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
# for Kerberos
-A INPUT -p udp -m udp --dport 88 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 88 -j ACCEPT
-A INPUT -p udp -m udp --dport 464 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 464 -j ACCEPT
# for LDAP
-A INPUT -p udp -m udp --dport 389 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 389 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 636 -j ACCEPT
# for SMB
#-A INPUT -p udp -m udp --dport 137 -j ACCEPT
#-A INPUT -p udp -m udp --dport 138 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 445 -j ACCEPT
# for RPC and SYSVOL
-A INPUT -p tcp -m tcp --dport 135 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5722 -j ACCEPT
# for Global Catalog
-A INPUT -p tcp -m tcp --dport 3268 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3269 -j ACCEPT
# for Multicast DNS
-A INPUT -p udp -m udp --dport 5353 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5353 -j ACCEPT

上記をRHEL/CentOSの/etc/sysconfig/iptablesの適切な位置に追加する。

for SMBのUDP 137,138については、samba wikiの方にいるポートとして記載されているが、無くても動くようなのでコメントにしている。

Samba 4.xでActive Directoryを1から立てる


LinuxでActive Directoryサーバを立てることにした。
アプライアンスとして作られているものがあるのは知ってるけど、あえて、それは使わないことにし、CentOS6で環境を作ることにした。

メリットについて上げてみる。
・samba 4.xでは、DNSサーバ/LDAPサーバ機能を統合してしまっているので
 sambaの設定をするだけでおしまい
・Active Directoryユーザの作成などは、ADに参加しているWindowsマシンに管理者ユーザでログオンし
 その端末にインストールしたActive Directory管理ツールから行える。

えぇ、bindの設定とかopenldapの設定とか、気にしなくていいんです。
(ただし、小規模の場合。大規模になると、パフォーマンスの問題でbindも使った方がいいらしい。openldapは機能が足らないせいでお役御免です)
(追記: WindowsServer2012のクラスタリングのためには使えませんでした)


では、「Samba AD DC HOWTO」を見ながらセットアップ。

1. 関連ソフトウェアパッケージのインストール
Sambaをセットアップするにあたり必要な周辺ソフトウェア群の準備を行う。
Samba 4/OS Requirements」を参考にパッケージをインストールしていく。

CentOS6.5の最小インストール状態なので、いろいろ追加していくことになる。

設定中、sshセッションが切れたりすることがあるかもしれないので「screen」を追加。

# yum install screen 

Requirementsに記載されているパッケージを追加。

# yum install gcc libacl-devel libblkid-devel gnutls-devel \
   readline-devel python-devel gdb pkgconfig krb5-workstation \
   zlib-devel setroubleshoot-server libaio-devel \
   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 bind-utils

ドキュメントの製作で使うらしい以下のパッケージも追加

# yum install docbook-style-xsl libxslt

2. ファイルシステムのマウントオプション調整
Sambaで利用したいファイルシステムのマウントオプションを調整する。
Samba 4/OS Requirements」の「File System Support」に記載されているようにext3/ext4の場合、「user_xattr,acl,barrier=1」オプションをつけてマウントしろ、とのこと。

CentOS6の場合、標準状態では、以下のように/etc/fstabで指定されていた。

UUID=080add24-43d7-4502-aa31-2e7a4b9116d5 /home                   ext4    defaults        1 2

この場合、/proc/mountsで確認できるマウント状況は、以下の様になっている。

/dev/sdb1 /home ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0

「user_xattr,acl」が足らないようなので/etc/fstabを以下のように書き換えた。

UUID=080add24-43d7-4502-aa31-2e7a4b9116d5 /home                   ext4    user_xattr,acl,barrier=1         1 2

が、/proc/mounts は同じ状態。

/dev/sdb1 /home ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0

mount -vではきちんと反映されているように見えるという点が非常に謎。

/dev/sdb1 on /home type ext4 (rw,user_xattr,acl,barrier=1)

以下の様にテストを実行し、このような出力結果が出れば問題ない、とのことなので、上記のマウントの件は問題なし、とした。

# touch test.txt
# setfattr -n user.test -v test test.txt
# setfattr -n security.test -v test2 test.txt
# getfattr -d test.txt
# file: test.txt
user.test="test"
# getfattr -n security.test -d test.txt
# file: test.txt
security.test="test2"
# touch test3.txt
# setfacl -m g:adm:rwx test3.txt
# getfacl test3.txt
# file: test3.txt
# owner: root
# group: root
user::rw-
group::r--
group:adm:rwx
mask::rwx
other::r--
#

3. ソース取得
wgetでsamba 4.1.5のソースを取得。

# wget http://ftp.samba.org/pub/samba/samba-4.1.5.tar.gz

4. configure

# tar xfz samba-4.1.5.tar.gz
# cd samba-4.1.5
# ./configure

で構成情報取得。

Requirementにある以外に必要となったもの。

# yum install perl openldap-devel

以下はあったほうがいいのかなぁ?という感じのもの。

# yum install pam-devel

ちなみに「openldap-devel」をインストールしないと、以下のメッセージが出て、Active Directory機能が使えないので注意。

# ./configure
<略>
Active Directory support not available: LDAP support ist not available.
Building without Active Directory support.
<略>
#

5. make & make install

# make
<略>
# make install
<略>
#

6.インストール完了確認
sambaのバージョン確認

# /usr/local/samba/sbin/samba -V
Version 4.1.5
#

7. Active Directoryのセットアップ
ドメイン「adosakana.local」を作成します。
また、sambaの機能を使ってAD DNSを構築するので「SAMBA_INTERNAL」を選択します。

# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive
Realm: adosakana.local
 Domain [adosakana]:
 Server Role (dc, member, standalone) [dc]:
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
 DNS forwarder IP address (write 'none' to disable forwarding) [172.30.50.100]:
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
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=adosakana,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=adosakana,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 /usr/local/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              adcent6
NetBIOS Domain:        ADOSAKANA
DNS Domain:            adosakana.local
DOMAIN SID:            S-1-5-21-3559328066-3556283577-2939567822
#

8. sambaを起動

# /usr/local/samba/sbin/samba
# ps -ef|grep samba
root      5516     1  4 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5517  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5518  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5519  5517  4 11:08 ?        00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root      5520  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5521  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5522  5516  6 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5523  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5524  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5525  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5526  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5527  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5528  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5529  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5530  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
root      5534  5519  0 11:08 ?        00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root      5537  1081  0 11:08 pts/1    00:00:00 grep samba
#

9. 動作確認
CentOS内部からSMB接続を行うテストを実施。

# /usr/local/samba/bin/smbclient --version
Version 4.1.5
# /usr/local/samba/bin/smbclient -L localhost -U%
Domain=[ADOSAKANA] OS=[Unix] Server=[Samba 4.1.5]
        Sharename       Type      Comment
        ---------       ----      -------
        netlogon        Disk
        sysvol          Disk
        IPC$            IPC       IPC Service (Samba 4.1.5)
Domain=[ADOSAKANA] OS=[Unix] Server=[Samba 4.1.5]
        Server               Comment
        ---------            -------
        Workgroup            Master
        ---------            -------
#

もう1つ。
netlogon共有にAdministrator権限でアクセスできるか確認。

# /usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter Administrator's password:
Domain=[ADOSAKANA] OS=[Unix] Server=[Samba 4.1.5]
  .                                   D        0  Tue Feb 25 11:06:38 2014
  ..                                  D        0  Tue Feb 25 11:06:48 2014
                35275 blocks of size 524288. 31250 blocks available
#

10.AD DNSの動作テスト
AD DNSが想定通りに動作しているかテストします。

まず、どんなzoneが登録されているのか確認

# /usr/local/samba/bin/samba-tool dns zonelist 127.0.0.1 -U Administrator
Password for [ADOSAKANA\Administrator]:
  2 zone(s) found
  pszZoneName                 : adosakana.local
  Flags                       : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
  ZoneType                    : DNS_ZONE_TYPE_PRIMARY
  Version                     : 50
  dwDpFlags                   : DNS_DP_AUTOCREATED DNS_DP_DOMAIN_DEFAULT DNS_DP_ENLISTED
  pszDpFqdn                   : DomainDnsZones.adosakana.local
  pszZoneName                 : _msdcs.adosakana.local
  Flags                       : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
  ZoneType                    : DNS_ZONE_TYPE_PRIMARY
  Version                     : 50
  dwDpFlags                   : DNS_DP_AUTOCREATED DNS_DP_FOREST_DEFAULT DNS_DP_ENLISTED
  pszDpFqdn                   : ForestDnsZones.adosakana.local
#

Active Directoryで使用するDNSのSRVレコードが登録されているか確認。

# host -t SRV _ldap._tcp.adosakana.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
_ldap._tcp.adosakana.local has SRV record 0 100 389 adcent6.adosakana.local.
# host -t SRV _kerberos._udp.adosakana.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
_kerberos._udp.adosakana.local has SRV record 0 100 88 adcent6.adosakana.local.
#

ADサーバのホスト名が登録されているか確認

# host -t A adcent6.adosakana.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
adcent6.adosakana.local has address 172.17.44.216
#

11. DNSサーバの変更
ADサーバの/etc/resolv.confを、ADサーバ自身を使う様に書き換え

12. /etc/krb5.conf の変更
/usr/local/samba/private/krb5.conf にあるので、それを使用する。

# cat /usr/local/samba/private/krb5.conf
[libdefaults]
        default_realm = ADOSAKANA.LOCAL
        dns_lookup_realm = false
        dns_lookup_kdc = true
# cp /usr/local/samba/private/krb5.conf /etc/krb5.conf
cp: `/etc/krb5.conf' を上書きしてもよろしいですか(yes/no)? y
#

13. Kerberosの動作確認

# kinit administrator@ADOSAKANA.LOCAL
Password for administrator@ADOSAKANA.LOCAL:
Warning: Your password will expire in 41 days on Tue Apr  8 11:06:46 2014
#

正常に設定されていれば、Administratorユーザのパスワード有効期限が表示されます。

例えば、DNSサーバの指定が誤っていると、以下のエラーとなります。

# kinit administrator@ADOSAKANA.LOCAL
kinit: Cannot resolve servers for KDC in realm "ADOSAKANA.LOCAL" while getting initial credentials
#

これは、kinitは、DNSサーバに登録されているkerberos関連のSRVレコードを読みにいくためです。

# kinit administrator@adosakana.local
kinit: KDC reply did not match expectations while getting initial credentials
#

こっちのメッセージがでる場合は、ドメイン名を小文字で指定していることが原因です。
大文字で指定し直します。

なお、kinitではなく、「klist」コマンドで一覧表示も可能です。

# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@ADOSAKANA.LOCAL
Valid starting     Expires            Service principal
02/25/14 11:42:49  02/25/14 21:42:49  krbtgt/ADOSAKANA.LOCAL@ADOSAKANA.LOCAL
        renew until 03/04/14 11:42:46
#

以上で、Active Directoryサーバとしての設定は終了でした。

このあと、Windows Server 2012を、この作成したばかりのADOSAKANA.LOCALに参加させたところ、正常に参加できました。


2014/05/08追記

この手順で作成した場合、ドメイン/フォレストの機能レベルは「Windows Server 2003」になります。
samba 4.1.7においては、「Windows Server 2008 R2」まで上げることができます。
手順については、「samba 4.xでドメイン/フォレストの機能レベルを変更する」にて解説しています。