Samba4とSSSDでLinux/Windowsの認証統合環境を構築(ActiveDirectory+NIS)ではSamba4でActive Directoryの構築を解説しました。

しかし、この環境はドメインコントローラが1台構成のため、ハードウェア障害やシステムエラーなどが発生した場合、最悪サービスが停止してしまう恐れがあります。

そこで今回は、ドメインコントローラを追加して1台のサーバで障害が発生してもサービスを提供し続ける構成を整えます。(冗長化構成の構築)

構成環境は下記を想定します。

  • ドメイン名                      : TESTDOMAIN.LOCAL
  • 追加ドメインコントローラ    : dc02.testdomain.local
  • 追加ドメインコントローラIP : 192.168.24.58

全体要件は1台目を構築したときと同じですが、今回構築する追加ドメインコントローラの個別要件は、

  • ユーザは追加ドメインコントローラにsssd経由でログインできる
  • Linuxのホームディレクトリはドメインコントローラ1台目のホームディレクトリを共有する

です。よってNFSサーバをドメインコントローラ1台目に構築します。

今回も1台目と同じSamba4とCentOS7で構築します。

1. 不要な機能の停止

構築時のエラーを防ぐため、ファイアーウォールの停止とSELinuxを無効化します。

# systemctl stop firewalld.service
# systemctl disable firewalld.service
# systemctl list-unit-files | grep firewalld.service
firewalld.service                           disabled

# getenforce
Enforcing
# vi /etc/selinux/config

<略>
#SELINUX=enforcing                  # コメントアウト 
SELINUX=disabled                      # 追記
<略>

# reboot
# getenforce
Disabled

 

2. hostsファイルの編集

hostsファイルに自ホストの完全修飾ドメイン名(FQDN)と短いホスト名を追記します。

# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.24.58   dc02.testdomain.local dc02               # 追記

 

3. DNSの設定変更

参照先のDNSを構築済みの1台目のドメインコントローラに変更します。

# nmcli device
デバイス    タイプ    状態      接続
enp0s3      ethernet  接続済み  System enp0s3
lo          loopback  管理無し  --
# nmcli connection modify "System enp0s3" ipv4.dns "192.168.24.57"
# systemctl restart NetworkManager

/etc/resolv.conf ファイルの中身を確認して、参照先DNSが自サーバになっていることを確認します。

# more /etc/resolv.conf
# Generated by NetworkManager
search testdomain.local
nameserver 192.168.24.57

 

4. 必要なパッケージのインストール

ディストリビューションにあわせて必要なパッケージをインストールします。

今回の環境はCentOS7なので下記になりますが、その他ディストリビューションの場合はこちらを参照してください。

# 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

 

4. Samba4のダウンロードとインストール

最新のSambaをこちらから入手してインストールします。

# wget https://download.samba.org/pub/samba/stable/samba-4.5.1.tar.gz
# tar zxvf samba-4.5.1.tar.gz
# cd samba-4.5.1/
# ./configure
# make
# make install

 

5. /etc/krb5.conf の設定

[全てのドメインコントローラで設定]

全てのドメインコントローラで krb5.conf ファイルを下記にします。

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

[realms]
 TESTDOMAIN.LOCAL = {
  kdc = dc01.testdomain.local
  kdc = dc02.testdomain.local
  admin_server = dc01.testdomain.local
  admin_server = dc02.testdomain.local
 }

[domain_realm]
 .testdomain.local = TESTDOMAIN.LOCAL
 testdomain.local = TESTDOMAIN.LOCAL

 

6. ドメインコントローラの追加

ドメインコントローラを追加する下記のコマンドを実行します。

