2016年2月29日月曜日

やっと samba-winbind リトライ

yum install samba-winbind samba-winbind-clients pam_krb5

DNSは既にADに向けてあるので、


authconfig \
--enablekrb5 \
--krb5kdc=dc01.samba4-ad.local \
--krb5adminserver=dc01.samba4-ad.local \
--krb5realm=DC01.Samba4-AD.LOCAL \
--enablewinbind \
--enablewinbindauth \
--smbsecurity=ads \
--smbrealm=DC01.Samba4-AD.LOCAL \
--smbservers=dc01.samba4-ad.local \
--smbworkgroup=DC01 \
--winbindtemplatehomedir=/home/%U \
--winbindtemplateshell=/bin/bash \
--enablemkhomedir \
--enablewinbindusedefaultdomain \
--update

この後のエラーが、server-world.infoさんと少し違う。

Job for winbind.service failed because the control process exited with error code. See "systemctl status winbind.service" and "journalctl -xe" for details.

# systemctl status winbind.service

# journalctl -xe

いずれも、出力がただの文字列にしか見えない。かろうじて、winbind.service failed. は英語として読めるが、コードが(既に?)存在するとの意味がワカラナイ。

とりあえず「エラーを無視して先に」とあるので、この件は保留。


[root@FS01 ~]# net ads join -U Administrator
Enter Administrator's password:
Failed to join domain: failed to find DC for domain DC01
[root@FS01 ~]# ping DC01
PING DC01.Samba4-AD.LOCAL (172.19.19.10) 56(84) bytes of data.
64 bytes from 172.19.19.10: icmp_seq=1 ttl=64 time=1.42 ms
64 bytes from 172.19.19.10: icmp_seq=2 ttl=64 time=1.99 ms
64 bytes from 172.19.19.10: icmp_seq=3 ttl=64 time=2.12 ms
64 bytes from 172.19.19.10: icmp_seq=4 ttl=64 time=2.00 ms
^C
--- DC01.Samba4-AD.LOCAL ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3007ms
rtt min/avg/max/mdev = 1.423/1.888/2.127/0.278 ms
[root@FS01 ~]# net ads join -U Administrator
Enter Administrator's password:
Failed to join domain: failed to find DC for domain DC01
[root@FS01 ~]#

dc01は解決できるが、joinはNG? 致し方ないのでトラフィックを見てみると、_ldap._tcp.dc._msdcs.DC01.SAMBA4-AD.LOCAL
へののDNSクエリを投げて、DC01が外部へふぉわーでぃんぐしている。なるほど、、

そこで、smb.conf 中で DNS forwarding をコメントアウトしてリトライ。すると、

_ldap._tcp.dc._msdcs.DC01.SAMBA4-AD.LOCAL

についてレスポンスが得られない一方で、NetBIOSネームクエリなブロードキャストを。DC01は同一ネットワーク上にあるが、これは応答していない。

さてこれは。先日も挫折した、Samba AD 内蔵 DNSのレコードをどうしてくれるか問題か。これが

/usr/local/samba/bin/samba-tool dns add <server> <zone> <name>
 <A|AAAA|PTR|CNAME|NS|MX|SRV|TXT> <data>

usage に則っているつもりなのだが、ERRORが返る。ちなみに同様のエラーは、samba-toolのドメイン作成時にも見られたので、当時は私が設定したパラメータがなんらか間違っていたということだ。

そこで、FS01側のhostsに書いてしまうという奇策に走ってみたが、結果は変わらず。あくまでDNSでSRVを解決するか、あるいはNetBIOS名として解決しなくてはならないようだ。

chaperoneさんに、このあたりの作業例があるのだが、
http://web.chaperone.jp/w/index.php?samba4%2F140321

この設定は保留にして、FS01側で安易に解決を試みるも、マッタク状況変わらず。


で、このSRVレコードがまた、未知のセカイ。

アットマークアイティさんから実用 BIND 9で作るDNSサーバ(14):
DNSの拡張仕様、SRVレコードとENUM (1/2)
http://www.atmarkit.co.jp/ait/articles/0403/09/news076.html


なるほどそりゃ、hostsで解決してもイミ無いわ。SRVってそもそも何の略や!? といえば、

e-words
http://e-words.jp/w/SRV%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89.html


ここで、Unixpower on Networking さんのこちらを拝読していて
http://www.unix-power.net/linux/samba1_centos6.html

krb5.conf 中の libdefaults において lookup が realm 、kdc いずれもfalseであることが気になった。



進めば進むほど新鮮でバチバチいってるぜ AWESOME!


Samba4 AD 初回インストール作業要領 (仮・成功ケース)

前回、自分が何を誤ったかさえ全く見当もつかずNGだったインストールの続き。
http://e4776m4mg.blogspot.jp/2016/02/samba4-ad.html

結果的には、俺的さんのblogエントリの通りでインストール終了。ますます前回のNG原因がワカラナイ。コマンドを投入するにあたりテキストエディタを介した際に何かやらかしたぐらいしか思い当たらない。

さておき、今回のインストール作業中、先人のWebコンテンツ通りでない点がいくつかあるのでメモ。

・latestでなくて4.2.8
・samba-tools のドメインプロビジョニング設定中 DNS forwading を none
・krb5.confを編集 サンプルドメインをここでの名称に変更とkdcのホスト.ドメインに修正


とりあえずこれで単独のADは立った。そして、以前のADのWindowsクライアントからリモートサーバ管理ツールでアクセスしたところ、アクセスできてしまった。ドメイン名とパスワードが同じであれば、単純なログイン・アクセスは可能なのか。あるいはDC不在のままローカルログインしているだけかと思えば、条鮫では実際に相当量のトラフィックが発生している。


さておき、次はSambaファイルサーバを立てて、ADと認証を連携させる。たた、これを先日試みた際はうまくいかなかったので、今回はwinbindを先に導入してみる。

の、前に。

kerberosは時刻同期が正確でなければならないということで、ADサーバに同期させようとしたのだが、そもそも

・VirtualBox 上の CentOS7 がそもそもネットワークにつながらない
 (Network Unreachable)
・WindowsクライアントからADに対して同期しようとしたがNG

「ダブルで、来たね。」<---松田のガキふう


さらには、後者についてはNTPリクエストとレスポンスが発生しているのにWindows側で「同期できないのはピアが」なNG。しかも、サービスを止めて上げてOSを2度リブートしたら同期できるというイミフ。

というわけで、VirtualBox +CentOS7で 自身のNICのIPがNetworkあんりーちゃぶるな解決を次に。

...が、これがあっけなく判明した。おそろしくバカげたことだった。/etc/sysconfig/network-scripts/icfg-* をあらためたところ、ONBOOT=no となっていた。つまり、CentOS 7 になって操作がまるで変わり、nmcli を使ったところでこの点は要修正だったということだ。あるいは、コマンドでこの点も変更できるしソンナノジョーシキかもしれないが、マッタクわかっちゃいなかったと。

ユーザビリティのおっそろしく低いIT引きこもりワールドの洗礼、ということだ。


ま、いちいち懲りてもいられないので次へ。








2016年2月27日土曜日

Samba4 AD 初回インストール作業要領 (仮)

初回インストールの経過ながら、毎度のコトながら初心者の試行錯誤-->結果:失敗であるので要領(仮)で。いや、試行錯誤というよりは右往左往か。

こんなblogの引き合いに出して申し訳なくも、基本手順は、俺的備忘録さんの2015年3月16日のエントリから。
http://orebibou.com/

----

CentOS 6.7において

Minimalインストール
インストールの指定項目中でホスト名.ドメインを指定

EthernetインターフェースにIPv4設定
ゲートウェイおよびDNSサーバアドレス指定

ntpインストール
/etc/ntp.confファイル中に外部NTPサーバの設定

ここで

/etc/hostname
が存在しないのでホスト名を記述

Samba4 の前提として必要な環境のインストール
yum install wget perl 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 libsepol-devel libattr-devel keyutils-libs-devel cyrus-sasl-devel cups-devel bind-utils libxslt docbook-style-xsl openldap-devel

Samba導入の一時フォルダ作成
mkdir /tmp/samba

Samba本体のダウロードはこちらから
https://download.samba.org/pub/samba/

 俺的さんはlatestだがここでは4.2.8
 wget http://www.samba.org/samba/ftp/samba-4.2.8.tar.gz -P /tmp

解凍からmakeまで
tar zxvf /tmp/samba-4.2.8.tar.gz -C /tmp/samba/
cd /tmp/samba/samba-*
./configure
make
make install


そして、エラーが。どうやら事前の yum install 中で記述漏れがあったようだ。

