CentOS7とSamba 4.7.5で環境を作成しなおしたので、記事更新
過去の記事はこちら
2014年2月版「Samba 4.xでActive Directoryを1から立てる」
2016年7月版「Samba 4.4.xでActive Directoryを1から立てる」
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」までとなっている。
なお、フェールオーバクラスタについては作成できるようになっていました。
→「samba 4.7.4で作ったActive Directory環境でWindowsServer2016フェールオーバークラスターを動作させた」というわけで動作することを確認しました
それでは、実際の手順について・・・
元ネタは公式ページの「Setting up Samba as an Active Directory Domain Controller」となります。
0. CentOS7の最小インストールを実施
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 attr bind-utils docbook-style-xsl gcc gdb krb5-workstation \
libsemanage-python libxslt perl perl-ExtUtils-MakeMaker \
perl-Parse-Yapp perl-Test-Base pkgconfig policycoreutils-python \
python-crypto gnutls-devel libattr-devel keyutils-libs-devel \
libacl-devel libaio-devel libblkid-devel libxml2-devel openldap-devel \
pam-devel popt-devel python-devel readline-devel zlib-devel systemd-devel
<略>
[root@adserver ~]#
4. sambaのtar.gzをダウンロード
[root@adserver ~]# wget https://download.samba.org/pub/samba/stable/samba-4.7.5.tar.gz
--2016-xx-xx xx:xx:xx-- https://download.samba.org/pub/samba/stable/samba-4.7.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.7.5.tar.gz' に保存中
100%[======================================>] 16,862,398 3.71MB/s 時間 5.5s
2018-03-xx xx:xx:xx (2.93 MB/s) - `samba-4.7.5.tar.gz' へ保存完了 [16862398/16862398]
[root@adserver ~]#
5. configure実施
[root@adserver ~]# tar xfz samba-4.7.5.tar.gz
[root@adserver ~]# cd samba-4.7.5
[root@adserver samba-4.7.5]# ./configure
Checking for program gcc or cc : /usr/bin/gcc
Checking for program cpp : /usr/bin/cpp
<略>
Checking if toolchain accepts -fstack-protector : yes
'configure' finished successfully (2m43.587s)
[root@adserver samba-4.7.5]#
6. make & make install
[root@adserver samba-4.7.5]# make
WAF_MAKE=1 python ./buildtools/bin/waf build
Waf: Entering directory `/root/samba-4.7.5/bin'
<略>
Note: Writing nmblookup4.1
Waf: Leaving directory `/root/samba-4.7.5/bin'
'build' finished successfully (22m56.876s)
[root@adserver samba-4.7.5]# make install
WAF_MAKE=1 python ./buildtools/bin/waf install
Waf: Entering directory `/root/samba-4.7.5/bin'
<略>
* 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.7.5/bin'
'install' finished successfully (6m48.094s)
[root@adserver samba-4.7.5]#
7. インストール完了確認
sambaのバージョン確認
[root@adserver ~]# /usr/local/samba/sbin/samba -V
Version 4.7.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 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 AD has been generated at /usr/local/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba AD 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 ~]#
なお、password_hashでエラーとなるとおもいます。
現状の /etc/krb5.conf の内容が問題で発生しています。
この後の手順で正しいものに置き換えるので、この段階では単純に「mv /etc/krb5.conf /etc/krb5.conf.org」などの手段で別の名前として使わなくすれば大丈夫です。
Setting up sam.ldb users and groups
ERROR(ldb): uncaught exception - operations error at ../source4/dsdb/samdb/ldb_modules/password_hash.c:3132
File "/usr/local/samba/lib64/python2.7/site-packages/samba/netcmd/__init__.py", line 176, in _run
return self.run(*args, **kwargs)
File "/usr/local/samba/lib64/python2.7/site-packages/samba/netcmd/domain.py", line 474, in run
nosync=ldap_backend_nosync, ldap_dryrun_mode=ldap_dryrun_mode)
File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 2175, in provision
skip_sysvolacl=skip_sysvolacl)
File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 1787, in provision_fill
next_rid=next_rid, dc_rid=dc_rid)
File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 1447, in fill_samdb
"KRBTGTPASS_B64": b64encode(krbtgtpass.encode('utf-16-le'))
File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/common.py", line 55, in setup_add_ldif
ldb.add_ldif(data, controls)
File "/usr/local/samba/lib64/python2.7/site-packages/samba/__init__.py", line 229, in add_ldif
self.add(msg, controls)
9. sambaを起動
[root@adserver ~]# ps -ef|grep samba
root 11129 23028 0 16:01 pts/0 00:00:00 grep --color=auto samba
[root@adserver ~]# /usr/local/samba/sbin/samba
[root@adserver ~]# ps -ef|grep samba
root 11131 1 14 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11132 11131 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11133 11131 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11134 11132 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11135 11134 19 16:01 ? 00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root 11136 11131 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11137 11131 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11138 11131 21 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11139 11131 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11140 11131 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11141 11131 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11142 11131 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11143 11131 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11144 11131 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11145 11142 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11146 11131 2 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11147 11145 18 16:01 ? 00:00:00 /usr/local/samba/sbin/winbindd -D --option=server role check:inhibit=yes --foreground
root 11148 11131 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11151 11146 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11152 11151 17 16:01 ? 00:00:00 python /usr/local/samba/sbin/samba_dnsupdate
root 11153 11146 0 16:01 ? 00:00:00 /usr/local/samba/sbin/samba
root 11154 11153 17 16:01 ? 00:00:00 python /usr/local/samba/sbin/samba_spnupdate
root 11157 11135 0 16:01 ? 00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root 11158 11135 0 16:01 ? 00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root 11160 23028 0 16:01 pts/0 00:00:00 grep --color=auto samba
root 11161 11147 0 16:01 ? 00:00:00 /usr/local/samba/sbin/winbindd -D --option=server role check:inhibit=yes --foreground
[root@adserver ~]#
10.動作確認
CentOS内部からSMB接続を行うテストを実施。
[root@adserver ~]# /usr/local/samba/bin/smbclient --version
Version 4.7.5
[root@adserver ~]# /usr/local/samba/bin/smbclient -L localhost -U%
Sharename Type Comment
--------- ---- -------
netlogon Disk
sysvol Disk
IPC$ IPC IPC Service (Samba 4.7.5)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
[root@adserver ~]#
以前は「Domain=[ADOSAKANA.LOCAL] OS=[Unix] Server=[Samba x.y.z]」という出力もあったのですが、Samba 4.7.5では無くなったようです。
netlogon共有にAdministrator権限でアクセスできるか確認。
[root@adserver ~]# /usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter Administrator's password:
. D 0 Fri Mar 2 15:53:48 2018
.. D 0 Fri Mar 2 15:58:16 2018
14034944 blocks of size 1024. 11789628 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 2018年04月13日 15時58分15秒
[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
2018-03-02T16:06:21 2018-03-03T02:06:21 krbtgt/ADOSAKANA.LOCAL@ADOSAKANA.LOCAL
renew until 2018-03-03T16:06:18
[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.7.5では、Windows Sevrer 2008R2と設定されているようです。
16. firewalldの設定
CentOS7ではfirewalldによりポートが制限されています。
現状を「firewall-cmd –list-all」で確認。
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
#
開けるべきポートのテンプレートがあらかじめ用意されているので「firewall-cmd –get-services」を実行して確認します。
# firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
#
SambaをADとして使う場合のポートを「Samba AD DC Port Usage」で確認します。
CentOS7のfirewalldで定義されているものと待避させてみると・・・
サービス |
ポート |
プロトコル |
firewalld定義 |
DNS |
53 |
tcp/udp |
dns
|
Kerberos |
88 |
tcp/udp |
kerberos,freeipa-ldap,freeipa-ldaps |
End Point Mapper (DCE/RPC Locator Service) |
135 |
tcp |
freeipa-trust |
NetBIOS Name Service |
137 |
udp |
samba,samba-client |
NetBIOS Datagram |
138 |
udp |
samba,samba-client,freeipa-trust |
NetBIOS Session |
139 |
tcp |
samba,freeipa-trust |
LDAP |
389 |
tcp/udp |
freeipa-trust(ldap,freeipa-ldapはtcpのみ) |
SMB over TCP |
445 |
tcp |
samba,freeipa-trust(freeipa-trustはudpも含む) |
Kerberos kpasswd |
464 |
tcp/udp |
kpasswd,freeipa-ldap,freeipa-ldaps |
LDAPS |
636 |
tcp |
ldaps,freeipa-ldaps |
Dynamic RPC Ports(4.7以前) |
1024-1300 |
tcp |
freeipa-trust |
Dynamic RPC Ports(samba 4.7以降) |
49152-65535 |
tcp |
? |
Global Catalog |
3268 |
tcp |
freeipa-trust |
Global Catalog SSL |
3269 |
tcp |
なし |
・firewalldの定義「samba」「dns」「freeipa-ldaps」「freeipa-trust」を使用
・「Dynamic RPC Ports(samba 4.7以降):49152-65535」を追加するか、smb.confで「rpc server port」を定義するか。
・「Global Catalog SSL:3269」を追加
# firewall-cmd --permanent --zone=public --add-service=samba
success
# firewall-cmd --permanent --zone=public --add-service=dns
success
# firewall-cmd --permanent --zone=public --add-service=freeipa-ldaps
success
# firewall-cmd --permanent --zone=public --add-service=freeipa-trust
success
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: ssh dhcpv6-client samba dns freeipa-ldaps freeipa-trust
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
#
# firewall-cmd --permanent --zone=public --add-port=49152-65535/tcp
success
# firewall-cmd --permanent --zone=public --add-port=3269/tcp
success
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: ssh dhcpv6-client samba dns freeipa-ldaps freeipa-trust
ports: 49152-65535/tcp 3269/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
#
17. systemdへの登録
systemdへの登録については「Managing the Samba AD DC Service Using Systemd」を参照のこと
CentOS6の場合は「Managing the Samba AD DC Service Using an Init Script」
以上で設定は終了です。