# /usr/local/samba/bin/samba-tool domain join testdomain.local DC -U administrator --dns-backend=SAMBA_INTERNAL --realm=TESTDOMAIN.LOCAL
Finding a writeable DC for domain 'testdomain.local'
Found DC dc01.testdomain.local
Password for [WORKGROUP\administrator]:(←1台目のドメインコントローラで設定したパスワードを入力してください)
workgroup is TESTDOMAIN
realm is testdomain.local
Adding CN=DC02,OU=Domain Controllers,DC=testdomain,DC=local
Adding CN=DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=testdomain,DC=local
Adding CN=NTDS Settings,CN=DC02,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=testdomain,DC=local
Adding SPNs to CN=DC02,OU=Domain Controllers,DC=testdomain,DC=local
Setting account password for DC02$
Enabling account
Calling bare provision
Looking up IPv4 addresses
More than one IPv4 address found. Using 192.168.24.58
Looking up IPv6 addresses
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
A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf
Provision OK for domain DN DC=testdomain,DC=local
Starting replication
Schema-DN[CN=Schema,CN=Configuration,DC=testdomain,DC=local] objects[402/1550] linked_values[0/0]
Schema-DN[CN=Schema,CN=Configuration,DC=testdomain,DC=local] objects[804/1550] linked_values[0/0]
Schema-DN[CN=Schema,CN=Configuration,DC=testdomain,DC=local] objects[1206/1550] linked_values[0/0]
Schema-DN[CN=Schema,CN=Configuration,DC=testdomain,DC=local] objects[1550/1550] linked_values[0/0]
Analyze and apply schema objects
Partition[CN=Configuration,DC=testdomain,DC=local] objects[402/1614] linked_values[0/0]
Partition[CN=Configuration,DC=testdomain,DC=local] objects[804/1614] linked_values[0/0]
Partition[CN=Configuration,DC=testdomain,DC=local] objects[1206/1614] linked_values[0/0]
Partition[CN=Configuration,DC=testdomain,DC=local] objects[1608/1614] linked_values[0/0]
Partition[CN=Configuration,DC=testdomain,DC=local] objects[1614/1614] linked_values[30/0]
Replicating critical objects from the base DN of the domain
Partition[DC=testdomain,DC=local] objects[97/97] linked_values[23/0]
Partition[DC=testdomain,DC=local] objects[372/275] linked_values[31/0]
Done with always replicated NC (base, config, schema)
Replicating DC=DomainDnsZones,DC=testdomain,DC=local
Partition[DC=DomainDnsZones,DC=testdomain,DC=local] objects[41/41] linked_values[0/0]
Replicating DC=ForestDnsZones,DC=testdomain,DC=local
Partition[DC=ForestDnsZones,DC=testdomain,DC=local] objects[18/18] linked_values[0/0]
Committing SAM database
Sending DsReplicaUpdateRefs for all the replicated partitions
Setting isSynchronized and dsServiceName
Setting up secrets database
Joined domain TESTDOMAIN (SID S-1-5-21-2957873491-915732319-2538369941) as a DC

 

7. smb.conf の修正

smb.conf ファイルの [global] セクションの内容を、1台目のドメインコントローラと同じにします。

# vi /usr/local/samba/etc/smb.conf

[global]
<略>
        dns forwarder = 192.168.24.1     # 追加します
        idmap_ldb:use rfc2307 = yes      # 追加します

 

8. Sambaの起動

起動までの準備がすべて完了したのでSambaを起動します。

CentOS7はsystemdが採用されているので、それにあわせた起動スクリプトを用意します。

# vi /etc/systemd/system/samba.service

[Unit]
Description= Samba 4 Active Directory
After=syslog.target
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/samba/var/run/samba.pid
ExecStart=/usr/local/samba/sbin/samba
[Install]
WantedBy=multi-user.target

Sambaを起動します。

# systemctl start samba
# systemctl enable samba

 

9. Sambaの動作確認

無事Sambaが起動したら smbclient を利用してSambaへの接続確認を行います。 

# /usr/local/samba/bin/smbclient -L localhost -U%
Domain=[TESTDOMAIN] OS=[Windows 6.1] Server=[Samba 4.5.1]
        Sharename       Type      Comment
        ---------       ----      -------
        netlogon        Disk
        sysvol          Disk
        IPC$            IPC       IPC Service (Samba 4.5.1)
Domain=[TESTDOMAIN] OS=[Windows 6.1] Server=[Samba 4.5.1]
        Server               Comment
        ---------            -------
        Workgroup            Master
        ---------            -------

次にDNSにSRVレコードが登録されているか確認を行います。

# host -t SRV _ldap._tcp.testdomain.local localhost
_ldap._tcp.testdomain.local has SRV record 0 100 389 dc01.testdomain.local.
_ldap._tcp.testdomain.local has SRV record 0 100 389 dc02.testdomain.local.        # 追加されていることを確認します。