Checking for header ldap.h                                                                      : no
Checking for header lber.h                                                                      : no
Checking for header ldap_pvt.h                                                                  : no
Checking for ber_tag_t                                                                          : not found
Checking for library lber                                                                       : not found
Checking for ber_scanf                                                                          : not found
Checking for ber_sockbuf_add_io                                                                 : not found
Checking for variable LDAP_OPT_SOCKBUF                                                          : not found
Checking for variable LBER_OPT_LOG_PRINT_FN                                                     : not found
Checking for library ldap                                                                       : not found
Checking for ldap_init                                                                          : not found
Checking for ldap_init_fd                                                                       : not found
Checking for ldap_initialize                                                                    : not found
Checking for ldap_set_rebind_proc                                                               : not found
Checking for library ldap                                                                       : not found
Checking for ldap_add_result_entry                                                              : not found
Checking whether ldap_set_rebind_proc takes 3 arguments                                         : ok
/tmp/samba/samba-4.2.8/source3/wscript:685: error: LDAP support not found. Try installing libldap2-dev or openldap-devel. Otherwise, use --without-ldap to build without LDAP support. LDAP support is required for the LDAP passdb backend, LDAP idmap backends and ADS. ADS support improves communication with Active Directory domain controllers.
[root@DC01 samba-4.2.8]#

OpenLDAP-devel をインストールし直して、作業続行。そして、DNSの確認にまで至ったところでこのエラー。

[root@DC01 ~]# /usr/local/samba/bin/samba-tool dns zonelist 127.0.0.1 -U Administrator
ailed to connect host 127.0.0.1 on port 135 - NT_STATUS_CONNECTION_REFUSED
Failed to connect host 127.0.0.1 (127.0.0.1) on port 135 - NT_STATUS_CONNECTION_REFUSED.
ERROR(runtime): uncaught exception - (-1073741258, 'The connection was refused')
  File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/__init__.py", line 175, in _run
    return self.run(*args, **kwargs)
  File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/dns.py", line 809, in run
    dns_conn = dns_connect(server, self.lp, self.creds)
  File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/dns.py", line 40, in dns_connect
    dns_conn = dnsserver.dnsserver(binding_str, lp, creds)
[root@DC01 ~]#


まず、

Failed to connect host 127.0.0.1 on port 135
Failed to connect host 127.0.0.1 (127.0.0.1) on port 135

この点。SELinux と iptables を「切り分けのため一時的に」はずす。

[root@DC01 ~]# getenforce
Enforcing

[root@DC01 ~]#
[root@DC01 ~]# setenforce 0
[root@DC01 ~]#
[root@DC01 ~]# /etc/rc.d/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@DC01 ~]#

結果は次のとおり。SELinux、iptables、いずれも直接の関係は無いようだ。

[root@DC01 ~]# /usr/local/samba/bin/samba-tool dns zonelist 127.0.0.1 -U Administrator
Failed to connect host 127.0.0.1 on port 135 - NT_STATUS_CONNECTION_REFUSED
Failed to connect host 127.0.0.1 (127.0.0.1) on port 135 - NT_STATUS_CONNECTION_REFUSED.
ERROR(runtime): uncaught exception - (-1073741258, 'The connection was refused')
  File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/__init__.py", line 175, in _run
    return self.run(*args, **kwargs)
  File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/dns.py", line 809, in run
    dns_conn = dns_connect(server, self.lp, self.creds)
  File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/dns.py", line 40, in dns_connect
    dns_conn = dnsserver.dnsserver(binding_str, lp, creds)
root@DC01 ~]#

uncaught exception、「把握できない例外」ぐらいの意味だろうか。そして __init__.py の175行目付近。

try:
            return self.run(*args, **kwargs)

周辺の記述は self.raw なのだが。あるいは変更してみる??? いやそんなまさか。

それから dns.py については、809行目の記述についてはほかにまったく同一の部分が多々ある。もとより、lpもcredsも意味がわからない。

credsは credsntials のようなのだが、そもそもcredentialをわかっちゃいない。
http://ejje.weblio.jp/content/credential

また、調べる中でたまたま見かけたこちら

Windows DNS と Active Directory
http://www.soi.wide.ad.jp/class/20050011/slides/28/index_13.html

このレベルがひとつの経由地なのだが、現状では霞んで見えもしない遥か彼方の経由地であることは言うまでもない。


話は戻って、self.run の部分を self.raw に書き換えてもNGだった。アタリマエだが。
[root@DC01 ~]# /usr/local/samba/bin/samba-tool dns zonelist 127.0.0.1 -U Administrator
ERROR(<type 'exceptions.AttributeError'>): uncaught exception - 'cmd_zonelist' object has no attribute 'raw'
  File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/__init__.py", line 175, in _run
    return self.raw(*args, **kwargs)

[root@DC01 ~]# vi /usr/local/samba/lib/python2.6/site-packages/samba/netcmd/__init__.py
[root@DC01 ~]#

こんな試みが根拠イミフで支離滅裂>ジブンだ。


そして、一度リブートをはさんだら、

[root@DC01 ~]# /usr/local/samba/bin/samba-tool dns zonelist 127.0.0.1 -U Administrator
Password for [SAMBA4-AD\Administrator]:
  2 zone(s) found

  pszZoneName                 : samba4-ad.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.samba4-ad.local

  pszZoneName                 : _msdcs.samba4-ad.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.samba4-ad.local

[root@DC01 ~]#

正常化。これはいったい??? あるいは

sed -i "/^DNS1/cDNS1=127.0.0.1" /etc/sysconfig/network-scripts/ifcfg-*

の後の、ネットワークの再起動が不十分だったということか。そして、

[root@DC01 ~]# host -t SRV _ldap._tcp.Samba4-AD.LOCAL 127.0.0.1
-bash: host: command not found
[root@DC01 ~]#


hostコマンドが無いってなんやねん、、、


というわけで。ド素人が無いアタマをひねってどうにかなる程度でないので、最初からやり直し。。



Samba4とADの認証統合 試行錯誤

Using short domain name -- SAMBA4-AD
Joined `LOCALHOST` to dns domain `samba4-ad.local`
No DNS domain configured for localhost. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER

これで躓いているところ。こちら様によると

Active DirectoryとLinuxの認証を統合しよう
第5回 SambaのWinbindによる認証統合
http://gihyo.jp/admin/serial/01/ad-linux/0005?page=2

 Joined `LOCALHOST` to dns domain `samba4-ad.local`

が表示される時点で、ドメインへの参加はできているようなのだが。DNS update failed の内容をそのまま検索すると次のような対策例もあり、
http://www.kombitz.com/2012/03/05/samba-net-ads-join-dns-update-failed-error-fixed/

試してみたが状況は変わらなかった。実際のトラフィックを確認すると、DNSクエリに対してDCからの応答がなく、DCが外部DNSへ問い合わせのトラフィックを創出しているので、DC側の問題のようだ。こうなると、ドメインプロビジョニングの際に設定を誤った、というか認識が不足していたということかもしれない。

そこで、samba-tools で変更を試みるも、作法について見当がつかない。知らないものを調べずにワカルわけがないという幼稚園児程度。

samba-tool(8)
http://www.samba.gr.jp/project/translation/4.0/htmldocs/manpages/samba-tool.8.html


[root@DC01 ~]# /usr/local/samba/bin/samba-tool dns add -h | more
Usage: samba-tool dns add <server> <zone> <name> <A|AAAA|PTR|CNAME|NS|MX|SRV|TXT> <data>

Add a DNS record

For each type data contents are as follows:
  A      ipv4_address_string
  AAAA   ipv6_address_string
  PTR    fqdn_string
  CNAME  fqdn_string
  NS     fqdn_string
  MX     "fqdn_string preference"
  SRV    "fqdn_string port priority weight"
  TXT    "'string1' 'string2' ..."


Options:
  -h, --help            show this help message and exit

  Samba Common Options:
    -s FILE, --configfile=FILE
                        Configuration file
    -d DEBUGLEVEL, --debuglevel=DEBUGLEVEL
                        debug level
    --option=OPTION     set smb.conf option from command line
    --realm=REALM       set the realm name

  Credentials Options:
    --simple-bind-dn=DN
                        DN to use for a simple bind
    --password=PASSWORD
                        Password
    -U USERNAME, --username=USERNAME
                        Username
    -W WORKGROUP, --workgroup=WORKGROUP
                        Workgroup
    -N, --no-pass       Don't ask for a password
    -k KERBEROS, --kerberos=KERBEROS
                        Use Kerberos
    --ipaddress=IPADDRESS
                        IP address of server

  Version Options:
    -V, --version       Display version number
[root@DC01 ~]#


余談だが、FSMOってなんだっけ? と検索した中で出てきた、ADのAWS以降の事例
http://dev.classmethod.jp/cloud/aws/active-directory-on-aws-4/

SambaじゃなくてWindowsそのものですね、ここに引用するのがイミフです。


ともあれ、Samba-tool で Aレコード追加を試みるも、ファイルサーバ側で135番のコネクションでエラー。一方でADDC側でDNSフォワーディングを無くそうとするも、手法を見つけられず、致しかたなくdomain provisoning からやり直せるかな? と思ったら、samba-tool での操作自体は問題ないものの、外部から接続する際に kinit の先でエラー。

とっ散らかってしまったので、やり直し。









2016年2月26日金曜日

CentOS7でSambaファイルサーバ

Samba AD と ファイルサーバの認証統合に先立ち、CentOS7で単独のファイルサーバを立てる。機材が足りないのでVirtualBoxにCentOS7をMinimalインストールして以下。

・nmtui でネットワークの基本設定

これだとサブネットマスク値、プリフィクスの入力欄が無いので、IPアドレスに続いて/プリフィクス長で記述してみると、入力はできる。

