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

このコンテンツの更新版として「Samba 4.7.xでActive Directoryを1から立てる」(2018/03/02)を公開しています。


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」を追加。

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

1# yum install gcc libacl-devel libblkid-devel gnutls-devel \
2   readline-devel python-devel gdb pkgconfig krb5-workstation \
3   zlib-devel setroubleshoot-server libaio-devel \
4   setroubleshoot-plugins policycoreutils-python \
5   libsemanage-python setools-libs-python setools-libs \
6   popt-devel libpcap-devel sqlite-devel libidn-devel \
7   libxml2-devel libacl-devel libsepol-devel libattr-devel \
8   keyutils-libs-devel cyrus-sasl-devel cups-devel bind-utils

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

1# 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で指定されていた。

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

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

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

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

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

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

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

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

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

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

1# touch test.txt
2# setfattr -n user.test -v test test.txt
3# setfattr -n security.test -v test2 test.txt
4# getfattr -d test.txt
5# file: test.txt
6user.test="test"
7 
8# getfattr -n security.test -d test.txt
9# file: test.txt
10security.test="test2"
11 
12# touch test3.txt
13# setfacl -m g:adm:rwx test3.txt
14# getfacl test3.txt
15# file: test3.txt
16# owner: root
17# group: root
18user::rw-
19group::r--
20group:adm:rwx
21mask::rwx
22other::r--
23 
24#

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

4. configure

1# tar xfz samba-4.1.5.tar.gz
2# cd samba-4.1.5
3# ./configure

で構成情報取得。

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

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

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

1# ./configure
2<略>
3Active Directory support not available: LDAP support ist not available.
4Building without Active Directory support.
5<略>
6#

5. make & make install

1# make
2<略>
3# make install
4<略>
5#

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

1# /usr/local/samba/sbin/samba -V
2Version 4.1.5
3#

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

1# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive
2Realm: adosakana.local
3 Domain [adosakana]:
4 Server Role (dc, member, standalone) [dc]:
5 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
6 DNS forwarder IP address (write 'none' to disable forwarding) [172.30.50.100]:
7Administrator password:
8Retype password:
9Looking up IPv4 addresses
10Looking up IPv6 addresses
11No IPv6 address will be assigned
12Setting up share.ldb
13Setting up secrets.ldb
14Setting up the registry
15Setting up the privileges database
16Setting up idmap db
17Setting up SAM db
18Setting up sam.ldb partitions and settings
19Setting up sam.ldb rootDSE
20Pre-loading the Samba 4 and AD schema
21Adding DomainDN: DC=adosakana,DC=local
22Adding configuration container
23Setting up sam.ldb schema
24Setting up sam.ldb configuration data
25Setting up display specifiers
26Modifying display specifiers
27Adding users container
28Modifying users container
29Adding computers container
30Modifying computers container
31Setting up sam.ldb data
32Setting up well known security principals
33Setting up sam.ldb users and groups
34Setting up self join
35Adding DNS accounts
36Creating CN=MicrosoftDNS,CN=System,DC=adosakana,DC=local
37Creating DomainDnsZones and ForestDnsZones partitions
38Populating DomainDnsZones and ForestDnsZones partitions
39Setting up sam.ldb rootDSE marking as synchronized
40Fixing provision GUIDs
41A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf
42Setting up fake yp server settings
43Once the above files are installed, your Samba4 server will be ready to use
44Server Role:           active directory domain controller
45Hostname:              adcent6
46NetBIOS Domain:        ADOSAKANA
47DNS Domain:            adosakana.local
48DOMAIN SID:            S-1-5-21-3559328066-3556283577-2939567822
49#

8. sambaを起動

1# /usr/local/samba/sbin/samba
2# ps -ef|grep samba
3root      5516     1  4 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
4root      5517  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
5root      5518  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
6root      5519  5517  4 11:08 ?        00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground
7root      5520  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
8root      5521  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
9root      5522  5516  6 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
10root      5523  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
11root      5524  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
12root      5525  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
13root      5526  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
14root      5527  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
15root      5528  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
16root      5529  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
17root      5530  5516  0 11:08 ?        00:00:00 /usr/local/samba/sbin/samba
18root      5534  5519  0 11:08 ?        00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground
19root      5537  1081  0 11:08 pts/1    00:00:00 grep samba
20#

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

1# /usr/local/samba/bin/smbclient --version
2Version 4.1.5
3# /usr/local/samba/bin/smbclient -L localhost -U%
4Domain=[ADOSAKANA] OS=[Unix] Server=[Samba 4.1.5]
5 
6        Sharename       Type      Comment
7        ---------       ----      -------
8        netlogon        Disk
9        sysvol          Disk
10        IPC$            IPC       IPC Service (Samba 4.1.5)
11Domain=[ADOSAKANA] OS=[Unix] Server=[Samba 4.1.5]
12 
13        Server               Comment
14        ---------            -------
15 
16        Workgroup            Master
17        ---------            -------
18#

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

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

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

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

1# /usr/local/samba/bin/samba-tool dns zonelist 127.0.0.1 -U Administrator
2Password for [ADOSAKANA\Administrator]:
3  2 zone(s) found
4 
5  pszZoneName                 : adosakana.local
6  Flags                       : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
7  ZoneType                    : DNS_ZONE_TYPE_PRIMARY
8  Version                     : 50
9  dwDpFlags                   : DNS_DP_AUTOCREATED DNS_DP_DOMAIN_DEFAULT DNS_DP_ENLISTED
10  pszDpFqdn                   : DomainDnsZones.adosakana.local
11 
12  pszZoneName                 : _msdcs.adosakana.local
13  Flags                       : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
14  ZoneType                    : DNS_ZONE_TYPE_PRIMARY
15  Version                     : 50
16  dwDpFlags                   : DNS_DP_AUTOCREATED DNS_DP_FOREST_DEFAULT DNS_DP_ENLISTED
17  pszDpFqdn                   : ForestDnsZones.adosakana.local
18#

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

1# host -t SRV _ldap._tcp.adosakana.local 127.0.0.1
2Using domain server:
3Name: 127.0.0.1
4Address: 127.0.0.1#53
5Aliases:
6 
7_ldap._tcp.adosakana.local has SRV record 0 100 389 adcent6.adosakana.local.
8# host -t SRV _kerberos._udp.adosakana.local 127.0.0.1
9Using domain server:
10Name: 127.0.0.1
11Address: 127.0.0.1#53
12Aliases:
13 
14_kerberos._udp.adosakana.local has SRV record 0 100 88 adcent6.adosakana.local.
15#

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

1# host -t A adcent6.adosakana.local 127.0.0.1
2Using domain server:
3Name: 127.0.0.1
4Address: 127.0.0.1#53
5Aliases:
6 
7adcent6.adosakana.local has address 172.17.44.216
8#

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

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

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

13. Kerberosの動作確認

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

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

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

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

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

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

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

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

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

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

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


2014/05/08追記

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

“Samba 4.xでActive Directoryを1から立てる” への1件の返信

  1. Windowsからアクセス権が変更出来ないことで悩んでいたのですが、
    この記事のおかげでマウントオプションにuser_xattr,acl,barrier=1が必要な事が分かりました。

    通りすがりですが、本当に助かりました。ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

StatCounter - Free Web Tracker and Counter