# host -t SRV _kerberos._udp.testdomain.local 127.0.0.1
_kerberos._udp.testdomain.local has SRV record 0 100 88 dc01.testdomain.local.
_kerberos._udp.testdomain.local has SRV record 0 100 88 dc02.testdomain.local.   # 追加されていることを確認します。

# host -t A dc02.testdomain.local 127.0.0.1
dc02.testdomain.local has address 192.168.24.58

最後にKeroberosの動作確認を行います。

# kinit administrator
Password for このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。:
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。
Valid starting       Expires              Service principal
2016-11-22T23:44:46  2016-11-23T09:44:46  krbtgt/このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。
        renew until 2016-11-29T23:44:43

全てエラー無く結果が表示されれば動作確認完了です。

 

10. SYSVOLのコピー

現在のSambaは、Sysvolのレプリケーション機能がないため、別の手段でコピーをする必要があります。

rsync と cron を利用して1号機と定期的に同期をとる設定します。

[ドメインコントローラ1台目の設定]

必要なパッケージをインストールして rsync の設定を追加します。

# yum install xinetd
# vi /etc/xinetd.d/rsync

service rsync
{
      disable         = no
      socket_type     = stream
      wait            = no
      user            = root
      server          = /usr/bin/rsync
      server_args     = --daemon
      log_on_failure += USERID
}

/etc/rsyncd.conf ファイルに [SysVol] を追記します。

# vi /etc/rsyncd.conf

[SysVol]
path = /usr/local/samba/var/locks/sysvol/
comment = Samba Sysvol Share
uid = root
gid = root
read only = yes
auth users = sysvol-replication
secrets file = /usr/local/samba/etc/rsyncd.secret

rsync にアクセスするパスワードを設定します。

# vi /usr/local/samba/etc/rsyncd.secret

sysvol-replication:ここに任意のパスワードを入力します。

パスワードファイルのアクセス権を変更してサービスを再起動します。

# chmod 600 /usr/local/samba/etc/rsyncd.secret
# systemctl restart xinetd.service

ドメインコントローラ1台目の設定は以上です。

[追加ドメインコントローラの設定]

rsync にアクセスするパスワードを設定します。

# vi /usr/local/samba/etc/rsync-sysvol.secret

ドメインコントローラ1台目で設定した任意のパスワード

パスワードファイルのアクセス権を変更します。

# chmod 600 /usr/local/samba/etc/rsync-sysvol.secret

rsync コマンドで1号機の SysVol ディレクトリをコピーします。

# rsync -XAavz --delete-after --password-file=/usr/local/samba/etc/rsync-sysvol.secret rsync://このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。/SysVol/ /usr/local/samba/var/locks/sysvol/
receiving file list ... done
./
testdomain.local/
testdomain.local/Policies/
testdomain.local/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/
testdomain.local/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/GPT.INI
testdomain.local/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/
testdomain.local/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/USER/
testdomain.local/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/
testdomain.local/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/GPT.INI
testdomain.local/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/MACHINE/
testdomain.local/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/USER/
testdomain.local/scripts/
sent 184 bytes  received 10752 bytes  21872.00 bytes/sec
total size is 40  speedup is 0.00

コピーが正常に終了すれば rsync の設定は完了です。

定期的にコピーする必要があるため cron に設定を追加します。

# vi /etc/cron.d/sysvol-replication

*/5 * * * * root rsync -XAavz --delete-after --password-file=/usr/local/samba/etc/rsync-sysvol.secret rsync://このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。/SysVol/ /usr/local/samba/var/locks/sysvol/ > /dev/null 2>&1 && /usr/local/samba/bin/samba-tool ntacl

# systemctl restart crond.service

Sambaの設定は以上です。

 

11. DNSの設定変更

最後に参照先のDNSをsambaで構築したDNSに変更します。

ドメインコントローラ1台目と2台目の両方とも設定します。

# nmcli device
デバイス    タイプ    状態      接続
enp0s3      ethernet  接続済み  System enp0s3
lo          loopback  管理無し  --
# nmcli connection modify "System enp0s3" ipv4.dns "192.168.24.57,192.168.24.58"
# systemctl restart NetworkManager

/etc/resolv.confファイルの中身を確認して、参照先DNSが自サーバになっていることを確認します。