しかし入力の後、# systemctl restart NetworkManager を実施しても自インターフェース当てのpingがNG

ping 172.16.0.1
connect: Network is unreachable


一方で、ループバック宛のpingはOK。そこで、nmtuiツールに戻ってインターフェースのDeactivate-->Activateを行ってみると


Could not Activate connection:
Activvation failed

あるいは独自解釈のプリフィクス記述が問題か? と考え nmtui 中の/24記述を消してみる。疎通NGは解消せず、再度nmtuiに戻るとIPアドレス値の後ろが/32となっている。ということは、/24の記述は書式としては誤っていないと。

さて、これは。めもめもさんの次のエントリ、

RHEL7/CentOS7でipコマンドをマスター
http://enakai00.hatenablog.com/entry/20140712/1405139841

を参考に ip a を叩いてみると(*)、EthernetのインターフェースにIPアドレスが割り当てられていない、という状態であるようだ。


* 本来ならばこちらのドキュメントに目を通すべきだが。
 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/index.html

と、ここで。

ネットワークの設定NGとの関連性は極めて低いと思うが、OSインストール時のキーマップの設定を誤っていることに気付いた。英語キーボードの機材と日本語キーボードのごっちゃに使っているのでやらかしたが、ショボイ。

英語キーボードマップのままでも使えないことはないが、IPv6アドレスの入力等で面倒極まりないので、再インストールすることにする。

そして、再インストールの途中で気付いたが、前回のインストールではVirtualBoxのネットワーク設定を誤ったかもしれない。複数のネットワークインターフェースのうち、ワイヤレスインターフェース(実際は未使用)がデフォルトでVirtualBoxに割り当てられていた可能性がある。<--今回は無かった。

尚、このインストールの合間に vmware player を別PCにインストールしようとしたが、64ビット版のみの提供に変わる? のだろうか。状況はよくわからないが、少なくともテストPCは 7pro の32ビット。調達時に考慮が足りなかったので反省だ。


話は戻って、再インストール後もIPv4の設定はNG、ip a でアドレスが反映されない。また、IPv4だNGならと、ip a で確認できるIPv6アドレスにpingもNG。

致し方なく、GUIでなくコマンドラインでの設定についてserver-world.infoさんを参考に
http://www.server-world.info/query?os=CentOS_7&p=initial_conf&f=3

結果、至極ふつうに全く問題ない。たいへん解せないが、こんな段で止まっていられないので先へ。


Samba ファイルサーバだが、ADとは別に稼働させる前提でのテストなので極力簡易に導入するものとする。今回はまんまserver-world.infoさんのこの事例のまんまで
http://www.server-world.info/query?os=CentOS_7&p=samba&f=2


と、ここでひとつ宿題。ADのクライアントが、Samba ADDCに対して時刻同期できない問題があった。サーバ間連携のためには、SambaファイルサーバからSamba ADに対して時刻同期は必須かと思われるが、試してみるとntpdate で同期OKなので、ADクライアントの問題は保留とする。

さて、Sambaファイルサーバのインストール。

yum -y install samba samba-client

・dos charset をミスタイプ
・useradd をせずに smbpasswd ができず悩む

などを経て導入終了、のつもりが、リモートPCからファイルサーバへのアクセスは可能だが、個人フォルダにアクセスしようとすると「許可がありません。」

usermod -G security ユーザアカウント

を忘れているという醜態。そして、systemctl restart smb 後に security フォルダはアクセス可能となるもの、ユーザ名のフォルダはアクセスNG。smb.confの記述が足りないか。かと思いきや、security フォルダも読み取りのみで書き込みNG。smb.conf 中のミスタイプ

・create mode のところで ceate
・valid users のところで vaild

ちょっと酷い。複数の機材でキーピッチもストロークもまるで違うということはあるが、そもそも画面をろくに目で追っていないのでこのザマだ。ぶらいんどたっち、が出来ずに指先を見ているならまだしも、キーなど一瞥もしていないのに画面読んでないって何を見てんだ俺。。

ともあれ、単純な記述ミスを修正。で、不具合は変わらず。そこで、テスト用のアカウントをもうひとつ作り、クライアント側をリブートし試したところ、ADアカウントの認証を求められる画面があらわれた。

... smb.conf ファイル中の、本来ワークグループを記述するところにドメインを記述したのがアレで? あるいは既にADに参加している7proから確認しようとしているのがナンで?

ここで、本来ならばファイルサーバの動作確認を、あるべきクライアントから実行すべきだがこれは既に何度か試したのでいっそ省略。winbindに設定を進めてしまう暴挙に走ってみる。

インストール前のDNSサーバアドレス変更は既に実施しているので、authconfig を入力してみるがここでもミスタイプがいくつも。

... 俺、要グラッシィズ? あるいはこんたくとれんず?? モノが見えていない自覚に欠ける?

コマンドオプションを入力しつつ薄々違うだろとは思っていたが、レルム名が誤っていてこれを修正。/etc/krb5.confを直接修正するがNGなので、authconfig コマンドを2度修正。そしてやっと

net ads join -U Administrator

Enter Administrator's password:

が通るものの、次のエラー。

Using short domain name -- SAMBA4-AD
Joined `LOCALHOST` to dns domain `samba4-ad.local`
No DNS domain configured for localhost. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER

もっとも、ここは server-world.infoさんでも、エラーの内容こそ異なるが update failed のままサービスの再起動に進んでいるので、ここでも試してみる。すると、ドメイン参加、ドメイン情報表示、ADのユーザ情報表示まではOKだが、suでNG。


ここから先は、足りないアタマでとりあえずやってみるでは泥沼も沈む一方。動作について、足りないアタマなりに学びつつ進...めるといいな次のエントリ。




2016年2月25日木曜日

認証統合の前にケルベロスのキホン

ITPro 情報セキュリティ入門 ケルベロス認証
http://itpro.nikkeibp.co.jp/article/COLUMN/20060518/238303/

RFC1510
https://www.ipa.go.jp/security/rfc/RFC1510-00JA.html

RedHat
http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-ja-4/s1-kerberos-terminology.html


メッセージ交換について

AS
AP
TGS
SAFE
KRB

5種類の定義がある。何がどのように使われるかは追って学ぶとして、先日WindowsクライアントとDC間のトラフィックを眺めた時に膨大なやり取りがあって、なるほどこれかと。

もっとも現時点では「見たような気がしました」というあまりにもショボい捉え方止まり=恥の露呈、が実情なのだが。読み進めてもすぐには理解できないが、ひとつひとつ認識があらたまることは実に楽しい。





UPSのキホン

Samba-ADとファイルサーバの認証連携もそこそこに、実用上は電源対策も必要なわけで。Linuxでどうこう以前にまずキホン。

ITPro 情報システムのトピックス UPS

http://itpro.nikkeibp.co.jp/article/COLUMN/20090625/332613/


OmronにLinux向けの簡易なツールはあるようだが、とうにメンテナンスが止まっている。
http://www.omron.co.jp/ese/ups/support/download/soft/sss/sss.html


maruko2.NoteさんではAPCとの接続事例が。
http://www.maruko2.com/mw/apcupsd_%E3%81%A7_APC%E8%A3%BD_UPS_%E3%82%92%E9%9B%BB%E6%BA%90%E7%AE%A1%E7%90%86%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

埼玉大学大学院 理工学研究科 伊藤氏のコンテンツによれば
http://www.elc.ees.saitama-u.ac.jp/~kazuhito/apcups.html


いろいろ探してみると、どうも apcupsd というデーモンを使うことで、APC製のUPS商品と連携することが可能であるようだ。テスト機材も、シリアルポート/USB接続の管理機能を持つ企業向けエントリー商品が、電器店でそこそこのお値段で調達できそうな。


また、このエントリー商品でもアウトレットは6つあるので、ルータ・スイッチ・WAN機器・BDC兼別サーバ含めて接続できそうな。

ADとファイルサーバの認証連携の次は楽しそうだぜAWESOME!




Samba4-ADDCと時刻同期しないWindowsクライアントについて

参考にさせていただいのはこちら様。


なんでもシステム管理者(IT大好き?)
ActiveDirectory環境でクライアントの時刻がずれる!! (コマンドw32tm sc)
http://nansys.hatenablog.com/entry/2015/07/07/123922



Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\Administrator.SAMBA4-AD>w32tm /query /status
閏インジケーター: 3 (最後の 1 分間は 61 秒)
階層: 0 (未指定)
精度: -6 (ティックごとに 15.625ms)
ルート遅延: 0.0000000s
ルート分散: 0.0000000s
参照 ID: 0x00000000 (未指定)
最終正常同期時刻: 未指定
ソース: Local CMOS Clock
ポーリング間隔: 10 (1024s)


C:\Users\Administrator.SAMBA4-AD>w32tm /query /status
閏インジケーター: 3 (最後の 1 分間は 61 秒)
階層: 0 (未指定)
精度: -6 (ティックごとに 15.625ms)
ルート遅延: 0.0000000s
ルート分散: 0.0000000s
参照 ID: 0x00000000 (未指定)
最終正常同期時刻: 未指定
ソース: Local CMOS Clock
ポーリング間隔: 10 (1024s)


