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
問題なくホームディレクトリが共有されていることが確認できれば確認完了です。
お疲れ様でした。