# more /etc/resolv.conf
# Generated by NetworkManager
search testdomain.local
nameserver 192.168.24.57
nameserver 192.168.24.58

 

12. Linuxの認証をSSSD経由でActiveDirectoryと連携

個別要件の

  • Linuxユーザは追加ドメインコントローラにsssd経由でログインできる

を満たす設定をします。

必要なパッケージをインストールします。

# yum install sssd sssd-ad krb5-workstation oddjob-mkhomedir openldap-clients

kerberosのkeytabファイルを作成します。

# /usr/local/samba/bin/samba-tool domain exportkeytab /etc/krb5.keytab --principal=dc02$
Export one principal to /etc/krb5.keytab

sssdの設定ファイルを編集します。

# vi /etc/sssd/sssd.conf

[sssd]
config_file_version = 2
domains = testdomain.local
services = nss, pam
debug_level = 0

[nss]

[pam]

[domain/testdomain.local]
id_provider = ad
auth_provider = ad
access_provider = ad
chpass_provider = ad
entry_cache_netgroup_timeout = 15
entry_cache_timeout = 15

ldap_id_mapping = false
ldap_sasl_authid = dc02$@TESTDOMAIN.LOCAL

# ad_server = server.ad.example.com
# ad_hostname = server.ad.example.com
ad_domain = testdomain.local

1台目構築時と同じく設定のポイントはこちらです。

  • ldap_id_mapping

            true に設定するとIDを自動生成します。false に設定するとActive DirectoryからIDを取得します。今回は false です。

sssdの設定ファイルのアクセス権を変更します。

# chown root:root /etc/sssd/sssd.conf
# chmod 0600 /etc/sssd/sssd.conf

NSS/PAMの設定をSSSDに切り替えます。

# authconfig --enablesssd --enablesssdauth --enablemkhomedir --update

SSSDを起動します。 

# systemctl restart sssd.service

エラーなく起動したら接続テストを行います。

1台目構築時に作成したユーザの情報をidコマンドで取得します。

# id test01
uid=200001(test01) gid=100000(domain users) groups=100000(domain users)

取得できれば接続テストは完了です。

 

13. NFS と Autofs でホームディレクトリを共有

残りの個別要件の

  • Linuxのホームディレクトリはドメインコントローラ1台目のホームディレクトリを共有する

を満たす設定をします。

[ドメインコントローラ1台目の設定]

必要なパッケージをインストールします。

# yum install nfs-utils

idmapd.conf ファイル内の記述を自ドメインに修正します。

# vi /etc/idmapd.conf

[General]
#Domain = local.domain.edu
Domain = testdomain.local       # 追加します。

共有するディレクトリを指定します。

# vi /etc/exports

/home/testdomain.local 192.168.24.0/24(rw,wdelay,no_root_squash,no_subtree_check)         # 追加します。

NFS サービスを起動します。

# systemctl start nfs-server
# systemctl enable nfs-server

ドメインコントローラ1台目の設定は以上です。

[追加ドメインコントローラの設定]

必要なパッケージをインストールします。

# yum install autofs

auto.master にマウントポイントを記述します。

# vi /etc/auto.master

/- /etc/testdomain.local.misc --timeout=60

testdomain.local.misc にはマウントポイントのマウント方法を記述します。

# vi /etc/testdomain.local.misc

/home/testdomain.local -rw dc01:/home/testdomain.local

マウントポイントを作成します。

# mkdir -m 711 /home/testdomain.local

autofs サービスを起動します。

# systemctl start autofs
# systemctl enable autofs

動作確認します。

まずはドメインコントローラ1台目に test01 でログインします。

$ id
uid=200001(test01) gid=100000(domain users) groups=100000(domain users)
$ ls -l
-rw-r--r-- 1 test01 domain users 5 11月 13 01:17 test.txt

次にドメインコントローラ2台目に同じく test01 でログインします。

$ id
uid=200001(test01) gid=100000(domain users) groups=100000(domain users)
$ ls -l
-rw-r--r-- 1 test01 domain users 5 11月 13 01:17 test.txt

問題なくホームディレクトリが共有されていることが確認できれば確認完了です。

 

お疲れ様でした。

 

Joomla templates by a4joomla