C:\Users\Administrator.SAMBA4-AD>w32tm /config /syncfromflags:DOMHIER
コマンドは正しく完了しました。

C:\Users\Administrator.SAMBA4-AD>


ここでは再起動の話もあるが、再起動後も、時刻ソースは依然としてローカルCMOSクロックのまま。Samba-ADにおける時刻同期について少々探してみるも、同一の事象がみつからない。あるいは? というところで、


Case-of-Tさん
Sambaを Active Directory互換ドメインコントローラとしてセットアップする方法
http://case-of-t.net/2012/12/25/samba-ad-dc-howto/

にSELinuxに関連しての記述があるものの、やはりこのケースとは異なるような気が。

そして実際にトラフィックを見ると、これが、

・WindowsでAD連携とは無関係に時刻の同期を行おうとすると
 SambaADとのやりとりは、トラフィックとしてはntpで見える。

・しかしWindows側で同期はなされない。
・それも、SambaAD側のntpdが返しているのはUTC時刻。

AD関連以前に、まずntp単体の問題として解消しなければならなくなった。

Unixpower on Networkingさんにもこういった内容はあるが、
http://www.unix-power.net/linux/samba1_centos6.html


そもそも手っ取り早く解消、ではなくて正規のドキュメントをたまには掘り下げねば。安直ばかりではいられないが、be ended prematurely with ... 。


2016年2月24日水曜日

ド素人によるSamba4 AD と Samba ユーザの認証統合の試みのための勉強資料

まず、技評さんのこのレベルから全く理解できない。もちろん、私の基本的な知識が欠如しまくっているためであって技評さんには何の非も一切無い。

Active DirectoryとLinuxの認証を統合しよう
第0回 認証統合の概要とSamba
http://gihyo.jp/admin/serial/01/ad-linux/0001

敵を知り己を知っても百戦にそもそも挑めないぜAWESOME!




2016年2月23日火曜日

Samba4 AD のための iptables な設定の試行錯誤

先日の作業ではネットを検索しつつ試行錯誤していたが、実際に稼働しているSamba4 の設定を見ていなかったという、本末もバナナの皮で転倒なマヌケっぷり。で、

/usr/local/samba/private/dns_update_list

を今さらながらにのぞいてみると。

[root@DC01 ~]# more /usr/local/samba/private/dns_update_list
# this is a list of DNS entries which will be put into DNS using
# dynamic DNS update. It is processed by the samba_dnsupdate script
A                      ${HOSTNAME}                                           $IP
AAAA                   ${HOSTNAME}                                           $IP

# RW domain controller
${IF_RWDC}A            ${DNSDOMAIN}                                          $IP
${IF_RWDC}AAAA         ${DNSDOMAIN}                                          $IP
${IF_RWDC}SRV          _ldap._tcp.${DNSDOMAIN}                               ${HOSTNAME} 389
${IF_RWDC}SRV          _ldap._tcp.dc._msdcs.${DNSDOMAIN}                     ${HOSTNAME} 389
${IF_RWDC}SRV          _ldap._tcp.${DOMAINGUID}.domains._msdcs.${DNSFOREST}  ${HOSTNAME} 389
${IF_RWDC}SRV          _kerberos._tcp.${DNSDOMAIN}                           ${HOSTNAME} 88
${IF_RWDC}SRV          _kerberos._udp.${DNSDOMAIN}                           ${HOSTNAME} 88
${IF_RWDC}SRV          _kerberos._tcp.dc._msdcs.${DNSDOMAIN}                 ${HOSTNAME} 88
${IF_RWDC}SRV          _kpasswd._tcp.${DNSDOMAIN}                            ${HOSTNAME} 464
${IF_RWDC}SRV          _kpasswd._udp.${DNSDOMAIN}                            ${HOSTNAME} 464
# RW and RO domain controller
${IF_DC}CNAME          ${NTDSGUID}._msdcs.${DNSFOREST}                       ${HOSTNAME}
${IF_DC}SRV            _ldap._tcp.${SITE}._sites.${DNSDOMAIN}                ${HOSTNAME} 389
${IF_DC}SRV            _ldap._tcp.${SITE}._sites.dc._msdcs.${DNSDOMAIN}      ${HOSTNAME} 389
${IF_DC}SRV            _kerberos._tcp.${SITE}._sites.${DNSDOMAIN}            ${HOSTNAME} 88
${IF_DC}SRV            _kerberos._tcp.${SITE}._sites.dc._msdcs.${DNSDOMAIN}  ${HOSTNAME} 88

# The PDC emulator
${IF_PDC}SRV           _ldap._tcp.pdc._msdcs.${DNSDOMAIN}                    ${HOSTNAME} 389

# RW GC servers
${IF_RWGC}A            gc._msdcs.${DNSFOREST}                                $IP
${IF_RWGC}AAAA         gc._msdcs.${DNSFOREST}                                $IP
${IF_RWGC}SRV          _gc._tcp.${DNSFOREST}                                 ${HOSTNAME} 3268
${IF_RWGC}SRV          _ldap._tcp.gc._msdcs.${DNSFOREST}                     ${HOSTNAME} 3268
# RW and RO GC servers
${IF_GC}SRV            _gc._tcp.${SITE}._sites.${DNSFOREST}                  ${HOSTNAME} 3268
${IF_GC}SRV            _ldap._tcp.${SITE}._sites.gc._msdcs.${DNSFOREST}      ${HOSTNAME} 3268

# RW DNS servers
${IF_RWDNS_DOMAIN}A    DomainDnsZones.${DNSDOMAIN}                           $IP
${IF_RWDNS_DOMAIN}AAAA DomainDnsZones.${DNSDOMAIN}                           $IP
${IF_RWDNS_DOMAIN}SRV  _ldap._tcp.DomainDnsZones.${DNSDOMAIN}                ${HOSTNAME} 389
# RW and RO DNS servers
${IF_DNS_DOMAIN}SRV    _ldap._tcp.${SITE}._sites.DomainDnsZones.${DNSDOMAIN} ${HOSTNAME} 389

# RW DNS servers
${IF_RWDNS_FOREST}A    ForestDnsZones.${DNSFOREST}                           $IP
${IF_RWDNS_FOREST}AAAA ForestDnsZones.${DNSFOREST}                           $IP
${IF_RWDNS_FOREST}SRV  _ldap._tcp.ForestDnsZones.${DNSFOREST}                ${HOSTNAME} 389
# RW and RO DNS servers
${IF_DNS_FOREST}SRV    _ldap._tcp.${SITE}._sites.ForestDnsZones.${DNSFOREST} ${HOSTNAME} 389

[root@DC01 ~]#

kerberosのUDP88と、kpasswdのTCP/UDP464、GCのTCP3268を sysconfigなiptablesで修正する。

ここでGCについては全く、それこそ目にした記憶さえなかったのだが「グローバルカタログ」であるらしい。これについてはアットマークITとMSTech-netから。
http://www.atmarkit.co.jp/fwin2k/win2ktips/1177adgc/adgc.html
https://technet.microsoft.com/ja-jp/library/cc730749.aspx


これで、とりあえず7proなクライアントからログインはできた。無論、何らかの支障を認識できていない可能性は多々。



iptables とは別件。

ADログイン後のクライアントからSamba4サーバをDNSとしたインターネットアクセスがNGになった件、

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

中の dns forwarder 値を修正することで復旧した。


なお、修正した後に

/etc/rc.d/init.d/samba4 restart

をかけずに、少々首をかしげたことも露呈してしまうぜ AWESOME!








Windows 7 Professional においてドメイン参加

・ローカルのAdministrator権限を持つアカウントでログイン
・ADドメインの管理者権限でADドメインに参加

すると、ADの Domain Admins なアカウントがそのまま(別途作業無しに)ローカルの Administrators グループに属する。ドメイン参加(偏向)には管理者権限が必要であってむしろ当然であるので、Domain Admins なアカウントがローカルな管理者権限を持つこともまた然り、ではあるのだが。ま、知らんかったもんは知らんかったあぁ痛ぇ。

というわけで、Samba AD側で管理者権限を持たないユーザを作ってテストしないと。

---> リモートサーバ管理ツールをとっとと使えるように学べと。


途中で放り出したので築城、いや、追記。

実利用に沿って試してみる。

・ドメインユーザでローカルAdminでないアカウントをひとつ作ってみる。
・ドメインにログインするのみの状況でローカルのリソースに対する制約を調べる。

姓(L): Domain User Not Local AdminもじってDunlap
名(F): Bridget
パスワード: DNAEarth-1

とりあえずやってみる。

まずログオンにえらい時間がかかる。あまりに時間がかかるので、Samba側でiptableを外してみたところ、ほどなくWindowsクライアントでデスクトップの準備が始まったので、依然としてiptableの設定が不十分かもしれない。これは、Sambaとクライアント間にパケットキャプチャを突っ込まないと挙動を把握できない(*後日追記)。別途作業。

ドメインユーザはローカルAdmin権限を得られず、システムフォルダや、ユーザ以下の他ユーザフォルダにアクセスするにはローカルの認証が必要。ただし、ドライブ直下に作った任意のフォルダはアクセス可能。今回たまたま、c:\にソフトウェア倉庫のフォルダを作っていたがここへのアクセスは可能だった。また、Adobeのフォルダを削除してみたところ、削除も可能だった。 また、c:\にフォルダの作成は可能だしファイルも作成可能。

他方、program files や windows 以下の多くのフォルダは読み取り可能だが、当然 書き込み変更は不可。

ということで、ファイル管理について基本的な機能は、ドメインユーザを作成する以外にわざわざ準備する労務は必要ない。あくまで基本的な機能だけだが。

いや、チョージョーシキなのかもしれないが、かつてADに初めて触れた当時に、素直で従順に学んでさえいれば、こんな苦労を今さらには。ま、だから今ハンセイしているのだが。おサルの次郎君にも著しく劣ることは言うまでもない。


次に、切り分けのためにもうひとつアカウントを作る。そういえば、先ほどアカウントを作った際にiptableは問題にならなかったと思われるので、iptableに問題があるなら最初のログオン時点のそれ…なんにせよ要調査。

ともあれ。

姓(L): Almeyda
名(F): Tony
パスワード: EcosES31

初回ログイン時に時間を要する現象は発生しなかった。やはりiptablesか。それから、アプリケーションのインストールはもとより、ネットワーク探索の有効化でも管理者アカウントを要求された。なるほど、これら点でも運用上の心配は無用のようだ。

って初歩の初歩やーーー!!でも初歩を越さずに運用もエキスパートもあるかい AWESOME!



嘆きはさておき。次にSamba上のファイル共有の手順と労務の確認。



追記:

iptablesを外さずとも、約1分ほどかかってログインできた。トラフィックについてはまだ取ったばかりで詳しく見ていないが、iptables が start / stop では相応に差異があるようだ。ぱっと目に付くのは、iptables が有効である際に クライアントからADDCに向けてTCPポート1024のSYNを発して直後に ICMP profibit が返っていること。iptables で開けていないので当然なのだが、なんにせよ詳しく見る必要がある。




リモートサーバ管理ツールの導入エラー

Windows Update スタンドアロンインストーラ
インストーラはエラーを検出しました: 0x80096002
メッセージの署名者の証明書が無効であるか、または見つかりません。

何のことはない、Windows7のツールを、8.1に突っ込もうとしていただけだった。一般のアプリケーションではないので、7で動くものが大概8でも10でも動く、というわけではない。当たり前のことだが、バカ過ぎて気付いていなかった。

バカさ加減はさらに続き、Win7向け がNGなら 8.1向けダウンロードし直さないと! などと足りない知恵がほんのちょっとしか動かず

 Windows 8.1 (Home) に対して
 ドメインほかサーバ管理ツールのインストール

を試みてNGをくらってから愚かさに気付くという...
 


おかげで.msu ファイルという存在と概念の触りだけ知ったぜAWESOME!



2016年2月22日月曜日

OSS-Linux参考メモ

OSSでLinuxサーバ構築
http://www.oss-d.net/

32bit環境にSamba ADは導入可能か?

今後 32bit CPU などアリエナイ上に、現行でも滅びつつある中では全く不毛な話。ではあるのだが、テスト機材の都合でここでは必要。

・リポジトリ指定なしに CentOS 6.7 に yum で導入(4.0.-)はNG
・4.2.8をダウンロードしてコンパイルは可

とりあえず設定を進めてみる。

[root@DC01 ~]# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive --function-level=2008_R2
Realm: Samba4-AD.LOCAL
 Domain [Samba4-AD]:
 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) [127.0.0.1]:
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=samba4-ad,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=samba4-ad,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:              DC01
NetBIOS Domain:        SAMBA4-AD
DNS Domain:            samba4-ad.local
DOMAIN SID:            S-1-5-21-98334141-1155700478-3900901028

[root@DC01 ~]#

[root@DC01 ~]#
[root@DC01 ~]# chmod 755 /etc/rc.d/init.d/samba4
[root@DC01 ~]# chmod +x /etc/rc.d/init.d/samba4
[root@DC01 ~]# ln -s /etc/rc.d/init.d/samba4 /etc/rc3.d/S80samba4
[root@DC01 ~]#
[root@DC01 ~]#
[root@DC01 ~]# chkconfig samba4 on && systemctl start samba4
-bash: systemctl: コマンドが見つかりません
[root@DC01 ~]#

CentOS 6.7 なので systemctl は無い。


[root@DC01 ~]# chkconfig samba4 on
[root@DC01 ~]#
[root@DC01 ~]# /etc/rc.d/init.d/samba4 restart
/etc/rc.d/init.d/samba4: line 1: amba4: コマンドが見つかりません
Shutting down samba4:                                      [失敗]
Starting samba4:                                           [  OK  ]
[root@DC01 ~]#

init.d ディレクトリ下の samba4 の 1行目 で誤記述に確認漏れ。幸い設定に影響はないが修正、
 
[root@DC01 ~]# vi /etc/rc.d/init.d/samba4

# Samba4        This shell script takes care of starting and stopping
#               samba4 daemons.
#
# chkconfig: - 58 74
# description: Samba 4.0 will be the next version of the Samba suite
# and incorporates all the technology found in both the Samba4 alpha
# series and the stable 3.x series. The primary additional features
# over Samba 3.6 are support for the Active Directory logon protocols
# used by Windows 2000 and above.

### BEGIN INIT INFO
# Provides: samba4
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Should-Start: $syslog $named
. /etc/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

prog=samba
prog_dir=/usr/local/samba/sbin/
lockfile=/var/lock/subsys/$prog

start() {
        [ "$NETWORKING" = "no" ] && exit 1
#       [ -x /usr/sbin/ntpd ] || exit 5

                # Start daemons.
                echo -n $"Starting samba4: "
                daemon $prog_dir/$prog -D
        RETVAL=$?
                echo
        [ $RETVAL -eq 0 ] && touch $lockfile
        return $RETVAL
}

stop() {
        [ "$EUID" != "0" ] && exit 4
                echo -n $"Shutting down samba4: "
        killproc $prog_dir/$prog
        RETVAL=$?
                echo
        [ $RETVAL -eq 0 ] && rm -f $lockfile
        return $RETVAL
}

DOMAIN SID:            S-1-5-21-98334141-1155700478-3900901028

[root@DC01 ~]#

属性ももう一度変更。
[root@DC01 ~]# chmod 755 /etc/rc.d/init.d/samba4
[root@DC01 ~]# chmod +x /etc/rc.d/init.d/samba4
[root@DC01 ~]# ln -s /etc/rc.d/init.d/samba4 /etc/rc3.d/S80samba4
[root@DC01 ~]#
[root@DC01 ~]#
[root@DC01 ~]# chkconfig samba4 on && systemctl start samba4
-bash: systemctl: コマンドが見つかりません
[root@DC01 ~]#
コピペ脳の愚行、まさに愚か。

[root@DC01 ~]# chkconfig samba4 on
[root@DC01 ~]#
[root@DC01 ~]#
[root@DC01 ~]# /etc/rc.d/init.d/samba4 restart
/etc/rc.d/init.d/samba4: line 1: amba4: コマンドが見つかりません
Shutting down samba4:                                      [失敗]
Starting samba4:                                           [  OK  ]
[root@DC01 ~]#
[root@DC01 ~]#


DNSの設定。これに先立ち、resolv.conf へもループバックの記述が必要。
[root@DC01 ~]# sed -i "/^DNS1/cDNS1=127.0.0.1" /etc/sysconfig/network-scripts/ifcfg-*
[root@DC01 ~]#

DNS設定後のネットワーク機能リスタート。
[root@DC01 ~]# /etc/rc.d/init.d/network restart
インターフェース eth0 を終了中:  デバイスの状態: 3 (切断済み)
                                                           [  OK  ]
ループバックインターフェースを終了中                       [  OK  ]
ループバックインターフェイスを呼び込み中                   [  OK  ]
インターフェース eth0 を活性化中:  アクティブ接続の状態: アクティベート済み
アクティブ接続のパス: /org/freedesktop/NetworkManager/ActiveConnection/1
                                                           [  OK  ]
[root@DC01 ~]#
[root@DC01 ~]#






DNSの動作確認だが、またやらかす。

[root@DC01 ~]# /usr/local/samba/bin/samba-tool dns zonelist 127.0.0.1 -U Administrator
Password for [SAMBA4-AD\Administrator]:
  2 zone(s) found

  pszZoneName                 : samba4-ad.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.samba4-ad.local

  pszZoneName                 : _msdcs.samba4-ad.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.samba4-ad.local
[root@DC01 ~]#

これはOKだが、次に目先も見てないコピペ脳炸裂。

[root@DC01 ~]# host -t SRV _ldap._tcp.レルム名 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

_ldap._tcp.レルム名 has no SRV record

[root@DC01 ~]#
[root@DC01 ~]#
[root@DC01 ~]#
[root@DC01 ~]# host -t SRV _kerberos._udp.レルム名 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

_kerberos._udp.レルム名 has no SRV record

[root@DC01 ~]#
[root@DC01 ~]#
[root@DC01 ~]# host -t A dc.samba4-ad.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

Host dc.samba4-ad.local not found: 3(NXDOMAIN)

[root@DC01 ~]#
[root@DC01 ~]#
[root@DC01 ~]# host -t SRV _ldap._tcp.samba4-ad 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

_ldap._tcp.samba4-ad has no SRV record

[root@DC01 ~]# host -t SRV _kerberos._udp.samba4-ad 127.0.0.1
host: '_kerberos._udp..samba4-ad' is not a legal name (unexpected end of input)
[root@DC01 ~]# host -t SRV _kerberos._udp.Samba4-AD 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

_kerberos._udp.Samba4-AD has no SRV record

[root@DC01 ~]#

やり直し。

[root@DC01 ~]# host -t SRV _ldap._tcp.samba4-ad.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

_ldap._tcp.samba4-ad.local has SRV record 0 100 389 dc01.samba4-ad.local.
[root@DC01 ~]#
[root@DC01 ~]#
[root@DC01 ~]#
[root@DC01 ~]# host -t SRV _kerveros._udp.samba4-ad 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

_kerveros._udp.samba4-ad has no SRV record

[root@DC01 ~]#
[root@DC01 ~]# host -t SRV _kerberos._udp.samba4-ad 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

_kerberos._udp.samba4-ad has no SRV record
[root@DC01 ~]# host -t SRV _kerberos._udp.samba4-ad.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

_kerberos._udp.samba4-ad.local has SRV record 0 100 88 dc01.samba4-ad.local.
[root@DC01 ~]#
[root@DC01 ~]#
[root@DC01 ~]# host -t A dc.samba4-ad 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

dc.samba4-ad has no A record
[root@DC01 ~]# host -t A dc.samba4-ad.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

Host dc.samba4-ad.local not found: 3(NXDOMAIN)
[root@DC01 ~]# host -t A dc01.samba4-ad.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

dc01.samba4-ad.local has address 172.19.19.10
[root@DC01 ~]#


誤読、誤記述くりかえしつつ、一応設定が通ったように見える。この時点で、iptables について全く考慮がまわっていなかったので当然、Windowsクライアントのドメイン変更(以前のテストドメインから新しテストドメイン)がNG。

/etc/sysconfig/iptable

を編集。編集して

/etc/rc.d/init.d/iptables

を再起動の繰り返し。なぜ何度も繰り返したかというと

・思考及ばず全く何もしない状態
・DNSとSMBを通す
・LDAPを通す
・LDAPの設定を間違える
・Kerberosが漏れていることに気付く

という繰り返し。実際にどのポートが必要かというと、MicrosoftとSamba Wikiから。

Active Directory and Active Directory Domain Services Port Requirements
https://technet.microsoft.com/en-us/library/dd772723%28WS.10%29.aspx

Samba port usage
https://wiki.samba.org/index.php/Samba_port_usage



とりあえず、hogehogeドメインへようこそ、までは辿り着いた。しかし、実際にドメインログオンは、iptablesを外さないとうまくいかない。と言っても、本当に必要なポートだけをひとつずつ開けているので、まだ詳細が特定できていないというだけのことだ。


どうやら、ワークPCから VirtualBox(CentOS+Samba)を撤去できそうだぜ AWESOME!



追記:

Samba について iptables な設定については後日別エントリにて。




2016年2月20日土曜日

Remote Server Administration Tools for Windows 7 with SP1

今回の作業についてはこちら様のWebコンテンツを閲覧させていただいて。

俺的備忘録さんから、CentOS 7とSamba4で自宅用Active Directory Domain Controller (AD DC)を構築する② リモートサーバ管理ツールの導入


と、Sambaの話の前に。


ダウンロードした管理ツールを別PCにコピーしようとした際に、Windows PC間のファイル転送に見られた SMB2 WSP とのプロトコル。



















Technetで探したところ、どうもこれのようだ。


[MS-WSP]: Windows Search Protocol
https://msdn.microsoft.com/en-us/library/cc251767.aspx


興味深いが優先順位は上げられないので後日。


次に、Remote Server Administration Tools for Windows 7 with Service Pack 1 (SP1)をインストールしようとしたところ、KB968830 の要求が。何の修正かわからないので一応メモ。そしてインストール作業を継続すると・・・


Windows Update の仕様と思しき、いつ終わるとも知れぬ待ち時間が発生。"管理ツールのインストールそのもの" が始まらない。


待ち時間にやることはいくらでもあるぜ AWESOME!


と、これを書き終わったあたりで更新プログラム(管理ツールでない)のインストールが始まった。あるいはひょっとして、再び、数時間ヘタすりゃ日中まるまる過ぎて夜になっても終わってない、というような惨事が降ってきたらどうしようかと思った。が、 WindowsUpdateも最新に近い状態まで更新して以降ならば、数分単位程度で済むようだ。とはいえ、インストールが始まってからも相応に時間を要するが。

ここで、Samba というより Windows の作法の話。Windowsの世界の掟は駆け出しのころに少し触れただけでもうすっかり忘れ去っていたが、ローカルアカウントとドメインアカウントは別物なので、導入時の労務を考えなくてはならない。労務はさておき、この管理ツールも当初ローカルアカウントでインストールしてしまい、ドメインアカウントで再度インストールな二度手間になってしまった。ローカルアカウントは、初期設置用とモバイルユーザ用の2つとし、他はドメインアカウントで作業しなくてはならない。

Windows7で管理ツールをスタートメニューに
https://technet.microsoft.com/ja-jp/windows/win7_tips44.aspx







某オフィスでの「しくみ」検討

オフィスと呼ぶほどの規模でもないし、インフラと呼ぶにもあまりに細やかなので「しくみ」で。

検討の前に何より。諸先人の皆様のおかげで、Samba4 の AD にたった1台のPCを参加させる段にようやく至った。また、Samba4 AD にログインできる状態のPCがそのままインターネットアクセスできることを知った。これで

・PCの認証
・ユーザーの認証
・ファイルサーバ
・DNS

は、VirtualBox上の CentOS7 1台でとりあえず。プリンターサーバも追ってそのうち。とりあえずLinux向けドライバが存在することは間違いないのでどうにか。とはいえ「しくみ」程度の小規模ならば直接ネットワークプリンタ利用で十分。

それから、DHCPはCiscoルータ、ファイアウォールは…Linuxに機能を持たせたい願望はあるがそもそも全く知らないので何とも。当面はWANルータのたいへん簡素な機能で。

会計システムは、先方様がそもそもかつてこの分野の設計開発の方だったのでおまかせ。

Webは既に、簡易なものは先方様がお持ちで、メールも当面は従来のサービスを継続。今さらオンプレミスに? これを言ったらファイルサーバを持つ必要さえ無いのだが。

業務システムはWebベースで Apatch+Maria で私が・・・先は長いが時間はない。スケジュールが濃厚だぜ AWESOME!!(Neil Pasricha 氏ふう)



CentOS 7 firewall について後日設定を練習するためのメモ

アットマークアイティから

http://www.atmarkit.co.jp/ait/articles/1602/18/news019_3.html


2016年2月19日金曜日

Samba AD で今度はケルベロスな誤設定

ソフトウェアそのもの問題でなく、導入における個別の作業漏れあるいはミスに起因するであろうハナシ。
















Samba AD の基本的な導入と初期設定の後、Windowsクライアントからドメイン参加を試みたところこのエラー。Kerberosを全くわかっちゃいないし、そもそも、このエラーにおける "プリンシパル" とは何か? の時点で

「えっ、あの、スポーツのチームとか組織の代表のことじゃないの!?」

程度のしょぼい誤認識しか無く、辞書を引いたら語源はバレエとか。


こんなザマなので、エラーコードをそのままに検索したところこんなコンテンツが。

https://www.ipa.go.jp/security/rfc/RFC1510-07JA.html


新しい扉をひとつまた開いた!開いても難題を垣間見たに過ぎないけど、見えないよりはずっと進歩だぜAWESOME! (Neil Pasricha 氏ふう)



追記:

もう半歩先に進んだところ、TivoliのドキュメントからKerberosの概要が。
http://publib.boulder.ibm.com/tividd/td/framework/SC32-0806-00/ja_JA/HTML/ref29.htm






2016年2月17日水曜日

ERROR(大なることclass 'samba.provision. ProvisioningError'小なること):

一難越えてまた越える、かな。Windowsドメインプロビジョニングな最初のエラー。

ERROR(<class 'samba.provision.ProvisioningError'>):

Provision failed - ProvisioningError: guess_names: 'realm=TESTD.LOCAL' in /usr/local/samba/etc/smb.conf must match chosen realm 'TESTAD.LOCAL'!
Please remove the smb.conf file and let provision generate it File "/usr/local/samba/lib64/python2.7/site-packages/samba/netcmd/domain.py", line 434, 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 2022, in provision sitename=sitename, rootdn=rootdn, domain_names_forced=(samdb_fill
== FILL_DRS))

File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 606, in guess_names raise ProvisioningError("guess_names: 'realm=%s' in %s must match
chosen realm '%s'!  Please remove the smb.conf file and let provision generate it" % (lp.get("realm").upper(), lp.configfile, realm)



                                                                    
                                                                    
                                                                    
                                            
[root@dctest01 ~]# more /usr/local/samba/etc/smb.conf# Global parameters                                 
[global]                                            
        workgroup = TESTD                           
        realm = TESTD.LOCAL                         
        netbios name = DCTEST01                     
        server role = active directory domain controller
        dns forwarder = (外部DNSグローバル)                  
        idmap_ldb:use rfc2307 = yes                    

[netlogon]
        path = /usr/local/samba/var/locks/sysvol/testd.local/scripts
        read only = No                                             

[sysvol]
        path = /usr/local/samba/var/locks/sysvol
        read only = No                         
[root@dctest01 ~]# vi /usr/local/samba/etc/smb.conf
[root@dctest01 ~]#                                
[root@dctest01 ~]#                                
[root@dctest01 ~]#                                
[root@dctest01 ~]# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive --function-level=2008_R2
Realm: TESTAD.LOCAL                    
 Domain [TESTAD]:                      
 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) [(外部DNSグローバル)]:
Administrator password:                                                        
Retype password:                                                               
ERROR(<class 'samba.provision.ProvisioningError'>): Provision failed - ProvisioningError: guess_names: Workgroup 'TESTD' in smb.conf must match chosen domain 'TESTAD'!  Please remove the /usr/local/samba/etc/smb.conf file and let provision generate it                                                                    
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/netcmd/domain.py", line 434, 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 2022, in provision                                                   
    sitename=sitename, rootdn=rootdn, domain_names_forced=(samdb_fill == FILL_DRS))                                                                            
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 618, in guess_names                                                  
    raise ProvisioningError("guess_names: Workgroup '%s' in smb.conf must match chosen domain '%s'!  Please remove the %s file and let provision generate it" % (lp.get("workgroup").upper(), domain, lp.configfile))                          

[root@dctest01 ~]# rm /usr/local/samba/etc/smb.confrm: remove regular file ‘/usr/local/samba/etc/smb.conf’?
[root@dctest01 ~]#                                      
[root@dctest01 ~]#                                      
[root@dctest01 ~]# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive --function-level=2008_R2                                       
Realm: TESTAD.LOCAL                                                            
 Domain [TESTAD]:                                                              
 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) [(外部DNSグローバル)]:
Administrator password:                                                        
Retype password:                                                               
ERROR(<class 'samba.provision.ProvisioningError'>): Provision failed - ProvisioningError: guess_names: Workgroup 'TESTD' in smb.conf must match chosen domain 'TESTAD'!  Please remove the /usr/local/samba/etc/smb.conf file and let provision generate it                                                                    
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/netcmd/domain.py", line 434, 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 2022, in provision                                                   
    sitename=sitename, rootdn=rootdn, domain_names_forced=(samdb_fill == FILL_DRS))                                                                            
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 618, in guess_names                                                  
    raise ProvisioningError("guess_names: Workgroup '%s' in smb.conf must match chosen domain '%s'!  Please remove the %s file and let provision generate it" % (lp.get("workgroup").upper(), domain, lp.configfile))                          

[root@dctest01 ~]# more /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py                                                             
# Unix SMB/CIFS implementation.                                                
# backend code for provisioning a Samba4 server                                

# Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007-2012
# Copyright (C) Andrew Bartlett <abartlet@samba.org> 2008-2009
# Copyright (C) Oliver Liebel <oliver@itc.li> 2008-2009      
#                                                            
# Based on the original in EJS:                              
# Copyright (C) Andrew Tridgell <tridge@samba.org> 2005      
#                                                            
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or  
# (at your option) any later version.                                
#                                                                    
# This program is distributed in the hope that it will be useful,    
# but WITHOUT ANY WARRANTY; without even the implied warranty of     
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      
# GNU General Public License for more details.                       
#                                                                    
# You should have received a copy of the GNU General Public License  
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#                                                                     

"""Functions for setting up a Samba configuration."""

__docformat__ = "restructuredText"

from base64 import b64encode
import os
import re
import pwd
import grp
import logging
import time  
import uuid  
import socket
import urllib
import string
import tempfile

import ldb

from samba.auth import system_session, admin_session
import samba                                       
from samba.samba3 import smbd, passdb              
from samba.samba3 import param as s3param          
from samba.dsdb import DS_DOMAIN_FUNCTION_2000     
from samba import (                                
    Ldb,                                           
    MAX_NETBIOS_NAME_LEN,                          
    check_all_substituted,                         
    is_valid_netbios_char,                         
    setup_file,                                    
    substitute_var,                                
    valid_netbios_name,                            
    version,                                       
    )                                              
from samba.dcerpc import security, misc            
from samba.dcerpc.misc import (                    
    SEC_CHAN_BDC,                                  
    SEC_CHAN_WKSTA,                                
    )                                              
from samba.dsdb import (                           
    DS_DOMAIN_FUNCTION_2003,                       
    DS_DOMAIN_FUNCTION_2008_R2,                    
    ENC_ALL_TYPES,                                 
    )                                              
from samba.idmap import IDmapDB                    
from samba.ms_display_specifiers import read_ms_ldif
from samba.ntacls import setntacl, getntacl, dsacl2fsacl
from samba.ndr import ndr_pack, ndr_unpack             
from samba.provision.backend import (                  
    ExistingBackend,                                   
    FDSBackend,                                        
    LDBBackend,                                        
    OpenLDAPBackend,                                   
    )                                                  
from samba.descriptor import (                         
    get_empty_descriptor,                              
    get_config_descriptor,                             
    get_config_partitions_descriptor,                  
    get_config_sites_descriptor,                       
    get_config_ntds_quotas_descriptor,                 
    get_config_delete_protected1_descriptor,           
    get_config_delete_protected1wd_descriptor,         
    get_config_delete_protected2_descriptor,           
    get_domain_descriptor,                             
    get_domain_infrastructure_descriptor,              
    get_domain_builtin_descriptor,                     
    get_domain_computers_descriptor,                   
    get_domain_users_descriptor,                       
    get_domain_controllers_descriptor,                 
    get_domain_delete_protected1_descriptor,           
    get_domain_delete_protected2_descriptor,           
    get_dns_partition_descriptor,                      
    get_dns_forest_microsoft_dns_descriptor,           
    get_dns_domain_microsoft_dns_descriptor,           
    )                                                  
from samba.provision.common import (                   
    setup_path,                                        
    setup_add_ldif,                                    
    setup_modify_ldif,                                 
    FILL_FULL,                                         
    FILL_SUBDOMAIN,                                    
    FILL_NT4SYNC,                                      
    FILL_DRS                                           
)                                                      
from samba.provision.sambadns import (                 
    get_dnsadmins_sid,                                 
    setup_ad_dns,                                      
    create_dns_update_list                             
    )                                                  

import samba.param
import samba.registry
from samba.schema import Schema
from samba.samdb import SamDB 
from samba.dbchecker import dbcheck


DEFAULT_POLICY_GUID = "31B2F340-016D-11D2-945F-00C04FB984F9"
DEFAULT_DC_POLICY_GUID = "6AC1786C-016F-11D2-945F-00C04fB984F9"
DEFAULTSITE = "Default-First-Site-Name"                       
LAST_PROVISION_USN_ATTRIBUTE = "lastProvisionUSN"             


class ProvisionPaths(object):

    def __init__(self):
        self.shareconf = None
        self.hklm = None    
        self.hkcu = None    
        self.hkcr = None    
        self.hku = None     
        self.hkpd = None    
        self.hkpt = None    
        self.samdb = None   
        self.idmapdb = None 
        self.secrets = None 
        self.keytab = None  
        self.dns_keytab = None
        self.dns = None      
        self.winsdb = None   
        self.private_dir = None
        self.state_dir = None 


class ProvisionNames(object):

    def __init__(self):
        self.ncs = None
        self.rootdn = None
        self.domaindn = None
        self.configdn = None
        self.schemadn = None
        self.dnsforestdn = None
        self.dnsdomaindn = None
        self.ldapmanagerdn = None
        self.dnsdomain = None   
        self.realm = None       
        self.netbiosname = None 
        self.domain = None      
        self.hostname = None    
        self.sitename = None    
        self.smbconf = None     
        self.domainsid = None   
        self.forestsid = None   
        self.domainguid = None  
        self.name_map = {}      


def find_provision_key_parameters(samdb, secretsdb, idmapdb, paths, smbconf,
        lp):                                                               
    """Get key provision parameters (realm, domain, ...) from a given provision

    :param samdb: An LDB object connected to the sam.ldb file
    :param secretsdb: An LDB object connected to the secrets.ldb file
    :param idmapdb: An LDB object connected to the idmap.ldb file   
    :param paths: A list of path to provision object                
    :param smbconf: Path to the smb.conf file                       
    :param lp: A LoadParm object                                    
    :return: A list of key provision parameters                     
    """                                                             
    names = ProvisionNames()                                        
    names.adminpass = None                                          

    # NT domain, kerberos realm, root dn, domain dn, domain dns name
    names.domain = string.upper(lp.get("workgroup"))               
    names.realm = lp.get("realm")                                  
    names.dnsdomain = names.realm.lower()                          
    basedn = samba.dn_from_dns_name(names.dnsdomain)               
    names.realm = string.upper(names.realm)                        
    # netbiosname                                                  
    # Get the netbiosname first (could be obtained from smb.conf in theory)
    res = secretsdb.search(expression="(flatname=%s)" %                   
                            names.domain,base="CN=Primary Domains",       
                            scope=ldb.SCOPE_SUBTREE, attrs=["sAMAccountName"])
    names.netbiosname = str(res[0]["sAMAccountName"]).replace("$","")        

    names.smbconf = smbconf

    # That's a bit simplistic but it's ok as long as we have only 3
    # partitions                                                  
    current = samdb.search(expression="(objectClass=*)",          
        base="", scope=ldb.SCOPE_BASE,                            
        attrs=["defaultNamingContext", "schemaNamingContext",     
               "configurationNamingContext","rootDomainNamingContext",
               "namingContexts"])                                    

    names.configdn = current[0]["configurationNamingContext"][0]
    names.schemadn = current[0]["schemaNamingContext"][0]      
    if not (ldb.Dn(samdb, basedn) == (ldb.Dn(samdb,            
                                       current[0]["defaultNamingContext"][0]))):
        raise ProvisioningError(("basedn in %s (%s) and from %s (%s)"          
                                 "is not the same ..." % (paths.samdb,         
                                    str(current[0]["defaultNamingContext"][0]),
                                    paths.smbconf, basedn)))                   

    names.domaindn=current[0]["defaultNamingContext"][0]
    names.rootdn=current[0]["rootDomainNamingContext"][0]
    names.ncs=current[0]["namingContexts"]              
    names.dnsforestdn = None                            
    names.dnsdomaindn = None                            

    for i in range(0, len(names.ncs)):
        nc = names.ncs[i]            

        dnsforestdn = "DC=ForestDnsZones,%s" % (str(names.rootdn))
        if nc == dnsforestdn:                                    
            names.dnsforestdn = dnsforestdn                      
            continue                                             

        dnsdomaindn = "DC=DomainDnsZones,%s" % (str(names.domaindn))
        if nc == dnsdomaindn:                                      
            names.dnsdomaindn = dnsdomaindn                        
            continue                                               

    # default site name
    res3 = samdb.search(expression="(objectClass=site)",
        base="CN=Sites," + names.configdn, scope=ldb.SCOPE_ONELEVEL, attrs=["cn"
])                                                                             
    names.sitename = str(res3[0]["cn"])                                        

    # dns hostname and server dn
    res4 = samdb.search(expression="(CN=%s)" % names.netbiosname,
                            base="OU=Domain Controllers,%s" % basedn,
                            scope=ldb.SCOPE_ONELEVEL, attrs=["dNSHostName"])
    names.hostname = str(res4[0]["dNSHostName"]).replace("." + names.dnsdomain,
"")                                                                            

    server_res = samdb.search(expression="serverReference=%s" % res4[0].dn,
                                attrs=[], base=names.configdn)            
    names.serverdn = str(server_res[0].dn)                                

    # invocation id/objectguid
    res5 = samdb.search(expression="(objectClass=*)",
            base="CN=NTDS Settings,%s" % str(names.serverdn),
            scope=ldb.SCOPE_BASE,                           
            attrs=["invocationID", "objectGUID"])           
    names.invocation = str(ndr_unpack(misc.GUID, res5[0]["invocationId"][0]))
[root@dctest01 ~]#                                                          
[root@dctest01 ~]#                                                          
[root@dctest01 ~]# vi /usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py                                                           
[root@dctest01 ~]#                                                         
[root@dctest01 ~]#

                                                       
[root@dctest01 ~]# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive --function-level=2008_R2                                                                                                             
Realm: TEST.LOCAL                                                                                                 
 Domain [TEST]:                                                                                                   
 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) [(外部DNSグローバル)]:                                   
Administrator password:                                                                                           
Retype password:                                                                                                  
ERROR(<class 'samba.provision.ProvisioningError'>): Provision failed - ProvisioningError: guess_names: 'realm=TESTAD.LOCAL' in /usr/local/samba/etc/smb.conf must match chosen realm 'TEST.LOCAL'!  Please remove the smb.conf file and let provision generate it                                                                                       
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/netcmd/domain.py", line 434, 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 2022, in provision      
    sitename=sitename, rootdn=rootdn, domain_names_forced=(samdb_fill == FILL_DRS))                               
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 606, in guess_names     
    raise ProvisioningError("guess_names: 'realm=%s' in %s must match chosen realm '%s'!  Please remove the smb.conf file and let provision generate it" % (lp.get("realm").upper(), lp.configfile, realm))                          

[root@dctest01 ~]# rm /usr/local/samba/etc/smb.confrm: remove regular file ‘/usr/local/samba/etc/smb.conf’? ^C   
[root@dctest01 ~]# vi /usr/local/samba/etc/smb.conf         
[root@dctest01 ~]#                                          
[root@dctest01 ~]#                                          
[root@dctest01 ~]#                                          
[root@dctest01 ~]# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive --function-level=2008_R2                                                                                                             
Realm: TESTAD.LOCAL                                                                                               
 Domain [TESTAD]:                                                                                                 
 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) [(外部DNSグローバル)]:                                   
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=testad,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=testad,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:              dctest01                                                                                   
NetBIOS Domain:        TESTAD                                                                                     
DNS Domain:            testad.local                                                                               
DOMAIN SID:            S-1-5-21-1668573399-2154983584-2311720169                                                  

[root@dctest01 ~]#
[root@dctest01 ~]#
[root@dctest01 ~]#
[root@dctest01 ~]#
[root@dctest01 ~]# ls /etc/rc.d/init.d/
functions  netconsole  network  README
[root@dctest01 ~]# vi /etc/rc.d/init.d/samba4
[root@dctest01 ~]#                          
[root@dctest01 ~]#                          
[root@dctest01 ~]#                          
[root@dctest01 ~]#                          
[root@dctest01 ~]# chmod 755 /etc/rc.d/init.d/samba4
[root@dctest01 ~]# chmod +x /etc/rc.d/init.d/samba4
[root@dctest01 ~]# ln -s /etc/rc.d/init.d/samba4 /etc/rc3.d/S80samba4
[root@dctest01 ~]# chkconfig samba4 on && systemctl start samba4
[root@dctest01 ~]# echo "nameserver 127.0.0.1" > /etc/resolv.conf
[root@dctest01 ~]# sed -i "/^DNS1/cDNS=127.0.0.1" /etc/sysconfig/network-scripts/ifcfg-*
[root@dctest01 ~]# systemctl restart network                                           
[root@dctest01 ~]#                                                                     
[root@dctest01 ~]#                                                                     
[root@dctest01 ~]#                                                                     
[root@dctest01 ~]#                                                                     
[root@dctest01 ~]#                                                                     
[root@dctest01 ~]#                                                                     
[root@dctest01 ~]# /usr/local/samba/bin/samba-tool dns zonelist 127.0.0.1 -U Administrator
Password for [TESTAD\Administrator]:                                                     
  2 zone(s) found                                                                        

  pszZoneName                 : testad.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.testad.local                             

  pszZoneName                 : _msdcs.testad.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.testad.local                             
[root@dctest01 ~]#                                                                      
[root@dctest01 ~]#
[root@dctest01 ~]#
[root@dctest01 ~]#
[root@dctest01 ~]# host -t SRV _ldap._tcp.TESTAD.LOCAL 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

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

_kerberos._udp.TESTAD.LOCAL has SRV record 0 100 88 dctest01.testad.local.
[root@dctest01 ~]# more /etc/hostname
dctest01
[root@dctest01 ~]# host -t A dctest01.testad.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

dctest01.testad.local has address 172.19.19.181
[root@dctest01 ~]#
[root@dctest01 ~]# cp /usr/local/samba/private/krb5.conf /etc/krb5.conf
cp: overwrite ‘/etc/krb5.conf’?                                       
[root@dctest01 ~]#                                                    
[root@dctest01 ~]#                                                    
[root@dctest01 ~]#
[root@dctest01 ~]#
[root@dctest01 ~]# kinit administrator@TESTAD.LOCAL
Password for administrator@TESTAD.LOCAL:
Warning: Your password will expire in 41 days on Thu 31 Mar 2016 02:04:13 PM JST
[root@dctest01 ~]#
[root@dctest01 ~]#
[root@dctest01 ~]#
[root@dctest01 ~]# firewall-cmd --permanent --zone=public --add-service=samba
-bash: firewall-cmd: command not found
[root@dctest01 ~]#
[root@dctest01 ~]#
[root@dctest01 ~]#
[root@dctest01 ~]# systemctl status firewalld
● firewalld.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
[root@dctest01 ~]#
[root@dctest01 ~]#
[root@dctest01 ~]# setsebool -P samba_domain_controller on
[root@dctest01 ~]# setsebool -P samba_export_all_ro on
[root@dctest01 ~]# setsebool -P samba_explort_all_rw on
Boolean samba_explort_all_rw is not defined
[root@dctest01 ~]# setsebool -P samba_export_all_rw on
[root@dctest01 ~]# setsebool -P samba_enable_home_dirs o
setsebool: illegal value o for boolean samba_enable_home_dirs
[root@dctest01 ~]# setsebool -P samba_enable_home_dirs on
[root@dctest01 ~]#
[root@dctest01 ~]#
[root@dctest01 ~]#